diff --git a/.github/agents/wpf-to-avalonia-migrator.agent.md b/.github/agents/wpf-to-avalonia-migrator.agent.md index 969954bd..44a54b6b 100644 --- a/.github/agents/wpf-to-avalonia-migrator.agent.md +++ b/.github/agents/wpf-to-avalonia-migrator.agent.md @@ -4,11 +4,34 @@ name: WPF → Avalonia Migrator argument-hint: Name a specific file, view, or area to migrate (e.g. "migrate FModel/Views/SettingsView.xaml" or "migrate all Views") tools: [ - execute, - read, - edit, - search, - web, + vscode/memory, + execute/runNotebookCell, + execute/testFailure, + execute/getTerminalOutput, + execute/awaitTerminal, + execute/killTerminal, + execute/createAndRunTask, + execute/runInTerminal, + execute/runTests, + read/getNotebookSummary, + read/problems, + read/readFile, + read/terminalSelection, + read/terminalLastCommand, + edit/createDirectory, + edit/createFile, + edit/createJupyterNotebook, + edit/editFiles, + edit/editNotebook, + edit/rename, + search/changes, + search/codebase, + search/fileSearch, + search/listDirectory, + search/searchResults, + search/textSearch, + search/usages, + web/fetch, github/add_issue_comment, github/add_reply_to_pull_request_comment, github/create_pull_request, diff --git a/FModel/App.xaml b/FModel/App.xaml index 81f03f52..abcf2ed5 100644 --- a/FModel/App.xaml +++ b/FModel/App.xaml @@ -4,13 +4,17 @@ RequestedThemeVariant="Dark"> - + + + + + + + + #206BD4 +/// Minimal replacement for WPF's CompositeCollection. +/// Merges multiple sources into a single flat enumerable +/// and relays events from each source. +/// +public class CompositeCollection : IEnumerable, INotifyCollectionChanged, IDisposable +{ + private readonly IEnumerable[] _sources; + private bool _disposed; + + public event NotifyCollectionChangedEventHandler? CollectionChanged; + + public CompositeCollection(params IEnumerable[] sources) + { + _sources = sources; + foreach (var source in _sources) + { + if (source is INotifyCollectionChanged ncc) + ncc.CollectionChanged += OnSourceCollectionChanged; + } + } + + private void OnSourceCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) + { + // Relay as a reset since index mapping across multiple sources is complex + CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + } + + public IEnumerator GetEnumerator() + { + foreach (var source in _sources) + { + foreach (var item in source) + yield return item; + } + } + + public int Count + { + get + { + var count = 0; + foreach (var source in _sources) + { + if (source is ICollection c) + count += c.Count; + else + Debug.Fail($"CompositeCollection.Count: source {source.GetType().Name} does not implement ICollection; its items are not counted."); + } + return count; + } + } + + public void Dispose() + { + if (_disposed) + return; + _disposed = true; + + foreach (var source in _sources) + { + if (source is INotifyCollectionChanged ncc) + ncc.CollectionChanged -= OnSourceCollectionChanged; + } + } +} diff --git a/FModel/MainWindow.xaml b/FModel/MainWindow.xaml index ad76d152..b85dd4ce 100644 --- a/FModel/MainWindow.xaml +++ b/FModel/MainWindow.xaml @@ -294,7 +294,7 @@ - @@ -341,14 +341,14 @@ - @@ -500,17 +500,17 @@ - @@ -603,17 +603,17 @@ @@ -783,6 +783,7 @@ Height="32" Cursor="Hand" Margin="0,0,2,0" + Classes="AssetsExplorerToggle" IsChecked="{Binding IsAssetsExplorerVisible, Mode=TwoWay}" Theme="{StaticResource AssetsExplorerToggleButtonStyle}" /> + x:Name="LogRtbName" /> ApplicationService.ThreadWorkerView; public FullyObservableCollection AesKeys { get; private set; } // holds all aes keys even the main one - public ICollectionView AesKeysView { get; private set; } // holds all aes key ordered by name for the ui + public DataGridCollectionView AesKeysView { get; private set; } // holds all aes key ordered by name for the ui public bool HasChange { get; set; } private AesResponse _keysFromSettings; @@ -38,7 +38,7 @@ public class AesManagerViewModel : ViewModel _mainKey.Key = Helper.FixKey(_keysFromSettings.MainKey); AesKeys = new FullyObservableCollection(EnumerateAesKeys()); AesKeys.ItemPropertyChanged += AesKeysOnItemPropertyChanged; - AesKeysView = new ListCollectionView(AesKeys) { SortDescriptions = { new SortDescription("Name", ListSortDirection.Ascending) } }; + AesKeysView = new DataGridCollectionView(AesKeys) { SortDescriptions = { DataGridSortDescription.FromPath("Name", ListSortDirection.Ascending) } }; }); } diff --git a/FModel/ViewModels/ApiEndpoints/Models/GitHubResponse.cs b/FModel/ViewModels/ApiEndpoints/Models/GitHubResponse.cs index 2bd8e1cd..e9e8b4fd 100644 --- a/FModel/ViewModels/ApiEndpoints/Models/GitHubResponse.cs +++ b/FModel/ViewModels/ApiEndpoints/Models/GitHubResponse.cs @@ -1,10 +1,12 @@ using System; using System.Diagnostics; using System.Linq; +using Avalonia.Media.Imaging; using FModel.Framework; using FModel.Settings; using Serilog; using J = Newtonsoft.Json.JsonPropertyAttribute; +using JI = Newtonsoft.Json.JsonIgnoreAttribute; namespace FModel.ViewModels.ApiEndpoints.Models; @@ -116,17 +118,37 @@ public class GitHubCommit : ViewModel } } -public class Commit +public class Commit : ViewModel { - [J("author")] public Author Author { get; set; } - [J("message")] public string Message { get; set; } + private Author _author = null!; + [J("author")] public Author Author + { + get => _author; + set => SetProperty(ref _author, value); + } + + private string _message = null!; + [J("message")] public string Message + { + get => _message; + set => SetProperty(ref _message, value); + } } -public class Author +public class Author : ViewModel { - [J("name")] public string Name { get; set; } - [J("login")] public string Login { get; set; } + [J("name")] public string Name { get; set; } = null!; + [J("login")] public string Login { get; set; } = null!; [J("date")] public DateTime Date { get; set; } - [J("avatar_url")] public string AvatarUrl { get; set; } - [J("html_url")] public string HtmlUrl { get; set; } + [J("avatar_url")] public string AvatarUrl { get; set; } = null!; + [J("html_url")] public string HtmlUrl { get; set; } = null!; + + private Bitmap? _avatarImage; + + [JI] + public Bitmap? AvatarImage + { + get => _avatarImage; + set => SetProperty(ref _avatarImage, value); + } } diff --git a/FModel/ViewModels/AssetsFolderViewModel.cs b/FModel/ViewModels/AssetsFolderViewModel.cs index 135f08cf..2712e4da 100644 --- a/FModel/ViewModels/AssetsFolderViewModel.cs +++ b/FModel/ViewModels/AssetsFolderViewModel.cs @@ -4,7 +4,7 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Windows.Data; +using Avalonia.Collections; using Avalonia.Threading; using CUE4Parse.FileProvider.Objects; using CUE4Parse.UE4.Versions; @@ -87,35 +87,35 @@ public class TreeItem : ViewModel public AssetsListViewModel AssetsList { get; } = new(); public RangeObservableCollection Folders { get; } = []; - private ICollectionView _foldersView; - public ICollectionView FoldersView + private DataGridCollectionView _foldersView; + public DataGridCollectionView FoldersView { get { - _foldersView ??= new ListCollectionView(Folders) + _foldersView ??= new DataGridCollectionView(Folders) { - SortDescriptions = { new SortDescription(nameof(Header), ListSortDirection.Ascending) } + SortDescriptions = { DataGridSortDescription.FromPath(nameof(Header), ListSortDirection.Ascending) } }; return _foldersView; } } - private ICollectionView? _filteredFoldersView; - public ICollectionView? FilteredFoldersView + private DataGridCollectionView? _filteredFoldersView; + public DataGridCollectionView? FilteredFoldersView { get { - _filteredFoldersView ??= new ListCollectionView(Folders) + _filteredFoldersView ??= new DataGridCollectionView(Folders) { - SortDescriptions = { new SortDescription(nameof(Header), ListSortDirection.Ascending) }, + SortDescriptions = { DataGridSortDescription.FromPath(nameof(Header), ListSortDirection.Ascending) }, Filter = e => ItemFilter(e, SearchText.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries)) }; return _filteredFoldersView; } } - private CompositeCollection _combinedEntries; - public CompositeCollection CombinedEntries + private Framework.CompositeCollection _combinedEntries; + public Framework.CompositeCollection CombinedEntries { get { @@ -123,11 +123,8 @@ public class TreeItem : ViewModel { void CreateCombinedEntries() { - _combinedEntries = new CompositeCollection - { - new CollectionContainer { Collection = FilteredFoldersView }, - new CollectionContainer { Collection = AssetsList.AssetsView } - }; + _combinedEntries?.Dispose(); + _combinedEntries = new Framework.CompositeCollection(FilteredFoldersView, AssetsList.AssetsView); } if (!Dispatcher.UIThread.CheckAccess()) @@ -200,12 +197,12 @@ public class TreeItem : ViewModel public class AssetsFolderViewModel { public RangeObservableCollection Folders { get; } - public ICollectionView FoldersView { get; } + public DataGridCollectionView FoldersView { get; } public AssetsFolderViewModel() { Folders = []; - FoldersView = new ListCollectionView(Folders) { SortDescriptions = { new SortDescription("Header", ListSortDirection.Ascending) } }; + FoldersView = new DataGridCollectionView(Folders) { SortDescriptions = { DataGridSortDescription.FromPath("Header", ListSortDirection.Ascending) } }; } public void BulkPopulate(IReadOnlyCollection entries) diff --git a/FModel/ViewModels/AssetsListViewModel.cs b/FModel/ViewModels/AssetsListViewModel.cs index 1666644c..2122c41e 100644 --- a/FModel/ViewModels/AssetsListViewModel.cs +++ b/FModel/ViewModels/AssetsListViewModel.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using System.Windows.Data; +using Avalonia.Collections; using CUE4Parse.FileProvider.Objects; using FModel.Framework; @@ -9,14 +9,14 @@ public class AssetsListViewModel { public RangeObservableCollection Assets { get; } = []; - private ICollectionView _assetsView; - public ICollectionView AssetsView + private DataGridCollectionView _assetsView; + public DataGridCollectionView AssetsView { get { - _assetsView ??= new ListCollectionView(Assets) + _assetsView ??= new DataGridCollectionView(Assets) { - SortDescriptions = { new SortDescription("Asset.Path", ListSortDirection.Ascending) } + SortDescriptions = { DataGridSortDescription.FromPath("Asset.Path", ListSortDirection.Ascending) } }; return _assetsView; } diff --git a/FModel/ViewModels/AudioPlayerViewModel.cs b/FModel/ViewModels/AudioPlayerViewModel.cs index 0824db71..6f4f7ce8 100644 --- a/FModel/ViewModels/AudioPlayerViewModel.cs +++ b/FModel/ViewModels/AudioPlayerViewModel.cs @@ -6,7 +6,7 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; -using System.Windows.Data; +using Avalonia.Collections; using Avalonia.Threading; using CSCore; using CSCore.CoreAudioAPI; @@ -201,17 +201,17 @@ public class AudioPlayerViewModel : ViewModel, ISource, IDisposable public bool IsPaused => PlayedFile.PlaybackState == PlaybackState.Paused; private readonly ObservableCollection _audioFiles; - public ICollectionView AudioFilesView { get; } - public ICollectionView AudioDevicesView { get; } + public DataGridCollectionView AudioFilesView { get; } + public DataGridCollectionView AudioDevicesView { get; } public AudioPlayerViewModel() { _sourceTimer = new Timer(TimerTick, null, 0, 10); _audioFiles = new ObservableCollection(); - AudioFilesView = new ListCollectionView(_audioFiles); + AudioFilesView = new DataGridCollectionView(_audioFiles); var audioDevices = new ObservableCollection(EnumerateDevices()); - AudioDevicesView = new ListCollectionView(audioDevices) { SortDescriptions = { new SortDescription("FriendlyName", ListSortDirection.Ascending) } }; + AudioDevicesView = new DataGridCollectionView(audioDevices) { SortDescriptions = { DataGridSortDescription.FromPath("FriendlyName", ListSortDirection.Ascending) } }; SelectedAudioDevice ??= audioDevices.FirstOrDefault(); } @@ -322,6 +322,7 @@ public class AudioPlayerViewModel : ViewModel, ISource, IDisposable if (!auto) { + // TODO(P4-004): Replace Microsoft.Win32.SaveFileDialog with Avalonia StorageProvider API. var saveFileDialog = new SaveFileDialog { Title = "Save Audio", diff --git a/FModel/ViewModels/BackupManagerViewModel.cs b/FModel/ViewModels/BackupManagerViewModel.cs index aff999b4..ffce03c1 100644 --- a/FModel/ViewModels/BackupManagerViewModel.cs +++ b/FModel/ViewModels/BackupManagerViewModel.cs @@ -4,7 +4,7 @@ using System.ComponentModel; using System.IO; using System.Linq; using System.Threading.Tasks; -using System.Windows.Data; +using Avalonia.Collections; using Avalonia.Threading; using CUE4Parse.FileProvider.Objects; using FModel.Framework; @@ -35,13 +35,13 @@ public class BackupManagerViewModel : ViewModel } public ObservableCollection Backups { get; } - public ICollectionView BackupsView { get; } + public DataGridCollectionView BackupsView { get; } public BackupManagerViewModel(string gameName) { _gameName = gameName; Backups = new ObservableCollection(); - BackupsView = new ListCollectionView(Backups) { SortDescriptions = { new SortDescription("FileName", ListSortDirection.Ascending) } }; + BackupsView = new DataGridCollectionView(Backups) { SortDescriptions = { DataGridSortDescription.FromPath("FileName", ListSortDirection.Ascending) } }; } public async Task Initialize() diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 260a641b..166270f8 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -9,7 +9,9 @@ using System.Net.Http.Headers; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; using CUE4Parse; using CUE4Parse.Compression; @@ -136,13 +138,16 @@ public class CUE4ParseViewModel : ViewModel { var scale = ImGuiController.GetDpiScale(); var htz = Snooper.GetMaxRefreshFrequency(); + var primaryScreen = (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow?.Screens.Primary; + var screenWidth = primaryScreen?.Bounds.Width ?? 1920; + var screenHeight = primaryScreen?.Bounds.Height ?? 1080; return _snooper = new Snooper( new GameWindowSettings { UpdateFrequency = htz }, new NativeWindowSettings { ClientSize = new OpenTK.Mathematics.Vector2i( - Convert.ToInt32(SystemParameters.MaximizedPrimaryScreenWidth * .75 * scale), - Convert.ToInt32(SystemParameters.MaximizedPrimaryScreenHeight * .85 * scale)), + Convert.ToInt32(screenWidth * .75 * scale), + Convert.ToInt32(screenHeight * .85 * scale)), NumberOfSamples = Constants.SAMPLES_COUNT, WindowBorder = WindowBorder.Resizable, Flags = ContextFlags.ForwardCompatible, diff --git a/FModel/ViewModels/Commands/AddEditDirectoryCommand.cs b/FModel/ViewModels/Commands/AddEditDirectoryCommand.cs index ea17267a..0926b4a8 100644 --- a/FModel/ViewModels/Commands/AddEditDirectoryCommand.cs +++ b/FModel/ViewModels/Commands/AddEditDirectoryCommand.cs @@ -1,7 +1,11 @@ -using AdonisUI.Controls; +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; using FModel.Framework; using FModel.Settings; using FModel.Views; +using Serilog; namespace FModel.ViewModels.Commands; @@ -11,25 +15,44 @@ public class AddEditDirectoryCommand : ViewModelCommand("Custom Directory", () => + try { - var index = contextViewModel.GetIndex(customDir); - var input = new CustomDir(customDir); - var result = input.ShowDialog(); - if (!result.HasValue || !result.Value || string.IsNullOrEmpty(customDir.Header) && string.IsNullOrEmpty(customDir.DirectoryPath)) - return; + var sourceDir = parameter as CustomDirectory ?? new CustomDirectory(); + var editableDir = new CustomDirectory(sourceDir.Header, sourceDir.DirectoryPath); - if (index > 1) + var index = contextViewModel.GetIndex(sourceDir); + var input = new CustomDir(editableDir); + var owner = (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow; + + if (owner == null) { - contextViewModel.Edit(index, customDir); + Log.Warning("AddEditDirectoryCommand: no owner window available, cannot show dialog"); + return; } - else - contextViewModel.Add(customDir); - }); + + var result = await input.ShowDialog(owner); + Apply(result); + + void Apply(bool? dialogResult) + { + if (dialogResult is not true || string.IsNullOrEmpty(editableDir.Header) && string.IsNullOrEmpty(editableDir.DirectoryPath)) + return; + + // Sync edits back to sourceDir so menu CommandParameters stay in sync + sourceDir.Header = editableDir.Header; + sourceDir.DirectoryPath = editableDir.DirectoryPath; + + if (index > 1) + contextViewModel.Edit(index, sourceDir); + else + contextViewModel.Add(sourceDir); + } + } + catch (Exception ex) + { + Log.Error(ex, "AddEditDirectoryCommand failed"); + } } } diff --git a/FModel/ViewModels/Commands/LoadCommand.cs b/FModel/ViewModels/Commands/LoadCommand.cs index fc4ad6cb..e191dd93 100644 --- a/FModel/ViewModels/Commands/LoadCommand.cs +++ b/FModel/ViewModels/Commands/LoadCommand.cs @@ -7,7 +7,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using AdonisUI.Controls; +using Avalonia.Controls; using CUE4Parse.FileProvider.Objects; using CUE4Parse.UE4.Readers; using CUE4Parse.UE4.VirtualFileSystem; @@ -19,6 +19,7 @@ using FModel.Settings; using FModel.Views.Resources.Controls; using K4os.Compression.LZ4.Streams; using Microsoft.Win32; +using Serilog; namespace FModel.ViewModels.Commands; @@ -57,7 +58,7 @@ public class LoadCommand : ViewModelCommand _applicationView.CUE4Parse.SearchVm.SearchResults.Clear(); _applicationView.SelectedLeftTabIndex = 1; // folders tab _applicationView.IsAssetsExplorerVisible = true; - Helper.CloseWindow("Search For Packages"); // close search window if opened + Helper.CloseWindow("Search For Packages"); // close search window if opened await Task.WhenAll( _applicationView.CUE4Parse.LoadLocalizedResources(), // load locres if not already loaded, @@ -69,35 +70,36 @@ public class LoadCommand : ViewModelCommand switch (UserSettings.Default.LoadingMode) { case ELoadingMode.Multiple: - { - var l = (IList) parameter; - if (l.Count == 0) { - UserSettings.Default.LoadingMode = ELoadingMode.All; - goto case ELoadingMode.All; - } + var l = (IList) parameter; + if (l.Count == 0) + { + UserSettings.Default.LoadingMode = ELoadingMode.All; + goto case ELoadingMode.All; + } - var directoryFilesToShow = l.Cast(); - FilterDirectoryFilesToDisplay(cancellationToken, directoryFilesToShow); - break; - } + var directoryFilesToShow = l.Cast(); + FilterDirectoryFilesToDisplay(cancellationToken, directoryFilesToShow); + break; + } case ELoadingMode.All: - { - FilterDirectoryFilesToDisplay(cancellationToken, null); - break; - } + { + FilterDirectoryFilesToDisplay(cancellationToken, null); + break; + } case ELoadingMode.AllButNew: case ELoadingMode.AllButModified: - { - FilterNewOrModifiedFilesToDisplay(cancellationToken); - break; - } + { + FilterNewOrModifiedFilesToDisplay(cancellationToken); + break; + } case ELoadingMode.AllButPatched: - { - FilterPacthedFilesToDisplay(cancellationToken); - break; - } - default: throw new ArgumentOutOfRangeException(); + { + FilterPacthedFilesToDisplay(cancellationToken); + break; + } + default: + throw new ArgumentOutOfRangeException(); } _discordHandler.UpdatePresence(_applicationView.CUE4Parse); @@ -113,13 +115,15 @@ public class LoadCommand : ViewModelCommand private void FilterDirectoryFilesToDisplay(CancellationToken cancellationToken, IEnumerable directoryFiles) { HashSet filter; - if (directoryFiles == null) filter = null; + if (directoryFiles == null) + filter = null; else { filter = []; foreach (var directoryFile in directoryFiles) { - if (!directoryFile.IsEnabled) continue; + if (!directoryFile.IsEnabled) + continue; filter.Add(directoryFile.Name); } } @@ -130,7 +134,8 @@ public class LoadCommand : ViewModelCommand foreach (var asset in _applicationView.CUE4Parse.Provider.Files.Values) { cancellationToken.ThrowIfCancellationRequested(); // cancel if needed - if (asset.IsUePackagePayload) continue; + if (asset.IsUePackagePayload) + continue; if (hasFilter) { @@ -151,6 +156,13 @@ public class LoadCommand : ViewModelCommand private void FilterNewOrModifiedFilesToDisplay(CancellationToken cancellationToken) { + if (!OperatingSystem.IsWindows()) + { + Log.Warning("Backup file comparison is not yet available on this platform (requires P4-004 StorageProvider migration)"); + return; + } + + // TODO(P4-004): Replace Microsoft.Win32.OpenFileDialog with Avalonia StorageProvider API. var openFileDialog = new OpenFileDialog { Title = "Select a backup file older than your current game version", @@ -159,7 +171,8 @@ public class LoadCommand : ViewModelCommand Multiselect = false }; - if (!openFileDialog.ShowDialog().GetValueOrDefault()) return; + if (!openFileDialog.ShowDialog().GetValueOrDefault()) + return; FLogger.Append(ELog.Information, () => FLogger.Text($"Backup file older than current game is '{openFileDialog.FileName.SubstringAfterLast("\\")}'", Constants.WHITE, true)); @@ -182,7 +195,8 @@ public class LoadCommand : ViewModelCommand using var compressionStream = LZ4Stream.Decode(fileStream); compressionStream.CopyTo(memoryStream); } - else fileStream.CopyTo(memoryStream); + else + fileStream.CopyTo(memoryStream); memoryStream.Position = 0; using var archive = new FStreamArchive(fileStream.Name, memoryStream); @@ -191,85 +205,88 @@ public class LoadCommand : ViewModelCommand switch (mode) { case ELoadingMode.AllButNew: - { - var paths = new HashSet(StringComparer.OrdinalIgnoreCase); - var magic = archive.Read(); - if (magic != BackupManagerViewModel.FBKP_MAGIC) { - archive.Position -= sizeof(uint); - while (archive.Position < archive.Length) + var paths = new HashSet(StringComparer.OrdinalIgnoreCase); + var magic = archive.Read(); + if (magic != BackupManagerViewModel.FBKP_MAGIC) + { + archive.Position -= sizeof(uint); + while (archive.Position < archive.Length) + { + cancellationToken.ThrowIfCancellationRequested(); + + archive.Position += 29; + paths.Add(archive.ReadString()[1..]); + archive.Position += 4; + } + } + else + { + var version = archive.Read(); + var count = archive.Read(); + for (var i = 0; i < count; i++) + { + cancellationToken.ThrowIfCancellationRequested(); + + archive.Position += sizeof(long) + sizeof(byte); + var fullPath = archive.ReadString(); + if (version < EBackupVersion.PerfectPath) + fullPath = fullPath[1..]; + + paths.Add(fullPath); + } + } + + foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files) { cancellationToken.ThrowIfCancellationRequested(); + if (asset.IsUePackagePayload || paths.Contains(key)) + continue; - archive.Position += 29; - paths.Add(archive.ReadString()[1..]); - archive.Position += 4; + entries.Add(asset); } + + break; } - else - { - var version = archive.Read(); - var count = archive.Read(); - for (var i = 0; i < count; i++) - { - cancellationToken.ThrowIfCancellationRequested(); - - archive.Position += sizeof(long) + sizeof(byte); - var fullPath = archive.ReadString(); - if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..]; - - paths.Add(fullPath); - } - } - - foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files) - { - cancellationToken.ThrowIfCancellationRequested(); - if (asset.IsUePackagePayload || paths.Contains(key)) continue; - - entries.Add(asset); - } - - break; - } case ELoadingMode.AllButModified: - { - var magic = archive.Read(); - if (magic != BackupManagerViewModel.FBKP_MAGIC) { - archive.Position -= sizeof(uint); - while (archive.Position < archive.Length) + var magic = archive.Read(); + if (magic != BackupManagerViewModel.FBKP_MAGIC) { - cancellationToken.ThrowIfCancellationRequested(); + archive.Position -= sizeof(uint); + while (archive.Position < archive.Length) + { + cancellationToken.ThrowIfCancellationRequested(); - archive.Position += 16; - var uncompressedSize = archive.Read(); - var isEncrypted = archive.ReadFlag(); - archive.Position += 4; - var fullPath = archive.ReadString()[1..]; - archive.Position += 4; + archive.Position += 16; + var uncompressedSize = archive.Read(); + var isEncrypted = archive.ReadFlag(); + archive.Position += 4; + var fullPath = archive.ReadString()[1..]; + archive.Position += 4; - AddEntry(fullPath, uncompressedSize, isEncrypted, entries); + AddEntry(fullPath, uncompressedSize, isEncrypted, entries); + } } - } - else - { - var version = archive.Read(); - var count = archive.Read(); - for (var i = 0; i < count; i++) + else { - cancellationToken.ThrowIfCancellationRequested(); + var version = archive.Read(); + var count = archive.Read(); + for (var i = 0; i < count; i++) + { + cancellationToken.ThrowIfCancellationRequested(); - var uncompressedSize = archive.Read(); - var isEncrypted = archive.ReadFlag(); - var fullPath = archive.ReadString(); - if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..]; + var uncompressedSize = archive.Read(); + var isEncrypted = archive.ReadFlag(); + var fullPath = archive.ReadString(); + if (version < EBackupVersion.PerfectPath) + fullPath = fullPath[1..]; - AddEntry(fullPath, uncompressedSize, isEncrypted, entries); + AddEntry(fullPath, uncompressedSize, isEncrypted, entries); + } } + break; } - break; - } } return entries; @@ -291,7 +308,8 @@ public class LoadCommand : ViewModelCommand foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files) { cancellationToken.ThrowIfCancellationRequested(); // cancel if needed - if (asset.IsUePackagePayload) continue; + if (asset.IsUePackagePayload) + continue; if (asset is VfsEntry entry && loaded.TryGetValue(key, out var file) && file is VfsEntry existingEntry && entry.Vfs.ReadOrder < existingEntry.Vfs.ReadOrder) diff --git a/FModel/ViewModels/CustomDirectoriesViewModel.cs b/FModel/ViewModels/CustomDirectoriesViewModel.cs index 379dd63c..8a1c4b98 100644 --- a/FModel/ViewModels/CustomDirectoriesViewModel.cs +++ b/FModel/ViewModels/CustomDirectoriesViewModel.cs @@ -49,6 +49,7 @@ public class CustomDirectoriesViewModel : ViewModel dir.Header = newDir.Header; dir.Tag = newDir.DirectoryPath; + dir.ItemsSource = EnumerateCommands(newDir); Save(); } diff --git a/FModel/ViewModels/GameDirectoryViewModel.cs b/FModel/ViewModels/GameDirectoryViewModel.cs index 707c24bb..fb2f9ef7 100644 --- a/FModel/ViewModels/GameDirectoryViewModel.cs +++ b/FModel/ViewModels/GameDirectoryViewModel.cs @@ -3,7 +3,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Text.RegularExpressions; -using System.Windows.Data; +using Avalonia.Collections; using Avalonia.Threading; using CUE4Parse.Compression; using CUE4Parse.UE4.IO; @@ -105,7 +105,7 @@ public class GameDirectoryViewModel : ViewModel { public bool HasNoFile => DirectoryFiles.Count < 1; public readonly ObservableCollection DirectoryFiles; - public ICollectionView DirectoryFilesView { get; } + public DataGridCollectionView DirectoryFilesView { get; } private readonly Regex _hiddenArchives = new(@"^(?!global|pakchunk.+(optional|ondemand)\-).+(pak|utoc)$", // should be universal RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); @@ -113,7 +113,7 @@ public class GameDirectoryViewModel : ViewModel public GameDirectoryViewModel() { DirectoryFiles = new ObservableCollection(); - DirectoryFilesView = new ListCollectionView(DirectoryFiles) { SortDescriptions = { new SortDescription("Name", ListSortDirection.Ascending) } }; + DirectoryFilesView = new DataGridCollectionView(DirectoryFiles) { SortDescriptions = { DataGridSortDescription.FromPath("Name", ListSortDirection.Ascending) } }; } public void Add(IAesVfsReader reader) diff --git a/FModel/ViewModels/SearchViewModel.cs b/FModel/ViewModels/SearchViewModel.cs index 17b904f2..a600826f 100644 --- a/FModel/ViewModels/SearchViewModel.cs +++ b/FModel/ViewModels/SearchViewModel.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; -using System.Windows.Data; +using Avalonia.Collections; using CUE4Parse.FileProvider.Objects; using CUE4Parse.UE4.VirtualFileSystem; using FModel.Framework; @@ -62,12 +62,12 @@ public class SearchViewModel : ViewModel } public RangeObservableCollection SearchResults { get; } - public ListCollectionView SearchResultsView { get; } + public DataGridCollectionView SearchResultsView { get; } public SearchViewModel() { SearchResults = []; - SearchResultsView = new ListCollectionView(SearchResults) + SearchResultsView = new DataGridCollectionView(SearchResults) { Filter = e => ItemFilter(e, FilterText.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries)), }; @@ -130,6 +130,11 @@ public class SearchViewModel : ViewModel SearchResults.AddRange(sorted); } + private Regex? _cachedFilterRegex; + private string? _cachedFilterText; + private bool _cachedMatchCase; + private bool _cachedRegexInvalid; + private bool ItemFilter(object item, IEnumerable filters) { if (item is not GameFile entry) @@ -138,8 +143,37 @@ public class SearchViewModel : ViewModel if (!HasRegexEnabled) return filters.All(x => entry.Path.Contains(x, HasMatchCaseEnabled ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase)); - var o = RegexOptions.None; - if (!HasMatchCaseEnabled) o |= RegexOptions.IgnoreCase; - return new Regex(FilterText, o).Match(entry.Path).Success; + if (_cachedFilterText != FilterText || _cachedMatchCase != HasMatchCaseEnabled) + { + var o = RegexOptions.None; + if (!HasMatchCaseEnabled) + o |= RegexOptions.IgnoreCase; + + try + { + _cachedFilterRegex = new Regex(FilterText, o, TimeSpan.FromSeconds(1)); + _cachedRegexInvalid = false; + } + catch (ArgumentException) + { + _cachedFilterRegex = null; + _cachedRegexInvalid = true; + } + + _cachedFilterText = FilterText; + _cachedMatchCase = HasMatchCaseEnabled; + } + + if (_cachedRegexInvalid) + return false; + + try + { + return _cachedFilterRegex?.Match(entry.Path).Success == true; + } + catch (RegexMatchTimeoutException) + { + return false; + } } } diff --git a/FModel/ViewModels/UpdateViewModel.cs b/FModel/ViewModels/UpdateViewModel.cs index adbc79bd..a3c40d43 100644 --- a/FModel/ViewModels/UpdateViewModel.cs +++ b/FModel/ViewModels/UpdateViewModel.cs @@ -4,7 +4,8 @@ using System.ComponentModel; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; -using System.Windows.Data; +using Avalonia.Collections; +using Avalonia.Threading; using CUE4Parse.Utils; using FModel.Framework; using FModel.Services; @@ -12,9 +13,22 @@ using FModel.Settings; using FModel.ViewModels.ApiEndpoints.Models; using FModel.ViewModels.Commands; using FModel.Views.Resources.Converters; +using Serilog; namespace FModel.ViewModels; +public class CommitGroup +{ + public DateTime Date { get; } + public IReadOnlyList Items { get; } + + public CommitGroup(DateTime date, IReadOnlyList items) + { + Date = date; + Items = items; + } +} + public partial class UpdateViewModel : ViewModel { private ApiEndpointViewModel _apiEndpointView => ApplicationService.ApiEndpointView; @@ -23,14 +37,19 @@ public partial class UpdateViewModel : ViewModel public RemindMeCommand RemindMeCommand => _remindMeCommand ??= new RemindMeCommand(this); public RangeObservableCollection Commits { get; } - public ICollectionView CommitsView { get; } + public RangeObservableCollection CommitGroups { get; } + public bool HasNoCommits => CommitGroups.Count == 0; + + private bool _suppressRegroup; public UpdateViewModel() { Commits = []; - CommitsView = new ListCollectionView(Commits) + CommitGroups = []; + Commits.CollectionChanged += (_, _) => { - GroupDescriptions = { new PropertyGroupDescription("Commit.Author.Date", new DateTimeToDateConverter()) } + if (!_suppressRegroup) + RebuildCommitGroups(); }; if (UserSettings.Default.NextUpdateCheck < DateTime.Now) @@ -44,11 +63,20 @@ public partial class UpdateViewModel : ViewModel return; Commits.AddRange(commits); + _ = LoadAvatars(); try { - _ = LoadCoAuthors(); - _ = LoadAssets(); + _ = LoadCoAuthors().ContinueWith(t => + { + if (t.IsFaulted) + Log.Error(t.Exception, "Failed to load co-authors"); + }, TaskScheduler.Default); + _ = LoadAssets().ContinueWith(t => + { + if (t.IsFaulted) + Log.Error(t.Exception, "Failed to load assets"); + }, TaskScheduler.Default); } catch { @@ -56,58 +84,76 @@ public partial class UpdateViewModel : ViewModel } } - private Task LoadCoAuthors() + private async Task LoadCoAuthors() { - return Task.Run(async () => + var snapshot = Commits.ToList(); + var coAuthorMap = await Task.Run(() => { - var coAuthorMap = new Dictionary>(); - foreach (var commit in Commits) + var map = new Dictionary Usernames)>(); + var regex = GetCoAuthorRegex(); + + foreach (var commit in snapshot) { if (!commit.Commit.Message.Contains("Co-authored-by")) continue; - var regex = GetCoAuthorRegex(); var matches = regex.Matches(commit.Commit.Message); - if (matches.Count == 0) continue; + if (matches.Count == 0) + continue; - commit.Commit.Message = regex.Replace(commit.Commit.Message, string.Empty).Trim(); - - coAuthorMap[commit] = []; + var usernames = new HashSet(StringComparer.OrdinalIgnoreCase); foreach (Match match in matches) { - if (match.Groups.Count < 3) continue; + if (match.Groups.Count < 3) + continue; var username = match.Groups[1].Value; if (username.Equals("Asval", StringComparison.OrdinalIgnoreCase)) - { username = "4sval"; // found out the hard way co-authored usernames can't be trusted - } - coAuthorMap[commit].Add(username); + usernames.Add(username); } + + if (usernames.Count == 0) + continue; + + var cleanMessage = regex.Replace(commit.Commit.Message, string.Empty).Trim(); + map[commit] = (cleanMessage, usernames); } - if (coAuthorMap.Count == 0) return; + return map; + }); - var uniqueUsernames = coAuthorMap.Values.SelectMany(x => x).Distinct().ToArray(); - var authorCache = new Dictionary(); - foreach (var username in uniqueUsernames) + if (coAuthorMap.Count == 0) + return; + + await Dispatcher.UIThread.InvokeAsync(() => + { + foreach (var (commit, data) in coAuthorMap) + commit.Commit.Message = data.CleanMessage; + }); + + var uniqueUsernames = coAuthorMap.Values.SelectMany(x => x.Usernames).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); + var authorCache = new Dictionary(); + foreach (var username in uniqueUsernames) + { + try { - try - { - var author = await _apiEndpointView.GitHubApi.GetUserAsync(username); - if (author != null) - authorCache[username] = author; - } - catch - { - // - } + var author = await _apiEndpointView.GitHubApi.GetUserAsync(username); + if (author != null) + authorCache[username] = author; } - - foreach (var (commit, usernames) in coAuthorMap) + catch { - var coAuthors = usernames + // + } + } + + await Dispatcher.UIThread.InvokeAsync(() => + { + foreach (var (commit, data) in coAuthorMap) + { + var coAuthors = data.Usernames .Where(username => authorCache.ContainsKey(username)) .Select(username => authorCache[username]) .ToArray(); @@ -116,42 +162,94 @@ public partial class UpdateViewModel : ViewModel commit.CoAuthors = coAuthors; } }); + + await LoadAvatars(); } - private Task LoadAssets() + private async Task LoadAssets() { - return Task.Run(async () => + var qa = await _apiEndpointView.GitHubApi.GetReleaseAsync("qa"); + var assets = qa.Assets.OrderByDescending(x => x.CreatedAt).ToList(); + + await Dispatcher.UIThread.InvokeAsync(() => { - var qa = await _apiEndpointView.GitHubApi.GetReleaseAsync("qa"); - var assets = qa.Assets.OrderByDescending(x => x.CreatedAt).ToList(); - - for (var i = 0; i < assets.Count; i++) + _suppressRegroup = true; + try { - var asset = assets[i]; - asset.IsLatest = i == 0; + for (var i = 0; i < assets.Count; i++) + { + var asset = assets[i]; + asset.IsLatest = i == 0; - var commitSha = asset.Name.SubstringBeforeLast(".zip"); - var commit = Commits.FirstOrDefault(x => x.Sha == commitSha); - if (commit != null) - { - commit.Asset = asset; - } - else - { - Commits.Add(new GitHubCommit + var commitSha = asset.Name.SubstringBeforeLast(".zip"); + var commit = Commits.FirstOrDefault(x => x.Sha == commitSha); + if (commit != null) { - Sha = commitSha, - Commit = new Commit + commit.Asset = asset; + } + else + { + Commits.Add(new GitHubCommit { - Message = $"FModel ({commitSha[..7]})", - Author = new Author { Name = asset.Uploader.Login, Date = asset.CreatedAt } - }, - Author = asset.Uploader, - Asset = asset - }); + Sha = commitSha, + Commit = new Commit + { + Message = $"FModel ({commitSha[..7]})", + Author = new Author { Name = asset.Uploader.Login, Date = asset.CreatedAt } + }, + Author = asset.Uploader, + Asset = asset + }); + } } } + finally + { + _suppressRegroup = false; + RebuildCommitGroups(); + } }); + + await LoadAvatars(); + } + + private void RebuildCommitGroups() + { + var groups = Commits + .OrderByDescending(x => x.Commit?.Author?.Date ?? DateTime.MinValue) + .GroupBy(x => (x.Commit?.Author?.Date ?? DateTime.MinValue).Date) + .Select(g => new CommitGroup(g.Key, g.ToList())) + .ToList(); + + CommitGroups.Clear(); + CommitGroups.AddRange(groups); + RaisePropertyChanged(nameof(HasNoCommits)); + } + + private async Task LoadAvatars() + { + var authorsByUrl = Commits + .SelectMany(x => x.Authors) + .Where(x => x != null && !string.IsNullOrWhiteSpace(x.AvatarUrl)) + .ToArray() + .GroupBy(x => x.AvatarUrl, StringComparer.OrdinalIgnoreCase) + .ToArray(); + + foreach (var authors in authorsByUrl) + { + if (authors.All(x => x.AvatarImage != null)) + continue; + + var bitmap = await UrlToBitmapConverter.LoadAsync(authors.Key); + if (bitmap == null) + continue; + + await Dispatcher.UIThread.InvokeAsync(() => + { + foreach (var author in authors) + author.AvatarImage = bitmap; + }); + } } public void DownloadLatest() diff --git a/FModel/Views/AudioPlayer.xaml b/FModel/Views/AudioPlayer.xaml index 0734123c..07fcefa6 100644 --- a/FModel/Views/AudioPlayer.xaml +++ b/FModel/Views/AudioPlayer.xaml @@ -43,7 +43,7 @@ Margin="0 0 0 10" /> @@ -103,7 +103,7 @@ + Theme="{StaticResource CustomSeparator}" /> @@ -135,7 +135,7 @@ Watermark="Search by name..." /> @@ -214,7 +214,7 @@ HorizontalAlignment="Right" VerticalAlignment="Top" Orientation="Horizontal"> - - diff --git a/FModel/Views/Resources/Controls/Inputs/SearchTextBox.xaml.cs b/FModel/Views/Resources/Controls/Inputs/SearchTextBox.xaml.cs index dca16683..7b25863f 100644 --- a/FModel/Views/Resources/Controls/Inputs/SearchTextBox.xaml.cs +++ b/FModel/Views/Resources/Controls/Inputs/SearchTextBox.xaml.cs @@ -1,35 +1,35 @@ -using System.Windows; -using System.Windows.Controls; +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; namespace FModel.Views.Resources.Controls.Inputs; public partial class SearchTextBox : UserControl { - public static readonly DependencyProperty TextProperty = - DependencyProperty.Register(nameof(Text), typeof(string), typeof(SearchTextBox), - new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + public static readonly StyledProperty TextProperty = + AvaloniaProperty.Register(nameof(Text), defaultValue: string.Empty, + defaultBindingMode: Avalonia.Data.BindingMode.TwoWay); - public static readonly DependencyProperty WatermarkProperty = - DependencyProperty.Register(nameof(Watermark), typeof(string), typeof(SearchTextBox), - new PropertyMetadata("Search by name...")); + public static readonly StyledProperty WatermarkProperty = + AvaloniaProperty.Register(nameof(Watermark), defaultValue: "Search by name..."); - public static readonly RoutedEvent ClearButtonClickEvent = - EventManager.RegisterRoutedEvent(nameof(ClearButtonClick), RoutingStrategy.Bubble, - typeof(RoutedEventHandler), typeof(SearchTextBox)); + public static readonly RoutedEvent ClearButtonClickEvent = + RoutedEvent.Register(nameof(ClearButtonClick), RoutingStrategies.Bubble); public string Text { - get => (string)GetValue(TextProperty); + get => GetValue(TextProperty); set => SetValue(TextProperty, value); } public string Watermark { - get => (string)GetValue(WatermarkProperty); + get => GetValue(WatermarkProperty); set => SetValue(WatermarkProperty, value); } - public event RoutedEventHandler ClearButtonClick + public event EventHandler ClearButtonClick { add => AddHandler(ClearButtonClickEvent, value); remove => RemoveHandler(ClearButtonClickEvent, value); @@ -40,7 +40,7 @@ public partial class SearchTextBox : UserControl InitializeComponent(); } - private void OnClearButtonClick(object sender, RoutedEventArgs e) + private void OnClearButtonClick(object? sender, RoutedEventArgs e) { Text = string.Empty; RaiseEvent(new RoutedEventArgs(ClearButtonClickEvent, this)); diff --git a/FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml b/FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml index 01368774..f4ee3bc3 100644 --- a/FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml +++ b/FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml @@ -1,28 +1,31 @@ + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:controls="clr-namespace:FModel.Views.Resources.Controls" + xmlns:local="clr-namespace:FModel.Views.Resources.Controls.TiledExplorer" + xmlns:converters="clr-namespace:FModel.Views.Resources.Converters" + x:Class="FModel.Views.Resources.Controls.TiledExplorer.ResourcesDictionary"> - - + + HorizontalAlignment="Right" + Margin="4" + Padding="6,2" + CornerRadius="3" + Opacity="0.85" + Background="#2C3245"> + Foreground="White" + FontSize="11" + FontWeight="SemiBold" + VerticalAlignment="Center" + Margin="0,0,5,0" /> + Fill="White" + Width="12" + Height="12" + Stretch="Uniform" + VerticalAlignment="Center" /> - - + diff --git a/FModel/Views/Resources/Controls/TreeViewItemBehavior.cs b/FModel/Views/Resources/Controls/TreeViewItemBehavior.cs index d92c4d39..94515777 100644 --- a/FModel/Views/Resources/Controls/TreeViewItemBehavior.cs +++ b/FModel/Views/Resources/Controls/TreeViewItemBehavior.cs @@ -1,5 +1,7 @@ -using System.Windows; -using System.Windows.Controls; +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.VisualTree; namespace FModel.Views.Resources.Controls; @@ -7,7 +9,7 @@ public sealed class TreeViewItemBehavior { public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem) { - return (bool) treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty); + return treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty); } public static void SetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem, bool value) @@ -15,27 +17,56 @@ public sealed class TreeViewItemBehavior treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value); } - public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty = - DependencyProperty.RegisterAttached("IsBroughtIntoViewWhenSelected", typeof(bool), typeof(TreeViewItemBehavior), - new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged)); + public static readonly AttachedProperty IsBroughtIntoViewWhenSelectedProperty = + AvaloniaProperty.RegisterAttached("IsBroughtIntoViewWhenSelected"); - private static void OnIsBroughtIntoViewWhenSelectedChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e) + static TreeViewItemBehavior() { - if (depObj is not TreeViewItem item) - return; + IsBroughtIntoViewWhenSelectedProperty.Changed.AddClassHandler(OnIsBroughtIntoViewWhenSelectedChanged); + } + private static void OnIsBroughtIntoViewWhenSelectedChanged(TreeViewItem item, AvaloniaPropertyChangedEventArgs e) + { if (e.NewValue is not bool value) return; + DisposeSubscription(item); + if (value) - item.Selected += OnTreeViewItemSelected; + { + var sub = item.GetObservable(TreeViewItem.IsSelectedProperty) + .Subscribe(isSelected => + { + if (isSelected) + item.BringIntoView(); + }); + item.SetValue(SubscriptionProperty, sub); + + // Clean up when the item is removed from the visual tree (virtualization) + item.DetachedFromVisualTree -= OnDetachedFromVisualTree; + item.DetachedFromVisualTree += OnDetachedFromVisualTree; + } else - item.Selected -= OnTreeViewItemSelected; + { + item.DetachedFromVisualTree -= OnDetachedFromVisualTree; + } } - private static void OnTreeViewItemSelected(object sender, RoutedEventArgs e) + private static void OnDetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { - if (e.OriginalSource is TreeViewItem item) - item.BringIntoView(); + if (sender is TreeViewItem item) + DisposeSubscription(item); } -} \ No newline at end of file + + private static void DisposeSubscription(TreeViewItem item) + { + if (item.GetValue(SubscriptionProperty) is IDisposable oldSub) + { + oldSub.Dispose(); + item.SetValue(SubscriptionProperty, null); + } + } + + private static readonly AttachedProperty SubscriptionProperty = + AvaloniaProperty.RegisterAttached("Subscription"); +} diff --git a/FModel/Views/Resources/Converters/CommitMessageConverter.cs b/FModel/Views/Resources/Converters/CommitMessageConverter.cs index b16d689c..ba9155ba 100644 --- a/FModel/Views/Resources/Converters/CommitMessageConverter.cs +++ b/FModel/Views/Resources/Converters/CommitMessageConverter.cs @@ -8,14 +8,22 @@ public class CommitMessageConverter : IValueConverter { public static readonly CommitMessageConverter Instance = new(); + // Message may be cleaned by UpdateViewModel.LoadCoAuthors() which strips + // "Co-authored-by:" lines and trims; the split on "\n\n" still yields the + // correct title/description parts after that cleanup. public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is string commitMessage) { var parts = commitMessage.Split("\n\n"); - return parameter?.ToString() == "Title" ? parts[0] : parts.Length > 1 ? parts[1] : string.Empty; + var param = parameter?.ToString(); + if (param == "Title") + return parts[0]; + if (param == "HasDescription") + return parts.Length > 1 && !string.IsNullOrEmpty(parts[1]); + return parts.Length > 1 ? parts[1] : string.Empty; } - return value; + return parameter?.ToString() == "HasDescription" ? false : value; } public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) diff --git a/FModel/Views/Resources/Converters/FolderToGeometryConverter.cs b/FModel/Views/Resources/Converters/FolderToGeometryConverter.cs index c101fa33..0adc15b2 100644 --- a/FModel/Views/Resources/Converters/FolderToGeometryConverter.cs +++ b/FModel/Views/Resources/Converters/FolderToGeometryConverter.cs @@ -46,20 +46,25 @@ public class FolderToGeometryConverter : IValueConverter _ => (null, "NeutralBrush"), }; - if (targetType == typeof(bool) || (parameter is string { Length: > 0 } p && p.Equals("visible", StringComparison.OrdinalIgnoreCase))) + var paramStr = parameter?.ToString(); + + if (paramStr?.Equals("visible", StringComparison.OrdinalIgnoreCase) == true || targetType == typeof(bool)) return geometry != null; - if (targetType == typeof(Geometry) && geometry != null) + if (paramStr?.Equals("brush", StringComparison.OrdinalIgnoreCase) == true || targetType == typeof(IBrush)) { - Application.Current!.TryGetResource(geometry, null, out var geomRes); - return geomRes as Geometry; - } - if (targetType == typeof(IBrush)) - { - Application.Current!.TryGetResource(brush, null, out var brushRes); + if (Application.Current is null) return null; + Application.Current.TryGetResource(brush, null, out var brushRes); return brushRes as IBrush; } + if (geometry != null) + { + if (Application.Current is null) return null; + Application.Current.TryGetResource(geometry, null, out var geomRes); + return geomRes as Geometry; + } + return null; } diff --git a/FModel/Views/Resources/Converters/HasImageToColumnSpanConverter.cs b/FModel/Views/Resources/Converters/HasImageToColumnSpanConverter.cs new file mode 100644 index 00000000..b4f948d1 --- /dev/null +++ b/FModel/Views/Resources/Converters/HasImageToColumnSpanConverter.cs @@ -0,0 +1,20 @@ +using System; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace FModel.Views.Resources.Converters; + +/// +/// Returns 1 when HasImage is true (editor uses its own column), +/// 3 when HasImage is false (editor spans all columns including the hidden image column). +/// +public class HasImageToColumnSpanConverter : IValueConverter +{ + public static readonly HasImageToColumnSpanConverter Instance = new(); + + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + => value is true ? 1 : 3; + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); +} diff --git a/FModel/Views/Resources/Converters/LoadingModeToSelectionModeConverter.cs b/FModel/Views/Resources/Converters/LoadingModeToSelectionModeConverter.cs new file mode 100644 index 00000000..9703777a --- /dev/null +++ b/FModel/Views/Resources/Converters/LoadingModeToSelectionModeConverter.cs @@ -0,0 +1,33 @@ +using System; +using System.Globalization; +using Avalonia.Controls; +using Avalonia.Data.Converters; +using FModel; + +namespace FModel.Views.Resources.Converters; + +/// +/// Converts to . +/// Multiple, All, AllButNew, AllButModified, and AllButPatched use (multi-select); +/// any future single-file modes would use . +/// +public class LoadingModeToSelectionModeConverter : IValueConverter +{ + public static readonly LoadingModeToSelectionModeConverter Instance = new(); + + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + ELoadingMode.Multiple => SelectionMode.Multiple, + ELoadingMode.All => SelectionMode.Multiple, + ELoadingMode.AllButNew => SelectionMode.Multiple, + ELoadingMode.AllButModified => SelectionMode.Multiple, + ELoadingMode.AllButPatched => SelectionMode.Multiple, + _ => SelectionMode.Single + }; + } + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); +} diff --git a/FModel/Views/Resources/Converters/PlaybackStateToPlayPauseConverter.cs b/FModel/Views/Resources/Converters/PlaybackStateToPlayPauseConverter.cs new file mode 100644 index 00000000..3775d865 --- /dev/null +++ b/FModel/Views/Resources/Converters/PlaybackStateToPlayPauseConverter.cs @@ -0,0 +1,35 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; + +namespace FModel.Views.Resources.Converters; + +/// +/// Maps playback state values to Play/Pause icon geometry resources and tooltip text. +/// The value is compared by string to avoid hard dependency on CSCore enum types. +/// +public class PlaybackStateToPlayPauseConverter : IValueConverter +{ + public static readonly PlaybackStateToPlayPauseConverter Instance = new(); + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + var isPlaying = string.Equals(value?.ToString(), "Playing", StringComparison.OrdinalIgnoreCase); + var mode = parameter?.ToString(); + + if (string.Equals(mode, "Tooltip", StringComparison.OrdinalIgnoreCase)) + return isPlaying ? "Pause" : "Play"; + + // "Icon" parameter or no parameter — return geometry resource + var resourceKey = isPlaying ? "PauseIcon" : "PlayIcon"; + if (Application.Current is null) + return null; + return Application.Current.TryGetResource(resourceKey, null, out var resource) + ? resource + : null; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); +} diff --git a/FModel/Views/Resources/Converters/UrlToBitmapConverter.cs b/FModel/Views/Resources/Converters/UrlToBitmapConverter.cs new file mode 100644 index 00000000..d37bae55 --- /dev/null +++ b/FModel/Views/Resources/Converters/UrlToBitmapConverter.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Concurrent; +using System.Globalization; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using Avalonia.Data.Converters; +using Avalonia.Media.Imaging; + +namespace FModel.Views.Resources.Converters; + +/// +/// Converts an HTTP(S) URL string to an Avalonia . +/// Converts only from cached images and never performs blocking network I/O +/// during binding evaluation. +/// +/// +/// Use from ViewModel code to preload and cache images. +/// +public class UrlToBitmapConverter : IValueConverter +{ + public static readonly UrlToBitmapConverter Instance = new(); + private static readonly HttpClient _http = new() { Timeout = TimeSpan.FromSeconds(10) }; + private static readonly ConcurrentDictionary _cache = new(); + private static readonly ConcurrentDictionary> _inFlight = new(); + + public static bool TryGetCached(string url, out Bitmap? bitmap) + { + return _cache.TryGetValue(url, out bitmap); + } + + public static async Task LoadAsync(string url) + { + if (string.IsNullOrWhiteSpace(url)) + return null; + + if (_cache.TryGetValue(url, out var cached)) + return cached; + + try + { + return await _inFlight.GetOrAdd(url, DownloadAsync); + } + finally + { + _inFlight.TryRemove(url, out _); + } + } + + private static async Task DownloadAsync(string url) + { + try + { + using var stream = await _http.GetStreamAsync(url); + using var ms = new MemoryStream(); + await stream.CopyToAsync(ms); + ms.Position = 0; + var bitmap = new Bitmap(ms); + _cache[url] = bitmap; + return bitmap; + } + catch + { + _cache.TryRemove(url, out _); + return null; + } + } + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is not string url || string.IsNullOrWhiteSpace(url)) + return null; + + return _cache.TryGetValue(url, out var cached) ? cached : null; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); +} diff --git a/FModel/Views/Resources/Icons.xaml b/FModel/Views/Resources/Icons.xaml index 45e0b5e1..d78ab15b 100644 --- a/FModel/Views/Resources/Icons.xaml +++ b/FModel/Views/Resources/Icons.xaml @@ -1,105 +1,700 @@ - - M22,9v6c0,1.1-0.9,2-2,2h-1l0-2h1V9H4v6h6v2H4c-1.1,0-2-0.9-2-2V9c0-1.1,0.9-2,2-2h16C21.1,7,22,7.9,22,9z M14.04,17.99 c0.18,0.39,0.73,0.39,0.91,0l0.63-1.4l1.4-0.63c0.39-0.18,0.39-0.73,0-0.91l-1.4-0.63l-0.63-1.4c-0.18-0.39-0.73-0.39-0.91,0 l-0.63,1.4l-1.4,0.63c-0.39,0.18-0.39,0.73,0,0.91l1.4,0.63L14.04,17.99z M16.74,13.43c0.1,0.22,0.42,0.22,0.52,0l0.36-0.8 l0.8-0.36c0.22-0.1,0.22-0.42,0-0.52l-0.8-0.36l-0.36-0.8c-0.1-0.22-0.42-0.22-0.52,0l-0.36,0.8l-0.8,0.36 c-0.22,0.1-0.22,0.42,0,0.52l0.8,0.36L16.74,13.43z - M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z - M19.71,15.71l-3.59,3.59c-0.63,0.63-1.71,0.18-1.71-0.71V16h-7c-1.1,0-2-0.9-2-2V5c0-0.55,0.45-1,1-1h0c0.55,0,1,0.45,1,1 v9h7v-2.59c0-0.89,1.08-1.34,1.71-0.71l3.59,3.59C20.1,14.68,20.1,15.32,19.71,15.71z - M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z - M18.3,5.71L18.3,5.71c-0.39-0.39-1.02-0.39-1.41,0L12,10.59L7.11,5.7c-0.39-0.39-1.02-0.39-1.41,0l0,0 c-0.39,0.39-0.39,1.02,0,1.41L10.59,12L5.7,16.89c-0.39,0.39-0.39,1.02,0,1.41l0,0c0.39,0.39,1.02,0.39,1.41,0L12,13.41l4.89,4.89 c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L13.41,12l4.89-4.89C18.68,6.73,18.68,6.09,18.3,5.71z - M7.71,9.29l3.88,3.88l3.88-3.88c0.39-0.39,1.02-0.39,1.41,0l0,0c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59 c-0.39,0.39-1.02,0.39-1.41,0L6.29,10.7c-0.39-0.39-0.39-1.02,0-1.41l0,0C6.68,8.91,7.32,8.9,7.71,9.29z - M3,17h18c0.55,0,1,0.45,1,1v0c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1v0C2,17.45,2.45,17,3,17z M2.5,12.57 c0.36,0.21,0.82,0.08,1.03-0.28L4,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02L5.3,10.72 h0.95C6.66,10.72,7,10.38,7,9.97v0c0-0.41-0.34-0.75-0.75-0.75H5.3L5.77,8.4C5.98,8.04,5.86,7.58,5.5,7.37l0,0 C5.14,7.17,4.68,7.29,4.47,7.65L4,8.47L3.53,7.65C3.32,7.29,2.86,7.17,2.5,7.37l0,0C2.14,7.58,2.02,8.04,2.23,8.4L2.7,9.22H1.75 C1.34,9.22,1,9.56,1,9.97v0c0,0.41,0.34,0.75,0.75,0.75H2.7l-0.48,0.83C2.02,11.91,2.14,12.37,2.5,12.57L2.5,12.57z M10.5,12.57 L10.5,12.57c0.36,0.21,0.82,0.08,1.03-0.28L12,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02 l-0.48-0.83h0.95c0.41,0,0.75-0.34,0.75-0.75v0c0-0.41-0.34-0.75-0.75-0.75H13.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0 c-0.36-0.21-0.82-0.08-1.02,0.27L12,8.47l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03 l0.47,0.82H9.75C9.34,9.22,9,9.56,9,9.97v0c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83C10.02,11.91,10.14,12.37,10.5,12.57z M23,9.97c0-0.41-0.34-0.75-0.75-0.75H21.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0c-0.36-0.21-0.82-0.08-1.02,0.27L20,8.47 l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03l0.47,0.82h-0.95C17.34,9.22,17,9.56,17,9.97v0 c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83c-0.21,0.36-0.08,0.82,0.28,1.02l0,0c0.36,0.21,0.82,0.08,1.03-0.28L20,11.47 l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02l-0.48-0.83h0.95C22.66,10.72,23,10.38,23,9.97 L23,9.97z - M19,11c0-3.87-3.13-7-7-7C8.78,4,6.07,6.18,5.26,9.15C2.82,9.71,1,11.89,1,14.5C1,17.54,3.46,20,6.5,20 c1.76,0,10.25,0,12,0l0,0c2.49-0.01,4.5-2.03,4.5-4.52C23,13.15,21.25,11.26,19,11z M13,13v2c0,0.55-0.45,1-1,1h0 c-0.55,0-1-0.45-1-1v-2H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.79-2.79c0.2-0.2,0.51-0.2,0.71,0l2.79,2.79 c0.31,0.31,0.09,0.85-0.35,0.85H13z - M16,17.01V11c0-0.55-0.45-1-1-1s-1,0.45-1,1v6.01h-1.79c-0.45,0-0.67,0.54-0.35,0.85l2.79,2.78c0.2,0.19,0.51,0.19,0.71,0 l2.79-2.78c0.32-0.31,0.09-0.85-0.35-0.85H16z M8.65,3.35L5.86,6.14c-0.32,0.31-0.1,0.85,0.35,0.85H8V13c0,0.55,0.45,1,1,1 s1-0.45,1-1V6.99h1.79c0.45,0,0.67-0.54,0.35-0.85L9.35,3.35C9.16,3.16,8.84,3.16,8.65,3.35z - M20,6h-8l-1.41-1.41C10.21,4.21,9.7,4,9.17,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8 C22,6.9,21.1,6,20,6z M15.98,15.74l-1.07-0.82l-1.07,0.82c-0.39,0.29-0.92-0.08-0.78-0.55l0.42-1.36l-1.2-0.95 C11.91,12.6,12.12,12,12.59,12H14l0.43-1.34c0.15-0.46,0.8-0.46,0.95,0L15.82,12h1.41c0.47,0,0.68,0.6,0.31,0.89l-1.2,0.95 l0.42,1.36C16.91,15.66,16.37,16.04,15.98,15.74z - M19.41,7.41l-4.83-4.83C14.21,2.21,13.7,2,13.17,2H6C4.9,2,4.01,2.9,4.01,4L4,20c0,1.1,0.89,2,1.99,2H18c1.1,0,2-0.9,2-2 V8.83C20,8.3,19.79,7.79,19.41,7.41z M14.8,15H13v3c0,0.55-0.45,1-1,1s-1-0.45-1-1v-3H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.8-2.79 c0.2-0.19,0.51-0.19,0.71,0l2.79,2.79C15.46,14.46,15.24,15,14.8,15z M14,9c-0.55,0-1-0.45-1-1V3.5L18.5,9H14z - M16.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V7.83c0-0.53-0.21-1.04-0.59-1.41l-2.83-2.83 C17.21,3.21,16.7,3,16.17,3z M12,18c-1.66,0-3-1.34-3-3s1.34-3,3-3s3,1.34,3,3S13.66,18,12,18z M14,10H7c-0.55,0-1-0.45-1-1V7 c0-0.55,0.45-1,1-1h7c0.55,0,1,0.45,1,1v2C15,9.55,14.55,10,14,10z - M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M6.6,16.2l2-2.67 c0.2-0.27,0.6-0.27,0.8,0L11.25,16l2.6-3.47c0.2-0.27,0.6-0.27,0.8,0l2.75,3.67c0.25,0.33,0.01,0.8-0.4,0.8H7 C6.59,17,6.35,16.53,6.6,16.2z - M12 6q-.825 0-1.412-.588Q10 4.825 10 4t.588-1.413Q11.175 2 12 2t1.413.587Q14 3.175 14 4q0 .825-.587 1.412Q12.825 6 12 6ZM9 22V9H3V7h18v2h-6v13h-2v-6h-2v6Z - M9 22q-1.45 0-2.725-.55Q5 20.9 4.05 19.95q-.95-.95-1.5-2.225Q2 16.45 2 15q0-2.025 1.05-3.7Q4.1 9.625 5.8 8.75q.5-.975 1.238-1.713Q7.775 6.3 8.75 5.8q.825-1.7 2.525-2.75T15 2q1.45 0 2.725.55Q19 3.1 19.95 4.05q.95.95 1.5 2.225Q22 7.55 22 9q0 2.125-1.05 3.75t-2.75 2.5q-.5.975-1.238 1.712-.737.738-1.712 1.238-.875 1.7-2.55 2.75Q11.025 22 9 22Zm0-2q.825 0 1.588-.25Q11.35 19.5 12 19q-1.45 0-2.725-.55Q8 17.9 7.05 16.95q-.95-.95-1.5-2.225Q5 13.45 5 12q-.5.65-.75 1.412Q4 14.175 4 15q0 1.05.4 1.95.4.9 1.075 1.575.675.675 1.575 1.075.9.4 1.95.4Zm3-3q.825 0 1.613-.25.787-.25 1.437-.75-1.475 0-2.75-.562-1.275-.563-2.225-1.513-.95-.95-1.513-2.225Q8 10.425 8 8.95q-.5.65-.75 1.437Q7 11.175 7 12q0 1.05.388 1.95.387.9 1.087 1.575.675.7 1.575 1.088.9.387 1.95.387Zm3-3q.45 0 .863-.075.412-.075.837-.225.55-1.5.163-2.888-.388-1.387-1.338-2.337-.95-.95-2.337-1.338Q11.8 6.75 10.3 7.3q-.15.425-.225.837Q10 8.55 10 9q0 1.05.387 1.95.388.9 1.088 1.575.675.7 1.575 1.088.9.387 1.95.387Zm4-1.95q.5-.65.75-1.438Q20 9.825 20 9q0-1.05-.387-1.95-.388-.9-1.088-1.575-.675-.7-1.575-1.088Q16.05 4 15 4q-.875 0-1.637.25-.763.25-1.413.75 1.475 0 2.75.562 1.275.563 2.225 1.513.95.95 1.513 2.225.562 1.275.562 2.75Z - M3,7L3,7C2.45,7,2,7.45,2,8v13c0,1.1,0.9,2,2,2h11c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H4V8C4,7.45,3.55,7,3,7z M15.59,1.59C15.21,1.21,14.7,1,14.17,1H8C6.9,1,6.01,1.9,6.01,3L6,17c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V7.83 c0-0.53-0.21-1.04-0.59-1.41L15.59,1.59z M14,7V2.5L19.5,8H15C14.45,8,14,7.55,14,7z - M14.4,6l-0.24-1.2C14.07,4.34,13.66,4,13.18,4H6C5.45,4,5,4.45,5,5v15c0,0.55,0.45,1,1,1l0,0c0.55,0,1-0.45,1-1v-6h5.6 l0.24,1.2c0.09,0.47,0.5,0.8,0.98,0.8H19c0.55,0,1-0.45,1-1V7c0-0.55-0.45-1-1-1H14.4z - M20 1v3h3v2h-3v3h-2V6h-3V4h3V1h2zm-8 12c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm2-9.75V7h3v3h2.92c.05.39.08.79.08 1.2 0 3.32-2.67 7.25-8 11.8-5.33-4.55-8-8.48-8-11.8C4 6.22 7.8 3 12 3c.68 0 1.35.08 2 .25z - M20.29,10.29l-3.59-3.59C16.08,6.08,15,6.52,15,7.41V10H8c-2.76,0-5,2.24-5,5v3c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-3 c0-1.65,1.35-3,3-3h7v2.59c0,0.89,1.08,1.34,1.71,0.71l3.59-3.59C20.68,11.32,20.68,10.68,20.29,10.29z - M9.5,5.5c1.1,0,2-0.9,2-2s-0.9-2-2-2s-2,0.9-2,2S8.4,5.5,9.5,5.5z M5.75,8.9L3.23,21.81C3.11,22.43,3.58,23,4.21,23H4.3 c0.47,0,0.88-0.33,0.98-0.79L6.85,15L9,17v5c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-6.14c0-0.27-0.11-0.52-0.29-0.71L8.95,13.4 l0.6-3c1.07,1.32,2.58,2.23,4.31,2.51c0.6,0.1,1.14-0.39,1.14-1v0c0-0.49-0.36-0.9-0.84-0.98c-1.49-0.25-2.75-1.15-3.51-2.38 L9.7,6.95C9.35,6.35,8.7,6,8,6C7.75,6,7.5,6.05,7.25,6.15l-4.63,1.9C2.25,8.2,2,8.57,2,8.97V12c0,0.55,0.45,1,1,1h0 c0.55,0,1-0.45,1-1V9.65L5.75,8.9 M21,2h-7c-0.55,0-1,0.45-1,1v5c0,0.55,0.45,1,1,1h2.75v13.25c0,0.41,0.34,0.75,0.75,0.75 s0.75-0.34,0.75-0.75V9H21c0.55,0,1-0.45,1-1V3C22,2.45,21.55,2,21,2z M20.15,5.85l-1.28,1.29c-0.31,0.32-0.85,0.09-0.85-0.35V6.25 h-2.76c-0.41,0-0.75-0.34-0.75-0.75s0.34-0.75,0.75-0.75h2.76V4.21c0-0.45,0.54-0.67,0.85-0.35l1.28,1.29 C20.34,5.34,20.34,5.66,20.15,5.85z - M22,24L16.75,19L17.38,21H4.5A2.5,2.5 0 0,1 2,18.5V3.5A2.5,2.5 0 0,1 4.5,1H19.5A2.5,2.5 0 0,1 22,3.5V24M12,6.8C9.32,6.8 7.44,7.95 7.44,7.95C8.47,7.03 10.27,6.5 10.27,6.5L10.1,6.33C8.41,6.36 6.88,7.53 6.88,7.53C5.16,11.12 5.27,14.22 5.27,14.22C6.67,16.03 8.75,15.9 8.75,15.9L9.46,15C8.21,14.73 7.42,13.62 7.42,13.62C7.42,13.62 9.3,14.9 12,14.9C14.7,14.9 16.58,13.62 16.58,13.62C16.58,13.62 15.79,14.73 14.54,15L15.25,15.9C15.25,15.9 17.33,16.03 18.73,14.22C18.73,14.22 18.84,11.12 17.12,7.53C17.12,7.53 15.59,6.36 13.9,6.33L13.73,6.5C13.73,6.5 15.53,7.03 16.56,7.95C16.56,7.95 14.68,6.8 12,6.8M9.93,10.59C10.58,10.59 11.11,11.16 11.1,11.86C11.1,12.55 10.58,13.13 9.93,13.13C9.29,13.13 8.77,12.55 8.77,11.86C8.77,11.16 9.28,10.59 9.93,10.59M14.1,10.59C14.75,10.59 15.27,11.16 15.27,11.86C15.27,12.55 14.75,13.13 14.1,13.13C13.46,13.13 12.94,12.55 12.94,11.86C12.94,11.16 13.45,10.59 14.1,10.59Z - M14,12H10V10H14M14,16H10V14H14M20,8H17.19C16.74,7.22 16.12,6.55 15.37,6.04L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.04,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6.04C7.88,6.55 7.26,7.22 6.81,8H4V10H6.09C6.04,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.04,15.67 6.09,16H4V18H6.81C7.85,19.79 9.78,21 12,21C14.22,21 16.15,19.79 17.19,18H20V16H17.91C17.96,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.96,10.33 17.91,10H20V8Z - M22 10.92L19.26 9.33C21.9 7.08 19.25 2.88 16.08 4.31L15.21 4.68L15.1 3.72C15 2.64 14.44 1.87 13.7 1.42C12.06 .467 9.56 1.12 9.16 3.5L6.41 1.92C5.45 1.36 4.23 1.69 3.68 2.65L2.68 4.38C2.4 4.86 2.57 5.47 3.05 5.75L10.84 10.25L12.34 7.65L14.07 8.65L12.57 11.25L20.36 15.75C20.84 16 21.46 15.86 21.73 15.38L22.73 13.65C23.28 12.69 22.96 11.47 22 10.92M12.37 5C11.5 5.25 10.8 4.32 11.24 3.55C11.5 3.07 12.13 2.91 12.61 3.18C13.38 3.63 13.23 4.79 12.37 5M17.56 8C16.7 8.25 16 7.32 16.44 6.55C16.71 6.07 17.33 5.91 17.8 6.18C18.57 6.63 18.42 7.79 17.56 8M20.87 16.88C21.28 16.88 21.67 16.74 22 16.5V20C22 21.11 21.11 22 20 22H4C2.9 22 2 21.11 2 20V11H10.15L11 11.5V20H13V12.65L19.87 16.61C20.17 16.79 20.5 16.88 20.87 16.88Z - M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM8 19h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-6h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM7 6c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z - M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z - M6,19c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V7H6V19z M9.17,12.59c-0.39-0.39-0.39-1.02,0-1.41c0.39-0.39,1.02-0.39,1.41,0 L12,12.59l1.41-1.41c0.39-0.39,1.02-0.39,1.41,0s0.39,1.02,0,1.41L13.41,14l1.41,1.41c0.39,0.39,0.39,1.02,0,1.41 s-1.02,0.39-1.41,0L12,15.41l-1.41,1.41c-0.39,0.39-1.02,0.39-1.41,0c-0.39-0.39-0.39-1.02,0-1.41L10.59,14L9.17,12.59z M18,4h-2.5 l-0.71-0.71C14.61,3.11,14.35,3,14.09,3H9.91c-0.26,0-0.52,0.11-0.7,0.29L8.5,4H6C5.45,4,5,4.45,5,5s0.45,1,1,1h12 c0.55,0,1-0.45,1-1S18.55,4,18,4z - M18,4v16H6V4H18 M18,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2L18,2z M7,19h10v-6H7 V19z M10,10h4v1h3V5H7v6h3V10z - M16,16.92C15.67,16.97 15.34,17 15,17C14.66,17 14.33,16.97 14,16.92V13.41L11.5,15.89C11,15.5 10.5,15 10.11,14.5L12.59,12H9.08C9.03,11.67 9,11.34 9,11C9,10.66 9.03,10.33 9.08,10H12.59L10.11,7.5C10.3,7.25 10.5,7 10.76,6.76V6.76C11,6.5 11.25,6.3 11.5,6.11L14,8.59V5.08C14.33,5.03 14.66,5 15,5C15.34,5 15.67,5.03 16,5.08V8.59L18.5,6.11C19,6.5 19.5,7 19.89,7.5L17.41,10H20.92C20.97,10.33 21,10.66 21,11C21,11.34 20.97,11.67 20.92,12H17.41L19.89,14.5C19.7,14.75 19.5,15 19.24,15.24V15.24C19,15.5 18.75,15.7 18.5,15.89L16,13.41V16.92H16V16.92M5,19A2,2 0 0,1 7,17A2,2 0 0,1 9,19A2,2 0 0,1 7,21A2,2 0 0,1 5,19H5Z - M22,3H7C6.31,3 5.77,3.35 5.41,3.88L0,12L5.41,20.11C5.77,20.64 6.31,21 7,21H22A2,2 0 0,0 24,19V5A2,2 0 0,0 22,3M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12 - M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z - M14.65 4.98l-5-1.75c-.42-.15-.88-.15-1.3-.01L4.36 4.56C3.55 4.84 3 5.6 3 6.46v11.85c0 1.41 1.41 2.37 2.72 1.86l2.93-1.14c.22-.09.47-.09.69-.01l5 1.75c.42.15.88.15 1.3.01l3.99-1.34c.81-.27 1.36-1.04 1.36-1.9V5.69c0-1.41-1.41-2.37-2.72-1.86l-2.93 1.14c-.22.08-.46.09-.69.01zM15 18.89l-6-2.11V5.11l6 2.11v11.67z - M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35 6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54 9.9c.92-2.34.44-5.1-1.45-6.99z - M2.5 5.5C2.5 6.33 3.17 7 4 7h3.5v10.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V7H14c.83 0 1.5-.67 1.5-1.5S14.83 4 14 4H4c-.83 0-1.5.67-1.5 1.5zM20 9h-6c-.83 0-1.5.67-1.5 1.5S13.17 12 14 12h1.5v5.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V12H20c.83 0 1.5-.67 1.5-1.5S20.83 9 20 9z - M21 13h-6c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1zm0-6h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-6 10h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm-3-8v6c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V9c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2zm-2.1 5.2l-1.26-1.68c-.2-.26-.59-.27-.8-.01L6.5 14.26l-.85-1.03c-.2-.25-.58-.24-.78.01l-.74.95c-.26.33-.02.81.39.81H9.5c.41 0 .65-.47.4-.8z - M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm8 7H9c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1zm1-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z - M2.7,17.29c0.39,0.39,1.02,0.39,1.41,0l4.59-4.59c0.39-0.39,1.02-0.39,1.41,0l1.17,1.17c1.17,1.17,3.07,1.17,4.24,0 l4.18-4.17l1.44,1.44c0.31,0.31,0.85,0.09,0.85-0.35V6.5C22,6.22,21.78,6,21.5,6h-4.29c-0.45,0-0.67,0.54-0.35,0.85l1.44,1.44 l-4.17,4.17c-0.39,0.39-1.02,0.39-1.41,0l-1.17-1.17c-1.17-1.17-3.07-1.17-4.24,0L2.7,15.88C2.32,16.27,2.32,16.91,2.7,17.29z - M18 10v3H6v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1z - M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z - M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z - M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2zm6-12v10c0 1.1.9 2 2 2s2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2z - M8 6h8c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2H8c-1.1 0-2-.9-2-2V8c0-1.1.9-2 2-2z - M7.58 16.89l5.77-4.07c.56-.4.56-1.24 0-1.63L7.58 7.11C6.91 6.65 6 7.12 6 7.93v8.14c0 .81.91 1.28 1.58.82zM16 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z - M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zm3.66 6.82l5.77 4.07c.66.47 1.58-.01 1.58-.82V7.93c0-.81-.91-1.28-1.58-.82l-5.77 4.07c-.57.4-.57 1.24 0 1.64z - M13 10H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm5 8v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45 1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1h-3zM3 16h6c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1z - M14 6H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h6c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 6c-1.1 0-2 .9-2 2v6.18c-.31-.11-.65-.18-1-.18-1.84 0-3.28 1.64-2.95 3.54.21 1.21 1.2 2.2 2.41 2.41 1.9.33 3.54-1.11 3.54-2.95V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2z - M10 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-4 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z - M12,17c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,17,12,17z M17.95,14c-0.52,0-0.94,0.4-0.99,0.92 c-0.2,2.03-1.05,2.68-1.48,3.02C14.68,18.54,14,19,12,19s-2.68-0.46-3.48-1.06c-0.43-0.34-1.28-0.99-1.48-3.02 C6.99,14.4,6.57,14,6.05,14c-0.59,0-1.06,0.51-1,1.09c0.22,2.08,1.07,3.47,2.24,4.41c0.5,0.4,1.1,0.7,1.7,0.9L9,24h6v-3.6 c0.6-0.2,1.2-0.5,1.7-0.9c1.17-0.94,2.03-2.32,2.24-4.41C19.01,14.51,18.53,14,17.95,14z M12,0C5.92,0,1,1.9,1,4.25v3.49 C1,8.55,1.88,9,2.56,8.57C2.7,8.48,2.84,8.39,3,8.31L5,13h2l1.5-6.28C9.6,6.58,10.78,6.5,12,6.5s2.4,0.08,3.5,0.22L17,13h2l2-4.69 c0.16,0.09,0.3,0.17,0.44,0.26C22.12,9,23,8.55,23,7.74V4.25C23,1.9,18.08,0,12,0z M5.88,11.24L4.37,7.69 c0.75-0.28,1.6-0.52,2.53-0.71L5.88,11.24z M18.12,11.24L17.1,6.98c0.93,0.19,1.78,0.43,2.53,0.71L18.12,11.24z - M13,9V7.82C14.16,7.4,15,6.3,15,5c0-1.65-1.35-3-3-3S9,3.35,9,5c0,1.3,0.84,2.4,2,2.82V9H9c-0.55,0-1,0.45-1,1v0 c0,0.55,0.45,1,1,1h2v8.92c-2.22-0.33-4.59-1.68-5.55-3.37l1.14-1.14c0.22-0.22,0.19-0.57-0.05-0.75L3.8,12.6 C3.47,12.35,3,12.59,3,13v2c0,3.88,4.92,7,9,7s9-3.12,9-7v-2c0-0.41-0.47-0.65-0.8-0.4l-2.74,2.05c-0.24,0.18-0.27,0.54-0.05,0.75 l1.14,1.14c-0.96,1.69-3.33,3.04-5.55,3.37V11h2c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H13z M12,4c0.55,0,1,0.45,1,1s-0.45,1-1,1 s-1-0.45-1-1S11.45,4,12,4z - M8.12 19.3c.39.39 1.02.39 1.41 0L12 16.83l2.47 2.47c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41l-3.17-3.17c-.39-.39-1.02-.39-1.41 0l-3.17 3.17c-.4.38-.4 1.02-.01 1.41zm7.76-14.6c-.39-.39-1.02-.39-1.41 0L12 7.17 9.53 4.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.03 0 1.42l3.17 3.17c.39.39 1.02.39 1.41 0l3.17-3.17c.4-.39.4-1.03.01-1.42z - M12 5.83l2.46 2.46c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 3.7c-.39-.39-1.02-.39-1.41 0L8.12 6.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 5.83zm0 12.34l-2.46-2.46c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l3.17 3.18c.39.39 1.02.39 1.41 0l3.17-3.17c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L12 18.17z - M11.71,17.99C8.53,17.84,6,15.22,6,12c0-3.31,2.69-6,6-6c3.22,0,5.84,2.53,5.99,5.71l-2.1-0.63C15.48,9.31,13.89,8,12,8 c-2.21,0-4,1.79-4,4c0,1.89,1.31,3.48,3.08,3.89L11.71,17.99z M22,12c0,0.3-0.01,0.6-0.04,0.9l-1.97-0.59C20,12.21,20,12.1,20,12 c0-4.42-3.58-8-8-8s-8,3.58-8,8s3.58,8,8,8c0.1,0,0.21,0,0.31-0.01l0.59,1.97C12.6,21.99,12.3,22,12,22C6.48,22,2,17.52,2,12 C2,6.48,6.48,2,12,2S22,6.48,22,12z M18.23,16.26l2.27-0.76c0.46-0.15,0.45-0.81-0.01-0.95l-7.6-2.28 c-0.38-0.11-0.74,0.24-0.62,0.62l2.28,7.6c0.14,0.47,0.8,0.48,0.95,0.01l0.76-2.27l3.91,3.91c0.2,0.2,0.51,0.2,0.71,0l1.27-1.27 c0.2-0.2,0.2-0.51,0-0.71L18.23,16.26z - M1.8 6q-.525 0-.887-.35Q.55 5.3.55 4.8V4q0-1.425 1.012-2.438Q2.575.55 4 .55h.8q.5 0 .85.362.35.363.35.888 0 .5-.35.85T4.8 3H4q-.425 0-.712.287Q3 3.575 3 4v.8q0 .5-.35.85T1.8 6ZM4 23.45q-1.425 0-2.438-1.012Q.55 21.425.55 20v-.8q0-.5.363-.85.362-.35.887-.35.5 0 .85.35t.35.85v.8q0 .425.288.712Q3.575 21 4 21h.8q.5 0 .85.35t.35.85q0 .525-.35.887-.35.363-.85.363Zm15.2 0q-.5 0-.85-.363-.35-.362-.35-.887 0-.5.35-.85t.85-.35h.8q.425 0 .712-.288Q21 20.425 21 20v-.8q0-.5.35-.85t.85-.35q.525 0 .888.35.362.35.362.85v.8q0 1.425-1.012 2.438Q21.425 23.45 20 23.45ZM22.2 6q-.5 0-.85-.35T21 4.8V4q0-.425-.288-.713Q20.425 3 20 3h-.8q-.5 0-.85-.35T18 1.8q0-.525.35-.888.35-.362.85-.362h.8q1.425 0 2.438 1.012Q23.45 2.575 23.45 4v.8q0 .5-.362.85-.363.35-.888.35ZM12 17.35l1-.575v-4.1l3.55-2.075V9.425l-1-.575L12 10.925 8.45 8.85l-1 .575V10.6L11 12.675v4.1Zm-1.325 2.325-4.55-2.65q-.625-.35-.975-.963-.35-.612-.35-1.337V9.45q0-.725.35-1.337.35-.613.975-.963l4.55-2.65Q11.3 4.15 12 4.15t1.325.35l4.55 2.65q.625.35.975.963.35.612.35 1.337v5.275q0 .725-.35 1.337-.35.613-.975.963l-4.55 2.65q-.625.35-1.325.35t-1.325-.35Z - M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z - M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z + M22,9v6c0,1.1-0.9,2-2,2h-1l0-2h1V9H4v6h6v2H4c-1.1,0-2-0.9-2-2V9c0-1.1,0.9-2,2-2h16C21.1,7,22,7.9,22,9z + M14.04,17.99 + c0.18,0.39,0.73,0.39,0.91,0l0.63-1.4l1.4-0.63c0.39-0.18,0.39-0.73,0-0.91l-1.4-0.63l-0.63-1.4c-0.18-0.39-0.73-0.39-0.91,0 + l-0.63,1.4l-1.4,0.63c-0.39,0.18-0.39,0.73,0,0.91l1.4,0.63L14.04,17.99z + M16.74,13.43c0.1,0.22,0.42,0.22,0.52,0l0.36-0.8 + l0.8-0.36c0.22-0.1,0.22-0.42,0-0.52l-0.8-0.36l-0.36-0.8c-0.1-0.22-0.42-0.22-0.52,0l-0.36,0.8l-0.8,0.36 + c-0.22,0.1-0.22,0.42,0,0.52l0.8,0.36L16.74,13.43z + M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 + 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 + 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z + M19.71,15.71l-3.59,3.59c-0.63,0.63-1.71,0.18-1.71-0.71V16h-7c-1.1,0-2-0.9-2-2V5c0-0.55,0.45-1,1-1h0c0.55,0,1,0.45,1,1 + v9h7v-2.59c0-0.89,1.08-1.34,1.71-0.71l3.59,3.59C20.1,14.68,20.1,15.32,19.71,15.71z + M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 + 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z + + M18.3,5.71L18.3,5.71c-0.39-0.39-1.02-0.39-1.41,0L12,10.59L7.11,5.7c-0.39-0.39-1.02-0.39-1.41,0l0,0 + c-0.39,0.39-0.39,1.02,0,1.41L10.59,12L5.7,16.89c-0.39,0.39-0.39,1.02,0,1.41l0,0c0.39,0.39,1.02,0.39,1.41,0L12,13.41l4.89,4.89 + c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L13.41,12l4.89-4.89C18.68,6.73,18.68,6.09,18.3,5.71z + + M7.71,9.29l3.88,3.88l3.88-3.88c0.39-0.39,1.02-0.39,1.41,0l0,0c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59 + c-0.39,0.39-1.02,0.39-1.41,0L6.29,10.7c-0.39-0.39-0.39-1.02,0-1.41l0,0C6.68,8.91,7.32,8.9,7.71,9.29z + M3,17h18c0.55,0,1,0.45,1,1v0c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1v0C2,17.45,2.45,17,3,17z + M2.5,12.57 + c0.36,0.21,0.82,0.08,1.03-0.28L4,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02L5.3,10.72 + h0.95C6.66,10.72,7,10.38,7,9.97v0c0-0.41-0.34-0.75-0.75-0.75H5.3L5.77,8.4C5.98,8.04,5.86,7.58,5.5,7.37l0,0 + C5.14,7.17,4.68,7.29,4.47,7.65L4,8.47L3.53,7.65C3.32,7.29,2.86,7.17,2.5,7.37l0,0C2.14,7.58,2.02,8.04,2.23,8.4L2.7,9.22H1.75 + C1.34,9.22,1,9.56,1,9.97v0c0,0.41,0.34,0.75,0.75,0.75H2.7l-0.48,0.83C2.02,11.91,2.14,12.37,2.5,12.57L2.5,12.57z + M10.5,12.57 + L10.5,12.57c0.36,0.21,0.82,0.08,1.03-0.28L12,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02 + l-0.48-0.83h0.95c0.41,0,0.75-0.34,0.75-0.75v0c0-0.41-0.34-0.75-0.75-0.75H13.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0 + c-0.36-0.21-0.82-0.08-1.02,0.27L12,8.47l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03 + l0.47,0.82H9.75C9.34,9.22,9,9.56,9,9.97v0c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83C10.02,11.91,10.14,12.37,10.5,12.57z + M23,9.97c0-0.41-0.34-0.75-0.75-0.75H21.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0c-0.36-0.21-0.82-0.08-1.02,0.27L20,8.47 + l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03l0.47,0.82h-0.95C17.34,9.22,17,9.56,17,9.97v0 + c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83c-0.21,0.36-0.08,0.82,0.28,1.02l0,0c0.36,0.21,0.82,0.08,1.03-0.28L20,11.47 + l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02l-0.48-0.83h0.95C22.66,10.72,23,10.38,23,9.97 + L23,9.97z + M19,11c0-3.87-3.13-7-7-7C8.78,4,6.07,6.18,5.26,9.15C2.82,9.71,1,11.89,1,14.5C1,17.54,3.46,20,6.5,20 + c1.76,0,10.25,0,12,0l0,0c2.49-0.01,4.5-2.03,4.5-4.52C23,13.15,21.25,11.26,19,11z + M13,13v2c0,0.55-0.45,1-1,1h0 + c-0.55,0-1-0.45-1-1v-2H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.79-2.79c0.2-0.2,0.51-0.2,0.71,0l2.79,2.79 + c0.31,0.31,0.09,0.85-0.35,0.85H13z + M16,17.01V11c0-0.55-0.45-1-1-1s-1,0.45-1,1v6.01h-1.79c-0.45,0-0.67,0.54-0.35,0.85l2.79,2.78c0.2,0.19,0.51,0.19,0.71,0 + l2.79-2.78c0.32-0.31,0.09-0.85-0.35-0.85H16z + M8.65,3.35L5.86,6.14c-0.32,0.31-0.1,0.85,0.35,0.85H8V13c0,0.55,0.45,1,1,1 + s1-0.45,1-1V6.99h1.79c0.45,0,0.67-0.54,0.35-0.85L9.35,3.35C9.16,3.16,8.84,3.16,8.65,3.35z + M20,6h-8l-1.41-1.41C10.21,4.21,9.7,4,9.17,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8 + C22,6.9,21.1,6,20,6z + M15.98,15.74l-1.07-0.82l-1.07,0.82c-0.39,0.29-0.92-0.08-0.78-0.55l0.42-1.36l-1.2-0.95 + C11.91,12.6,12.12,12,12.59,12H14l0.43-1.34c0.15-0.46,0.8-0.46,0.95,0L15.82,12h1.41c0.47,0,0.68,0.6,0.31,0.89l-1.2,0.95 + l0.42,1.36C16.91,15.66,16.37,16.04,15.98,15.74z + M19.41,7.41l-4.83-4.83C14.21,2.21,13.7,2,13.17,2H6C4.9,2,4.01,2.9,4.01,4L4,20c0,1.1,0.89,2,1.99,2H18c1.1,0,2-0.9,2-2 + V8.83C20,8.3,19.79,7.79,19.41,7.41z + M14.8,15H13v3c0,0.55-0.45,1-1,1s-1-0.45-1-1v-3H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.8-2.79 + c0.2-0.19,0.51-0.19,0.71,0l2.79,2.79C15.46,14.46,15.24,15,14.8,15z + M14,9c-0.55,0-1-0.45-1-1V3.5L18.5,9H14z + M16.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V7.83c0-0.53-0.21-1.04-0.59-1.41l-2.83-2.83 + C17.21,3.21,16.7,3,16.17,3z M12,18c-1.66,0-3-1.34-3-3s1.34-3,3-3s3,1.34,3,3S13.66,18,12,18z + M14,10H7c-0.55,0-1-0.45-1-1V7 + c0-0.55,0.45-1,1-1h7c0.55,0,1,0.45,1,1v2C15,9.55,14.55,10,14,10z + M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z + M6.6,16.2l2-2.67 + c0.2-0.27,0.6-0.27,0.8,0L11.25,16l2.6-3.47c0.2-0.27,0.6-0.27,0.8,0l2.75,3.67c0.25,0.33,0.01,0.8-0.4,0.8H7 + C6.59,17,6.35,16.53,6.6,16.2z + M12 6q-.825 0-1.412-.588Q10 4.825 10 4t.588-1.413Q11.175 2 12 + 2t1.413.587Q14 3.175 14 4q0 .825-.587 1.412Q12.825 6 12 6ZM9 22V9H3V7h18v2h-6v13h-2v-6h-2v6Z + M9 22q-1.45 0-2.725-.55Q5 20.9 4.05 19.95q-.95-.95-1.5-2.225Q2 + 16.45 2 15q0-2.025 1.05-3.7Q4.1 9.625 5.8 8.75q.5-.975 1.238-1.713Q7.775 6.3 8.75 + 5.8q.825-1.7 2.525-2.75T15 2q1.45 0 2.725.55Q19 3.1 19.95 4.05q.95.95 1.5 2.225Q22 7.55 22 + 9q0 2.125-1.05 3.75t-2.75 2.5q-.5.975-1.238 1.712-.737.738-1.712 1.238-.875 1.7-2.55 + 2.75Q11.025 22 9 22Zm0-2q.825 0 1.588-.25Q11.35 19.5 12 19q-1.45 0-2.725-.55Q8 17.9 7.05 + 16.95q-.95-.95-1.5-2.225Q5 13.45 5 12q-.5.65-.75 1.412Q4 14.175 4 15q0 1.05.4 1.95.4.9 1.075 + 1.575.675.675 1.575 1.075.9.4 1.95.4Zm3-3q.825 0 1.613-.25.787-.25 1.437-.75-1.475 + 0-2.75-.562-1.275-.563-2.225-1.513-.95-.95-1.513-2.225Q8 10.425 8 8.95q-.5.65-.75 1.437Q7 + 11.175 7 12q0 1.05.388 1.95.387.9 1.087 1.575.675.7 1.575 1.088.9.387 1.95.387Zm3-3q.45 0 + .863-.075.412-.075.837-.225.55-1.5.163-2.888-.388-1.387-1.338-2.337-.95-.95-2.337-1.338Q11.8 + 6.75 10.3 7.3q-.15.425-.225.837Q10 8.55 10 9q0 1.05.387 1.95.388.9 1.088 1.575.675.7 1.575 + 1.088.9.387 1.95.387Zm4-1.95q.5-.65.75-1.438Q20 9.825 20 + 9q0-1.05-.387-1.95-.388-.9-1.088-1.575-.675-.7-1.575-1.088Q16.05 4 15 4q-.875 + 0-1.637.25-.763.25-1.413.75 1.475 0 2.75.562 1.275.563 2.225 1.513.95.95 1.513 2.225.562 + 1.275.562 2.75Z + M3,7L3,7C2.45,7,2,7.45,2,8v13c0,1.1,0.9,2,2,2h11c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H4V8C4,7.45,3.55,7,3,7z + M15.59,1.59C15.21,1.21,14.7,1,14.17,1H8C6.9,1,6.01,1.9,6.01,3L6,17c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V7.83 + c0-0.53-0.21-1.04-0.59-1.41L15.59,1.59z M14,7V2.5L19.5,8H15C14.45,8,14,7.55,14,7z + M14.4,6l-0.24-1.2C14.07,4.34,13.66,4,13.18,4H6C5.45,4,5,4.45,5,5v15c0,0.55,0.45,1,1,1l0,0c0.55,0,1-0.45,1-1v-6h5.6 + l0.24,1.2c0.09,0.47,0.5,0.8,0.98,0.8H19c0.55,0,1-0.45,1-1V7c0-0.55-0.45-1-1-1H14.4z + M20 1v3h3v2h-3v3h-2V6h-3V4h3V1h2zm-8 12c1.1 0 2-.9 + 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm2-9.75V7h3v3h2.92c.05.39.08.79.08 1.2 0 3.32-2.67 7.25-8 + 11.8-5.33-4.55-8-8.48-8-11.8C4 6.22 7.8 3 12 3c.68 0 1.35.08 2 .25z + + M20.29,10.29l-3.59-3.59C16.08,6.08,15,6.52,15,7.41V10H8c-2.76,0-5,2.24-5,5v3c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-3 + c0-1.65,1.35-3,3-3h7v2.59c0,0.89,1.08,1.34,1.71,0.71l3.59-3.59C20.68,11.32,20.68,10.68,20.29,10.29z + M9.5,5.5c1.1,0,2-0.9,2-2s-0.9-2-2-2s-2,0.9-2,2S8.4,5.5,9.5,5.5z + M5.75,8.9L3.23,21.81C3.11,22.43,3.58,23,4.21,23H4.3 + c0.47,0,0.88-0.33,0.98-0.79L6.85,15L9,17v5c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-6.14c0-0.27-0.11-0.52-0.29-0.71L8.95,13.4 + l0.6-3c1.07,1.32,2.58,2.23,4.31,2.51c0.6,0.1,1.14-0.39,1.14-1v0c0-0.49-0.36-0.9-0.84-0.98c-1.49-0.25-2.75-1.15-3.51-2.38 + L9.7,6.95C9.35,6.35,8.7,6,8,6C7.75,6,7.5,6.05,7.25,6.15l-4.63,1.9C2.25,8.2,2,8.57,2,8.97V12c0,0.55,0.45,1,1,1h0 + c0.55,0,1-0.45,1-1V9.65L5.75,8.9 + M21,2h-7c-0.55,0-1,0.45-1,1v5c0,0.55,0.45,1,1,1h2.75v13.25c0,0.41,0.34,0.75,0.75,0.75 + s0.75-0.34,0.75-0.75V9H21c0.55,0,1-0.45,1-1V3C22,2.45,21.55,2,21,2z + M20.15,5.85l-1.28,1.29c-0.31,0.32-0.85,0.09-0.85-0.35V6.25 + h-2.76c-0.41,0-0.75-0.34-0.75-0.75s0.34-0.75,0.75-0.75h2.76V4.21c0-0.45,0.54-0.67,0.85-0.35l1.28,1.29 + C20.34,5.34,20.34,5.66,20.15,5.85z + M22,24L16.75,19L17.38,21H4.5A2.5,2.5 0 0,1 2,18.5V3.5A2.5,2.5 0 + 0,1 4.5,1H19.5A2.5,2.5 0 0,1 22,3.5V24M12,6.8C9.32,6.8 7.44,7.95 7.44,7.95C8.47,7.03 + 10.27,6.5 10.27,6.5L10.1,6.33C8.41,6.36 6.88,7.53 6.88,7.53C5.16,11.12 5.27,14.22 + 5.27,14.22C6.67,16.03 8.75,15.9 8.75,15.9L9.46,15C8.21,14.73 7.42,13.62 + 7.42,13.62C7.42,13.62 9.3,14.9 12,14.9C14.7,14.9 16.58,13.62 16.58,13.62C16.58,13.62 + 15.79,14.73 14.54,15L15.25,15.9C15.25,15.9 17.33,16.03 18.73,14.22C18.73,14.22 18.84,11.12 + 17.12,7.53C17.12,7.53 15.59,6.36 13.9,6.33L13.73,6.5C13.73,6.5 15.53,7.03 + 16.56,7.95C16.56,7.95 14.68,6.8 12,6.8M9.93,10.59C10.58,10.59 11.11,11.16 + 11.1,11.86C11.1,12.55 10.58,13.13 9.93,13.13C9.29,13.13 8.77,12.55 8.77,11.86C8.77,11.16 + 9.28,10.59 9.93,10.59M14.1,10.59C14.75,10.59 15.27,11.16 15.27,11.86C15.27,12.55 14.75,13.13 + 14.1,13.13C13.46,13.13 12.94,12.55 12.94,11.86C12.94,11.16 13.45,10.59 14.1,10.59Z + M14,12H10V10H14M14,16H10V14H14M20,8H17.19C16.74,7.22 16.12,6.55 + 15.37,6.04L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.04,5.06 + 10.59,5.17L8.41,3L7,4.41L8.62,6.04C7.88,6.55 7.26,7.22 6.81,8H4V10H6.09C6.04,10.33 6,10.66 + 6,11V12H4V14H6V15C6,15.34 6.04,15.67 6.09,16H4V18H6.81C7.85,19.79 9.78,21 12,21C14.22,21 + 16.15,19.79 17.19,18H20V16H17.91C17.96,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 + 17.96,10.33 17.91,10H20V8Z + M22 10.92L19.26 9.33C21.9 7.08 19.25 2.88 16.08 4.31L15.21 4.68L15.1 + 3.72C15 2.64 14.44 1.87 13.7 1.42C12.06 .467 9.56 1.12 9.16 3.5L6.41 1.92C5.45 1.36 4.23 + 1.69 3.68 2.65L2.68 4.38C2.4 4.86 2.57 5.47 3.05 5.75L10.84 10.25L12.34 7.65L14.07 + 8.65L12.57 11.25L20.36 15.75C20.84 16 21.46 15.86 21.73 15.38L22.73 13.65C23.28 12.69 22.96 + 11.47 22 10.92M12.37 5C11.5 5.25 10.8 4.32 11.24 3.55C11.5 3.07 12.13 2.91 12.61 3.18C13.38 + 3.63 13.23 4.79 12.37 5M17.56 8C16.7 8.25 16 7.32 16.44 6.55C16.71 6.07 17.33 5.91 17.8 + 6.18C18.57 6.63 18.42 7.79 17.56 8M20.87 16.88C21.28 16.88 21.67 16.74 22 16.5V20C22 21.11 + 21.11 22 20 22H4C2.9 22 2 21.11 2 20V11H10.15L11 11.5V20H13V12.65L19.87 16.61C20.17 16.79 + 20.5 16.88 20.87 16.88Z + M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 + 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 + 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM8 19h12c.55 + 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-6h12c.55 0 1-.45 + 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM7 6c0 .55.45 1 1 1h12c.55 0 1-.45 + 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z + M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 + 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z + M6,19c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V7H6V19z + M9.17,12.59c-0.39-0.39-0.39-1.02,0-1.41c0.39-0.39,1.02-0.39,1.41,0 + L12,12.59l1.41-1.41c0.39-0.39,1.02-0.39,1.41,0s0.39,1.02,0,1.41L13.41,14l1.41,1.41c0.39,0.39,0.39,1.02,0,1.41 + s-1.02,0.39-1.41,0L12,15.41l-1.41,1.41c-0.39,0.39-1.02,0.39-1.41,0c-0.39-0.39-0.39-1.02,0-1.41L10.59,14L9.17,12.59z + M18,4h-2.5 + l-0.71-0.71C14.61,3.11,14.35,3,14.09,3H9.91c-0.26,0-0.52,0.11-0.7,0.29L8.5,4H6C5.45,4,5,4.45,5,5s0.45,1,1,1h12 + c0.55,0,1-0.45,1-1S18.55,4,18,4z + M18,4v16H6V4H18 + M18,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2L18,2z + M7,19h10v-6H7 V19z M10,10h4v1h3V5H7v6h3V10z + M16,16.92C15.67,16.97 15.34,17 15,17C14.66,17 14.33,16.97 + 14,16.92V13.41L11.5,15.89C11,15.5 10.5,15 10.11,14.5L12.59,12H9.08C9.03,11.67 9,11.34 + 9,11C9,10.66 9.03,10.33 9.08,10H12.59L10.11,7.5C10.3,7.25 10.5,7 10.76,6.76V6.76C11,6.5 + 11.25,6.3 11.5,6.11L14,8.59V5.08C14.33,5.03 14.66,5 15,5C15.34,5 15.67,5.03 + 16,5.08V8.59L18.5,6.11C19,6.5 19.5,7 19.89,7.5L17.41,10H20.92C20.97,10.33 21,10.66 + 21,11C21,11.34 20.97,11.67 20.92,12H17.41L19.89,14.5C19.7,14.75 19.5,15 + 19.24,15.24V15.24C19,15.5 18.75,15.7 18.5,15.89L16,13.41V16.92H16V16.92M5,19A2,2 0 0,1 + 7,17A2,2 0 0,1 9,19A2,2 0 0,1 7,21A2,2 0 0,1 5,19H5Z + + M22,3H7C6.31,3 5.77,3.35 5.41,3.88L0,12L5.41,20.11C5.77,20.64 + 6.31,21 7,21H22A2,2 0 0,0 24,19V5A2,2 0 0,0 + 22,3M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12 + M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 + 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 + 2c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 + .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 + 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z + M14.65 4.98l-5-1.75c-.42-.15-.88-.15-1.3-.01L4.36 4.56C3.55 4.84 3 5.6 + 3 6.46v11.85c0 1.41 1.41 2.37 2.72 1.86l2.93-1.14c.22-.09.47-.09.69-.01l5 1.75c.42.15.88.15 + 1.3.01l3.99-1.34c.81-.27 1.36-1.04 1.36-1.9V5.69c0-1.41-1.41-2.37-2.72-1.86l-2.93 + 1.14c-.22.08-.46.09-.69.01zM15 18.89l-6-2.11V5.11l6 2.11v11.67z + M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 + 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35 + 6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54 + 9.9c.92-2.34.44-5.1-1.45-6.99z + M2.5 5.5C2.5 6.33 3.17 7 4 7h3.5v10.5c0 .83.67 1.5 1.5 + 1.5s1.5-.67 1.5-1.5V7H14c.83 0 1.5-.67 1.5-1.5S14.83 4 14 4H4c-.83 0-1.5.67-1.5 1.5zM20 + 9h-6c-.83 0-1.5.67-1.5 1.5S13.17 12 14 12h1.5v5.5c0 .83.67 1.5 1.5 1.5s1.5-.67 + 1.5-1.5V12H20c.83 0 1.5-.67 1.5-1.5S20.83 9 20 9z + M21 13h-6c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 + 1zm0-6h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-6 10h6c.55 0 1-.45 + 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm-3-8v6c0 1.1-.9 2-2 2H4c-1.1 + 0-2-.9-2-2V9c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2zm-2.1 5.2l-1.26-1.68c-.2-.26-.59-.27-.8-.01L6.5 + 14.26l-.85-1.03c-.2-.25-.58-.24-.78.01l-.74.95c-.26.33-.02.81.39.81H9.5c.41 0 .65-.47.4-.8z + M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 + 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 + 2H5v-2h2v2zm0-3H5V8h2v2zm8 7H9c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 + 1zm1-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z + + M2.7,17.29c0.39,0.39,1.02,0.39,1.41,0l4.59-4.59c0.39-0.39,1.02-0.39,1.41,0l1.17,1.17c1.17,1.17,3.07,1.17,4.24,0 + l4.18-4.17l1.44,1.44c0.31,0.31,0.85,0.09,0.85-0.35V6.5C22,6.22,21.78,6,21.5,6h-4.29c-0.45,0-0.67,0.54-0.35,0.85l1.44,1.44 + l-4.17,4.17c-0.39,0.39-1.02,0.39-1.41,0l-1.17-1.17c-1.17-1.17-3.07-1.17-4.24,0L2.7,15.88C2.32,16.27,2.32,16.91,2.7,17.29z + M18 10v3H6v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 + 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1z + M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 + 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 + 0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 + 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 + 2.89c.38.38.38 1.02 0 1.41z + M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 + 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z + M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 + 2zm6-12v10c0 1.1.9 2 2 2s2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2z + M8 6h8c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2H8c-1.1 0-2-.9-2-2V8c0-1.1.9-2 + 2-2z + M7.58 16.89l5.77-4.07c.56-.4.56-1.24 0-1.63L7.58 7.11C6.91 6.65 6 + 7.12 6 7.93v8.14c0 .81.91 1.28 1.58.82zM16 7v10c0 .55.45 1 1 1s1-.45 + 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z + M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 + 1s-1-.45-1-1V7c0-.55.45-1 1-1zm3.66 6.82l5.77 4.07c.66.47 1.58-.01 + 1.58-.82V7.93c0-.81-.91-1.28-1.58-.82l-5.77 4.07c-.57.4-.57 1.24 0 1.64z + M13 10H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 + 1-1s-.45-1-1-1zm0-4H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm5 + 8v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45 + 1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1h-3zM3 16h6c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 + 1s.45 1 1 1z + M14 6H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 + 1-1s-.45-1-1-1zm0 4H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h6c.55 0 + 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 6c-1.1 0-2 .9-2 + 2v6.18c-.31-.11-.65-.18-1-.18-1.84 0-3.28 1.64-2.95 3.54.21 1.21 1.2 2.2 2.41 2.41 1.9.33 + 3.54-1.11 3.54-2.95V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2z + M10 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 8c-1.1 + 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 + 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-4 8c-1.1 0-2 .9-2 2s.9 2 2 2 + 2-.9 2-2-.9-2-2-2zm4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 + 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z + M12,17c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,17,12,17z + M17.95,14c-0.52,0-0.94,0.4-0.99,0.92 + c-0.2,2.03-1.05,2.68-1.48,3.02C14.68,18.54,14,19,12,19s-2.68-0.46-3.48-1.06c-0.43-0.34-1.28-0.99-1.48-3.02 + C6.99,14.4,6.57,14,6.05,14c-0.59,0-1.06,0.51-1,1.09c0.22,2.08,1.07,3.47,2.24,4.41c0.5,0.4,1.1,0.7,1.7,0.9L9,24h6v-3.6 + c0.6-0.2,1.2-0.5,1.7-0.9c1.17-0.94,2.03-2.32,2.24-4.41C19.01,14.51,18.53,14,17.95,14z + M12,0C5.92,0,1,1.9,1,4.25v3.49 + C1,8.55,1.88,9,2.56,8.57C2.7,8.48,2.84,8.39,3,8.31L5,13h2l1.5-6.28C9.6,6.58,10.78,6.5,12,6.5s2.4,0.08,3.5,0.22L17,13h2l2-4.69 + c0.16,0.09,0.3,0.17,0.44,0.26C22.12,9,23,8.55,23,7.74V4.25C23,1.9,18.08,0,12,0z + M5.88,11.24L4.37,7.69 c0.75-0.28,1.6-0.52,2.53-0.71L5.88,11.24z + M18.12,11.24L17.1,6.98c0.93,0.19,1.78,0.43,2.53,0.71L18.12,11.24z + M13,9V7.82C14.16,7.4,15,6.3,15,5c0-1.65-1.35-3-3-3S9,3.35,9,5c0,1.3,0.84,2.4,2,2.82V9H9c-0.55,0-1,0.45-1,1v0 + c0,0.55,0.45,1,1,1h2v8.92c-2.22-0.33-4.59-1.68-5.55-3.37l1.14-1.14c0.22-0.22,0.19-0.57-0.05-0.75L3.8,12.6 + C3.47,12.35,3,12.59,3,13v2c0,3.88,4.92,7,9,7s9-3.12,9-7v-2c0-0.41-0.47-0.65-0.8-0.4l-2.74,2.05c-0.24,0.18-0.27,0.54-0.05,0.75 + l1.14,1.14c-0.96,1.69-3.33,3.04-5.55,3.37V11h2c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H13z + M12,4c0.55,0,1,0.45,1,1s-0.45,1-1,1 s-1-0.45-1-1S11.45,4,12,4z + M8.12 19.3c.39.39 1.02.39 1.41 0L12 16.83l2.47 2.47c.39.39 1.02.39 + 1.41 0 .39-.39.39-1.02 0-1.41l-3.17-3.17c-.39-.39-1.02-.39-1.41 0l-3.17 3.17c-.4.38-.4 + 1.02-.01 1.41zm7.76-14.6c-.39-.39-1.02-.39-1.41 0L12 7.17 9.53 4.7c-.39-.39-1.02-.39-1.41 + 0-.39.39-.39 1.03 0 1.42l3.17 3.17c.39.39 1.02.39 1.41 0l3.17-3.17c.4-.39.4-1.03.01-1.42z + M12 5.83l2.46 2.46c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 + 0-1.41L12.7 3.7c-.39-.39-1.02-.39-1.41 0L8.12 6.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 + 1.41 0L12 5.83zm0 12.34l-2.46-2.46c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l3.17 + 3.18c.39.39 1.02.39 1.41 0l3.17-3.17c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L12 + 18.17z + M11.71,17.99C8.53,17.84,6,15.22,6,12c0-3.31,2.69-6,6-6c3.22,0,5.84,2.53,5.99,5.71l-2.1-0.63C15.48,9.31,13.89,8,12,8 + c-2.21,0-4,1.79-4,4c0,1.89,1.31,3.48,3.08,3.89L11.71,17.99z + M22,12c0,0.3-0.01,0.6-0.04,0.9l-1.97-0.59C20,12.21,20,12.1,20,12 + c0-4.42-3.58-8-8-8s-8,3.58-8,8s3.58,8,8,8c0.1,0,0.21,0,0.31-0.01l0.59,1.97C12.6,21.99,12.3,22,12,22C6.48,22,2,17.52,2,12 + C2,6.48,6.48,2,12,2S22,6.48,22,12z + M18.23,16.26l2.27-0.76c0.46-0.15,0.45-0.81-0.01-0.95l-7.6-2.28 + c-0.38-0.11-0.74,0.24-0.62,0.62l2.28,7.6c0.14,0.47,0.8,0.48,0.95,0.01l0.76-2.27l3.91,3.91c0.2,0.2,0.51,0.2,0.71,0l1.27-1.27 + c0.2-0.2,0.2-0.51,0-0.71L18.23,16.26z + M1.8 6q-.525 0-.887-.35Q.55 5.3.55 4.8V4q0-1.425 1.012-2.438Q2.575.55 + 4 .55h.8q.5 0 .85.362.35.363.35.888 0 .5-.35.85T4.8 3H4q-.425 0-.712.287Q3 3.575 3 4v.8q0 + .5-.35.85T1.8 6ZM4 23.45q-1.425 0-2.438-1.012Q.55 21.425.55 + 20v-.8q0-.5.363-.85.362-.35.887-.35.5 0 .85.35t.35.85v.8q0 .425.288.712Q3.575 21 4 21h.8q.5 + 0 .85.35t.35.85q0 .525-.35.887-.35.363-.85.363Zm15.2 0q-.5 0-.85-.363-.35-.362-.35-.887 + 0-.5.35-.85t.85-.35h.8q.425 0 .712-.288Q21 20.425 21 20v-.8q0-.5.35-.85t.85-.35q.525 0 + .888.35.362.35.362.85v.8q0 1.425-1.012 2.438Q21.425 23.45 20 23.45ZM22.2 6q-.5 0-.85-.35T21 + 4.8V4q0-.425-.288-.713Q20.425 3 20 3h-.8q-.5 0-.85-.35T18 + 1.8q0-.525.35-.888.35-.362.85-.362h.8q1.425 0 2.438 1.012Q23.45 2.575 23.45 4v.8q0 + .5-.362.85-.363.35-.888.35ZM12 17.35l1-.575v-4.1l3.55-2.075V9.425l-1-.575L12 10.925 8.45 + 8.85l-1 .575V10.6L11 12.675v4.1Zm-1.325 + 2.325-4.55-2.65q-.625-.35-.975-.963-.35-.612-.35-1.337V9.45q0-.725.35-1.337.35-.613.975-.963l4.55-2.65Q11.3 + 4.15 12 4.15t1.325.35l4.55 2.65q.625.35.975.963.35.612.35 1.337v5.275q0 .725-.35 + 1.337-.35.613-.975.963l-4.55 2.65q-.625.35-1.325.35t-1.325-.35Z + M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 + 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 + 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 + 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 + 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 + 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 + 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 + 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 + 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 + 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 + 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z + M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 + 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 + 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 + 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 + 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 + 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 + 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 + 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 + 0-6.627-5.373-12-12-12z M8 16H4l6 6V2H8zm6-11v17h2V8h4l-6-6z - M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z - M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z - M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M10,19H7V17H10V19M10,16H7V14H10V16M10,13H7V11H10V13M14,19H11V17H14V19M14,16H11V14H14V16M14,13H11V11H14V13M13,9V3.5L18.5,9H13Z - M15,19L9,16.89V5L15,7.11M20.5,3C20.44,3 20.39,3 20.34,3L15,5.1L9,3L3.36,4.9C3.15,4.97 3,5.15 3,5.38V20.5A0.5,0.5 0 0,0 3.5,21C3.55,21 3.61,21 3.66,20.97L9,18.9L15,21L20.64,19.1C20.85,19 21,18.85 21,18.62V3.5A0.5,0.5 0 0,0 20.5,3Z - M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0 10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2 3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19 13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z - M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z - M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M13,13H11V18A2,2 0 0,1 9,20A2,2 0 0,1 7,18A2,2 0 0,1 9,16C9.4,16 9.7,16.1 10,16.3V11H13V13M13,9V3.5L18.5,9H13Z - M5.206,19.956l0.199,42.771c0.003,0.55,0.306,1.054,0.789,1.314l34.161,17.887c0.223,0.119,0.467,0.179,0.711,0.179 c0.001,0,0.002,0,0.003,0c0.103,0.117,0.218,0.227,0.355,0.309c0.236,0.141,0.502,0.212,0.769,0.212 c0.246,0,0.49-0.061,0.712-0.181l33.729-18.292c0.484-0.263,0.787-0.77,0.787-1.319v-44.5c0-0.013-0.005-0.025-0.005-0.039 c-0.001-0.011,0.003-0.021,0.003-0.033c-0.002-0.043-0.019-0.082-0.022-0.124c-0.013-0.082-0.022-0.164-0.047-0.243 c-0.018-0.055-0.041-0.104-0.064-0.157c-0.031-0.07-0.062-0.139-0.104-0.203c-0.031-0.05-0.068-0.095-0.105-0.141 c-0.047-0.058-0.096-0.112-0.152-0.163c-0.044-0.04-0.091-0.076-0.141-0.111c-0.032-0.022-0.059-0.053-0.094-0.073 c-0.032-0.02-0.069-0.028-0.104-0.045c-0.029-0.015-0.052-0.036-0.081-0.049L41.747,0.118c-0.405-0.171-0.864-0.155-1.258,0.042 L6.131,18.071c-0.504,0.254-0.822,0.77-0.825,1.333c0,0.009,0.004,0.017,0.004,0.025C5.249,19.596,5.205,19.772,5.206,19.956z M72.456,18.501l-30.28,16.93L10.111,19.425L41.218,3.151L72.456,18.501z M43.692,78.61V38.021l30.729-17.173v41.09L43.692,78.61z - M 299.53 18.813 C 279.92 19.169 258.693 28.151 241.78 45.063 C 219.82 67.023 211.263 96.303 217.562 119.813 C 154.784 90.813 159.904 88.397 97.282 48.219 C 87.209 41.756 77.84 38.799 69.469 38.405 C 55.515 37.751 44.351 44.21 37.343 53.343 C 26.13 67.956 24.96 89.496 48.28 107.75 C 79.307 132.036 107.123 148.79 127.312 167.22 C 147.502 185.647 159.96 207.81 155.656 237.25 C 152.498 258.86 141.966 275.248 129.186 288.72 C 116.408 302.19 101.44 313.206 87.75 325.406 C 60.37 349.806 37.42 377.159 42.687 439.656 C 46.015 479.139 76.845 494.773 102.344 492.031 C 115.094 490.661 125.854 484.695 131.75 474.564 C 137.647 464.432 139.446 449.126 130.72 426.814 C 123.125 407.398 133.822 385.978 149.063 369.72 C 164.303 353.46 185.893 340.9 207.938 344.72 C 214.113 345.79 219.358 349.44 222.968 353.875 C 226.578 358.31 228.964 363.495 230.938 369.125 C 234.884 380.385 237.208 393.799 240.063 407.688 C 245.773 435.465 253.725 463.655 273.125 476.156 C 311.089 500.624 348.383 493.578 365.031 476.626 C 373.356 468.148 376.946 457.766 374.157 445.469 C 371.369 433.169 361.449 418.311 339.877 403.624 C 316.212 387.514 307.221 355.334 306.032 323.499 C 304.844 291.663 311.32 259.422 326.158 239.469 C 333.036 230.219 343.704 226.351 355.814 222.062 C 367.924 217.772 382.021 213.587 396.564 207.374 C 425.651 194.949 456.2 175.177 475.689 130.594 C 492.767 91.524 479.063 66.276 460.409 57.094 C 451.081 52.501 440.279 51.962 429.971 56.468 C 419.661 60.972 409.541 70.654 402.531 88.218 C 389.391 121.15 363.313 139.925 332.095 144.654 C 325.881 145.596 319.481 146.01 312.907 145.967 C 312.461 145.687 312.012 145.397 311.563 145.122 C 317.666 141.304 323.317 136.807 328.407 131.716 C 358.471 101.651 363.457 57.86 339.532 33.934 C 329.066 23.466 314.788 18.531 299.532 18.808 L 299.53 18.813 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 L 297.188 37.969 Z M 65.03 62.593 L 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.032 62.593 L 65.03 62.593 Z M 439.095 85.03 L 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.096 85.029 L 439.095 85.03 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 L 142.875 119.062 Z M 214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845 166.625 C 309.415 199.908 248.937 315.907 248.937 315.907 C 221.243 316.177 195.231 314.66 170.907 301.407 C 170.907 301.407 212.624 138.975 214.813 138.938 L 214.815 138.938 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 L 389.47 151.188 Z M 149.125 302.218 L 161.781 315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 L 149.125 302.218 Z M 260.281 324.844 L 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 L 260.281 324.844 Z M 83.281 375.969 L 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.968 L 83.281 375.969 Z M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 397.468 L 292.845 390.154 L 292.845 390.155 Z - M1.5,7.23 V22.5 H19.64 A2.87,2.87 0 0 0 19.64,16.77 H17.73 V7.23 Z M17.73,1.5 V16.77 H19.64 A2.88,2.88 0 0 1 21.64,17.61 A2.85,2.85 0 0 1 22.48,19.68 V4.36 A2.87,2.87 0 0 0 19.64,1.5 Z M13.91,18.68 L5.32,18.68 L5.32,10.09 M7.23,12 L5.32,12 M7.23,14.86 L5.32,14.86 M9.14,16.77 L9.14,18.68 M12,16.77 L12,18.68 - M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z - M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 397.468 L 292.845 390.154 Z M 83.282 375.968 L 83.282 375.969 L 83.281 375.969 Z M 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.969 Z M 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 Z M 149.125 302.218 L 161.781 315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 Z M 214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845 166.625 C 309.415 199.908 304.967 225.572 288.565 252.875 C 274.021 243.958 258.239 236.19 241.907 230.781 L 226.437 277.031 L 256.157 282.939 L 248.937 315.907 C 221.243 316.177 195.231 314.66 170.907 301.407 L 178.345 267.501 L 207.97 273.376 L 223.844 225.876 C 210.907 223.124 197.794 222.041 184.781 223.188 C 186.441 189.978 193.497 165.248 208.281 139.158 C 210.449 139.088 212.624 138.975 214.813 138.938 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 Z M 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.095 85.03 Z M 65.032 62.593 L 65.031 62.594 L 65.03 62.593 Z M 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.031 62.594 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 Z - M129.593,64.314c23.543-30.833,44.788-45.063,54.751-45.063c1.37,0,2.507,0.258,3.386,0.775c5.324,3.076,6.332,16.619,2.766,34.505c5.686,1.086,11.14,2.326,16.335,3.722c5.583-26.958,1.861-45.619-10.649-52.856c-12.716-7.34-30.498-1.318-51.434,17.42c-12.018,10.754-24.622,25.416-36.339,42.062c-11.687,0.676-23.237,1.953-34.188,3.813c-7.913-26.6-7.343-44.886-0.783-48.667c0.879-0.517,2.016-0.775,3.386-0.775c7.289,0,19.255,7.237,32.023,19.385c3.618-4.471,7.263-8.736,10.907-12.742C97.657,5.036,78.246-2.253,65.013,5.397C52.297,12.712,48.626,31.114,54.39,58.64c0.901,4.301,2.036,8.788,3.376,13.409C25.626,79.809,2,93.278,2,111.935c0,15.378,16.231,28.637,45.696,37.322l1.241,0.362l0.362-1.215c1.344-4.42,2.869-8.917,4.523-13.388l0.465-1.292l-1.318-0.388c-20.392-5.97-34.065-14.577-34.065-21.4c0-7.721,16.139-17.594,44.084-24.042c3.821,10.43,8.516,21.254,13.893,32.034c-8.08,17.761-14.137,35.252-17.321,50.473c-5.764,27.5-2.094,45.903,10.623,53.217c3.463,2.016,7.366,3.024,11.605,3.024c10.571,0,23.468-6.384,37.606-18.532c-3.851-3.929-7.625-8.064-11.295-12.38c-10.519,8.891-19.979,14.06-26.105,14.06c-1.344,0-2.481-0.259-3.386-0.776c-8.213-4.751-7.064-32.19,8.403-70.244c24.572,42.417,63.859,87.871,92.371,87.871c4.239,0,8.141-1.008,11.605-3.024h0.026c26.285-15.146,10.054-73.998-16.516-123.493c-6.306-1.008-13.207-1.835-20.729-2.43l0.853,1.447c33.316,57.689,38.795,103.592,27.94,109.872c-0.905,0.517-2.042,0.776-3.386,0.776c-13.13,0-45.98-24.787-77.797-79.891c-2.015-3.492-3.924-6.939-5.738-10.338c3.243-6.601,6.866-13.421,10.907-20.419c3.659-6.338,7.331-12.256,10.986-17.8c3.423-0.101,6.903-0.163,10.466-0.163c66.606,0,109.122,18.222,109.122,30.757c0,6.436-12.199,14.448-30.731,20.367c2.042,5.324,3.903,10.623,5.531,15.843c27.164-8.684,42.078-21.452,42.078-36.21C254,81.266,190.199,64.601,129.593,64.314z M91.919,90.689c-1.915,3.32-3.771,6.67-5.566,10.036c-2.506-5.53-4.744-10.887-6.695-16.017c5.395-0.837,11.099-1.547,17.094-2.107C95.11,85.272,93.492,87.964,91.919,90.689z M111.783,114.85c0,10.231,8.324,18.555,18.555,18.555c10.231,0,18.555-8.324,18.555-18.555s-8.324-18.555-18.555-18.555C120.107,96.294,111.783,104.618,111.783,114.85z - M11 1H3C1.9 1 1 1.9 1 3V15L4 12H9V11C9 8.8 10.79 7 13 7V3C13 1.9 12.1 1 11 1M11 4L9.5 4C9.16 5.19 8.54 6.3 7.68 7.26L7.66 7.28L8.92 8.53L8.55 9.54L7 8L4.5 10.5L3.81 9.77L6.34 7.28C5.72 6.59 5.22 5.82 4.86 5H5.85C6.16 5.6 6.54 6.17 7 6.68C7.72 5.88 8.24 4.97 8.57 4L3 4V3H6.5V2H7.5V3H11V4M21 9H13C11.9 9 11 9.9 11 11V18C11 19.1 11.9 20 13 20H20L23 23V11C23 9.9 22.1 9 21 9M19.63 19L18.78 16.75H15.22L14.38 19H12.88L16.25 10H17.75L21.13 19H19.63M17 12L18.22 15.25H15.79L17 12Z - M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z - M10.5,5A8.5,8.5 0 0,0 2,13.5A8.5,8.5 0 0,0 10.5,22A8.5,8.5 0 0,0 19,13.5A8.5,8.5 0 0,0 10.5,5M13.5,13A2.5,2.5 0 0,1 11,10.5A2.5,2.5 0 0,1 13.5,8A2.5,2.5 0 0,1 16,10.5A2.5,2.5 0 0,1 13.5,13M19.5,2A2.5,2.5 0 0,0 17,4.5A2.5,2.5 0 0,0 19.5,7A2.5,2.5 0 0,0 22,4.5A2.5,2.5 0 0,0 19.5,2 - M5,3H7V5H5V10A2,2 0 0,1 3,12A2,2 0 0,1 5,14V19H7V21H5C3.93,20.73 3,20.1 3,19V15A2,2 0 0,0 1,13H0V11H1A2,2 0 0,0 3,9V5A2,2 0 0,1 5,3M19,3A2,2 0 0,1 21,5V9A2,2 0 0,0 23,11H24V13H23A2,2 0 0,0 21,15V19A2,2 0 0,1 19,21H17V19H19V14A2,2 0 0,1 21,12A2,2 0 0,1 19,10V5H17V3H19M12,15A1,1 0 0,1 13,16A1,1 0 0,1 12,17A1,1 0 0,1 11,16A1,1 0 0,1 12,15M8,15A1,1 0 0,1 9,16A1,1 0 0,1 8,17A1,1 0 0,1 7,16A1,1 0 0,1 8,15M16,15A1,1 0 0,1 17,16A1,1 0 0,1 16,17A1,1 0 0,1 15,16A1,1 0 0,1 16,15Z - M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z - M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M6,20H15L18,20V12L14,16L12,14L6,20M8,9A2,2 0 0,0 6,11A2,2 0 0,0 8,13A2,2 0 0,0 10,11A2,2 0 0,0 8,9Z - M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32M232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32M96 224a32 32 0 1 1-32 32a32 32 0 0 1 32-32m288 224H64v-32l64-64l32 32l128-128l96 96z - M 21.955078 6.001953 L 13.535156 1.269531 C 12.896484 0.912109 12.103516 0.912109 11.464844 1.269531 L 3.044922 6.001953 C 2.400391 6.363281 2 7.041016 2 7.767578 L 2 17.232422 C 2 17.958984 2.400391 18.636719 3.044922 18.998047 L 11.464844 23.730469 C 11.785156 23.910156 12.142578 24 12.5 24 C 12.857422 24 13.214844 23.910156 13.535156 23.730469 L 21.955078 18.998047 C 22.599609 18.636719 23 17.958984 23 17.232422 L 23 7.767578 C 23 7.041016 22.599609 6.363281 21.955078 6.001953 Z M 12.5 18.5 C 9.191406 18.5 6.5 15.808594 6.5 12.5 C 6.5 9.191406 9.191406 6.5 12.5 6.5 C 14.390625 6.5 16.136719 7.376953 17.271484 8.871094 L 15.080078 10.138672 C 14.421875 9.417969 13.486328 9 12.5 9 C 10.570313 9 9 10.570313 9 12.5 C 9 14.429688 10.570313 16 12.5 16 C 13.486328 16 14.421875 15.582031 15.080078 14.861328 L 17.271484 16.128906 C 16.136719 17.623047 14.390625 18.5 12.5 18.5 Z M 18.5 13 L 17.5 13 L 17.5 14 L 16.5 14 L 16.5 13 L 15.5 13 L 15.5 12 L 16.5 12 L 16.5 11 L 17.5 11 L 17.5 12 L 18.5 12 Z M 22 13 L 21 13 L 21 14 L 20 14 L 20 13 L 19 13 L 19 12 L 20 12 L 20 11 L 21 11 L 21 12 L 22 12 Z - M4,2C2.89,2 2,2.89 2,4V14H4V4H14V2H4M8,6C6.89,6 6,6.89 6,8V18H8V8H18V6H8M12,10C10.89,10 10,10.89 10,12V20C10,21.11 10.89,22 12,22H20C21.11,22 22,21.11 22,20V12C22,10.89 21.11,10 20,10H12Z - M14.46,15.88L15.88,14.46L18,16.59L20.12,14.46L21.54,15.88L19.41,18L21.54,20.12L20.12,21.54L18,19.41L15.88,21.54L14.46,20.12L16.59,18L14.46,15.88M12,17V15H7V17H12M17,11H7V13H14.69C13.07,14.07 12,15.91 12,18C12,19.09 12.29,20.12 12.8,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19A2,2 0 0,1 21,5V12.8C20.12,12.29 19.09,12 18,12L17,12.08V11M17,9V7H7V9H17Z - M18,11a1,1,0,0,1-1,1,5,5,0,0,0-5,5,1,1,0,0,1-2,0,5,5,0,0,0-5-5,1,1,0,0,1,0-2,5,5,0,0,0,5-5,1,1,0,0,1,2,0,5,5,0,0,0,5,5A1,1,0,0,1,18,11Z M19,24a1,1,0,0,1-1,1,2,2,0,0,0-2,2,1,1,0,0,1-2,0,2,2,0,0,0-2-2,1,1,0,0,1,0-2,2,2,0,0,0,2-2,1,1,0,0,1,2,0,2,2,0,0,0,2,2A1,1,0,0,1,19,24Z M28,17a1,1,0,0,1-1,1,4,4,0,0,0-4,4,1,1,0,0,1-2,0,4,4,0,0,0-4-4,1,1,0,0,1,0-2,4,4,0,0,0,4-4,1,1,0,0,1,2,0,4,4,0,0,0,4,4A1,1,0,0,1,28,17Z - M24.965,14.125c1.913,2.718,2.076,2.976,2.092,3.345c0.646,0.529,1.002,1.082,1.002,1.621 c0,2.141-5.571,4.535-13.03,4.535c-7.457,0-13.03-2.396-13.03-4.535c0-0.859,0.912-1.76,2.475-2.529 c0.373-0.715,0.843-1.61,1.429-2.721C2.456,14.931,0,16.703,0,19.091c0,4.244,7.743,6.535,15.029,6.535 c7.287,0,15.03-2.291,15.03-6.535C30.059,16.896,27.977,15.228,24.965,14.125z M12.849,20.742c4.61,0,8.348-0.45,8.348-1.01c0-0.029-0.442-0.652-0.855-1.229c2.933-0.05,5.217-0.445,5.217-0.927 c0-0.013-5.186-7.367-6.614-9.396c-0.082-0.117-0.218-0.187-0.36-0.188c-0.144,0-0.279,0.07-0.362,0.187l-1.804,2.551 L13.24,4.668c-0.078-0.145-0.228-0.236-0.392-0.236c-0.165,0-0.315,0.091-0.393,0.236C10.802,7.788,4.5,19.685,4.5,19.731 C4.499,20.291,8.236,20.742,12.849,20.742z + M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 + 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z + M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 + 0,0 20,20V8L14,2H6Z + + M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 + 20,20V8L14,2M10,19H7V17H10V19M10,16H7V14H10V16M10,13H7V11H10V13M14,19H11V17H14V19M14,16H11V14H14V16M14,13H11V11H14V13M13,9V3.5L18.5,9H13Z + M15,19L9,16.89V5L15,7.11M20.5,3C20.44,3 20.39,3 + 20.34,3L15,5.1L9,3L3.36,4.9C3.15,4.97 3,5.15 3,5.38V20.5A0.5,0.5 0 0,0 3.5,21C3.55,21 + 3.61,21 3.66,20.97L9,18.9L15,21L20.64,19.1C20.85,19 21,18.85 21,18.62V3.5A0.5,0.5 0 0,0 + 20.5,3Z + M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0 + 10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2 + 3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19 + 13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z + M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 + 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 + 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 + 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 + 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 + 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 + 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 + 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 + 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 + 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 + 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 + 21.73,14.78 21.54,14.63L19.43,12.97Z + M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 + 20,20V8L14,2M13,13H11V18A2,2 0 0,1 9,20A2,2 0 0,1 7,18A2,2 0 0,1 9,16C9.4,16 9.7,16.1 + 10,16.3V11H13V13M13,9V3.5L18.5,9H13Z + M5.206,19.956l0.199,42.771c0.003,0.55,0.306,1.054,0.789,1.314l34.161,17.887c0.223,0.119,0.467,0.179,0.711,0.179 + c0.001,0,0.002,0,0.003,0c0.103,0.117,0.218,0.227,0.355,0.309c0.236,0.141,0.502,0.212,0.769,0.212 + c0.246,0,0.49-0.061,0.712-0.181l33.729-18.292c0.484-0.263,0.787-0.77,0.787-1.319v-44.5c0-0.013-0.005-0.025-0.005-0.039 + c-0.001-0.011,0.003-0.021,0.003-0.033c-0.002-0.043-0.019-0.082-0.022-0.124c-0.013-0.082-0.022-0.164-0.047-0.243 + c-0.018-0.055-0.041-0.104-0.064-0.157c-0.031-0.07-0.062-0.139-0.104-0.203c-0.031-0.05-0.068-0.095-0.105-0.141 + c-0.047-0.058-0.096-0.112-0.152-0.163c-0.044-0.04-0.091-0.076-0.141-0.111c-0.032-0.022-0.059-0.053-0.094-0.073 + c-0.032-0.02-0.069-0.028-0.104-0.045c-0.029-0.015-0.052-0.036-0.081-0.049L41.747,0.118c-0.405-0.171-0.864-0.155-1.258,0.042 + L6.131,18.071c-0.504,0.254-0.822,0.77-0.825,1.333c0,0.009,0.004,0.017,0.004,0.025C5.249,19.596,5.205,19.772,5.206,19.956z + M72.456,18.501l-30.28,16.93L10.111,19.425L41.218,3.151L72.456,18.501z + M43.692,78.61V38.021l30.729-17.173v41.09L43.692,78.61z + M 299.53 18.813 C 279.92 19.169 258.693 28.151 241.78 + 45.063 C 219.82 67.023 211.263 96.303 217.562 119.813 C 154.784 90.813 159.904 88.397 97.282 + 48.219 C 87.209 41.756 77.84 38.799 69.469 38.405 C 55.515 37.751 44.351 44.21 37.343 53.343 + C 26.13 67.956 24.96 89.496 48.28 107.75 C 79.307 132.036 107.123 148.79 127.312 167.22 C + 147.502 185.647 159.96 207.81 155.656 237.25 C 152.498 258.86 141.966 275.248 129.186 288.72 + C 116.408 302.19 101.44 313.206 87.75 325.406 C 60.37 349.806 37.42 377.159 42.687 439.656 C + 46.015 479.139 76.845 494.773 102.344 492.031 C 115.094 490.661 125.854 484.695 131.75 + 474.564 C 137.647 464.432 139.446 449.126 130.72 426.814 C 123.125 407.398 133.822 385.978 + 149.063 369.72 C 164.303 353.46 185.893 340.9 207.938 344.72 C 214.113 345.79 219.358 349.44 + 222.968 353.875 C 226.578 358.31 228.964 363.495 230.938 369.125 C 234.884 380.385 237.208 + 393.799 240.063 407.688 C 245.773 435.465 253.725 463.655 273.125 476.156 C 311.089 500.624 + 348.383 493.578 365.031 476.626 C 373.356 468.148 376.946 457.766 374.157 445.469 C 371.369 + 433.169 361.449 418.311 339.877 403.624 C 316.212 387.514 307.221 355.334 306.032 323.499 C + 304.844 291.663 311.32 259.422 326.158 239.469 C 333.036 230.219 343.704 226.351 355.814 + 222.062 C 367.924 217.772 382.021 213.587 396.564 207.374 C 425.651 194.949 456.2 175.177 + 475.689 130.594 C 492.767 91.524 479.063 66.276 460.409 57.094 C 451.081 52.501 440.279 + 51.962 429.971 56.468 C 419.661 60.972 409.541 70.654 402.531 88.218 C 389.391 121.15 + 363.313 139.925 332.095 144.654 C 325.881 145.596 319.481 146.01 312.907 145.967 C 312.461 + 145.687 312.012 145.397 311.563 145.122 C 317.666 141.304 323.317 136.807 328.407 131.716 C + 358.471 101.651 363.457 57.86 339.532 33.934 C 329.066 23.466 314.788 18.531 299.532 18.808 + L 299.53 18.813 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 + 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C + 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 L + 297.188 37.969 Z M 65.03 62.593 L 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.032 + 62.593 L 65.03 62.593 Z M 439.095 85.03 L 455.189 94.53 L 418.814 156.125 L 405.782 141.469 + L 439.096 85.029 L 439.095 85.03 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969 + 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 L 142.875 119.062 Z M + 214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 + 146.615 309.845 166.625 C 309.415 199.908 248.937 315.907 248.937 315.907 C 221.243 316.177 + 195.231 314.66 170.907 301.407 C 170.907 301.407 212.624 138.975 214.813 138.938 L 214.815 + 138.938 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132 + 181.234 328.375 174.22 L 389.469 151.188 L 389.47 151.188 Z M 149.125 302.218 L 161.781 + 315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 L 149.125 302.218 Z M 260.281 + 324.844 L 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 L 260.281 + 324.844 Z M 83.281 375.969 L 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 + 375.968 L 83.281 375.969 Z M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 + 397.468 L 292.845 390.154 L 292.845 390.155 Z + M1.5,7.23 V22.5 H19.64 A2.87,2.87 0 0 0 19.64,16.77 H17.73 V7.23 + Z M17.73,1.5 V16.77 H19.64 A2.88,2.88 0 0 1 21.64,17.61 A2.85,2.85 0 0 1 22.48,19.68 V4.36 + A2.87,2.87 0 0 0 19.64,1.5 Z M13.91,18.68 L5.32,18.68 L5.32,10.09 M7.23,12 L5.32,12 + M7.23,14.86 L5.32,14.86 M9.14,16.77 L9.14,18.68 M12,16.77 L12,18.68 + M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 + 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 + 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 + 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 + 1.238-10.799 1.87-16.189l22.134 3.278 + 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 + 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 + 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 + 7.67 1.12 15.341 2.244 23.012 + 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 + 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 + 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 + 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 + 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 + 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 + 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 + 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 + 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 + 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 + 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 + 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 + 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 + 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 + 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z + M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 + 397.468 L 292.845 390.154 Z M 83.282 375.968 L 83.282 375.969 L 83.281 375.969 Z M 102.221 + 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.969 Z M 283.314 373.874 L 266.064 + 381.124 L 243.344 332.781 L 260.282 324.845 Z M 149.125 302.218 L 161.781 315.968 L 109.471 + 364.125 L 88.501 358.031 L 149.126 302.221 Z M 389.47 151.188 L 402.75 166.156 L 326.937 + 194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 Z M 214.815 138.938 + C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845 + 166.625 C 309.415 199.908 304.967 225.572 288.565 252.875 C 274.021 243.958 258.239 236.19 + 241.907 230.781 L 226.437 277.031 L 256.157 282.939 L 248.937 315.907 C 221.243 316.177 + 195.231 314.66 170.907 301.407 L 178.345 267.501 L 207.97 273.376 L 223.844 225.876 C + 210.907 223.124 197.794 222.041 184.781 223.188 C 186.441 189.978 193.497 165.248 208.281 + 139.158 C 210.449 139.088 212.624 138.975 214.813 138.938 Z M 142.875 119.062 L 182.815 + 148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 + 119.063 Z M 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.095 85.03 Z M 65.032 + 62.593 L 65.031 62.594 L 65.03 62.593 Z M 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L + 65.031 62.594 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 + 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C + 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 Z + + M129.593,64.314c23.543-30.833,44.788-45.063,54.751-45.063c1.37,0,2.507,0.258,3.386,0.775c5.324,3.076,6.332,16.619,2.766,34.505c5.686,1.086,11.14,2.326,16.335,3.722c5.583-26.958,1.861-45.619-10.649-52.856c-12.716-7.34-30.498-1.318-51.434,17.42c-12.018,10.754-24.622,25.416-36.339,42.062c-11.687,0.676-23.237,1.953-34.188,3.813c-7.913-26.6-7.343-44.886-0.783-48.667c0.879-0.517,2.016-0.775,3.386-0.775c7.289,0,19.255,7.237,32.023,19.385c3.618-4.471,7.263-8.736,10.907-12.742C97.657,5.036,78.246-2.253,65.013,5.397C52.297,12.712,48.626,31.114,54.39,58.64c0.901,4.301,2.036,8.788,3.376,13.409C25.626,79.809,2,93.278,2,111.935c0,15.378,16.231,28.637,45.696,37.322l1.241,0.362l0.362-1.215c1.344-4.42,2.869-8.917,4.523-13.388l0.465-1.292l-1.318-0.388c-20.392-5.97-34.065-14.577-34.065-21.4c0-7.721,16.139-17.594,44.084-24.042c3.821,10.43,8.516,21.254,13.893,32.034c-8.08,17.761-14.137,35.252-17.321,50.473c-5.764,27.5-2.094,45.903,10.623,53.217c3.463,2.016,7.366,3.024,11.605,3.024c10.571,0,23.468-6.384,37.606-18.532c-3.851-3.929-7.625-8.064-11.295-12.38c-10.519,8.891-19.979,14.06-26.105,14.06c-1.344,0-2.481-0.259-3.386-0.776c-8.213-4.751-7.064-32.19,8.403-70.244c24.572,42.417,63.859,87.871,92.371,87.871c4.239,0,8.141-1.008,11.605-3.024h0.026c26.285-15.146,10.054-73.998-16.516-123.493c-6.306-1.008-13.207-1.835-20.729-2.43l0.853,1.447c33.316,57.689,38.795,103.592,27.94,109.872c-0.905,0.517-2.042,0.776-3.386,0.776c-13.13,0-45.98-24.787-77.797-79.891c-2.015-3.492-3.924-6.939-5.738-10.338c3.243-6.601,6.866-13.421,10.907-20.419c3.659-6.338,7.331-12.256,10.986-17.8c3.423-0.101,6.903-0.163,10.466-0.163c66.606,0,109.122,18.222,109.122,30.757c0,6.436-12.199,14.448-30.731,20.367c2.042,5.324,3.903,10.623,5.531,15.843c27.164-8.684,42.078-21.452,42.078-36.21C254,81.266,190.199,64.601,129.593,64.314z + M91.919,90.689c-1.915,3.32-3.771,6.67-5.566,10.036c-2.506-5.53-4.744-10.887-6.695-16.017c5.395-0.837,11.099-1.547,17.094-2.107C95.11,85.272,93.492,87.964,91.919,90.689z + M111.783,114.85c0,10.231,8.324,18.555,18.555,18.555c10.231,0,18.555-8.324,18.555-18.555s-8.324-18.555-18.555-18.555C120.107,96.294,111.783,104.618,111.783,114.85z + M11 1H3C1.9 1 1 1.9 1 3V15L4 12H9V11C9 8.8 10.79 7 13 7V3C13 1.9 + 12.1 1 11 1M11 4L9.5 4C9.16 5.19 8.54 6.3 7.68 7.26L7.66 7.28L8.92 8.53L8.55 9.54L7 8L4.5 + 10.5L3.81 9.77L6.34 7.28C5.72 6.59 5.22 5.82 4.86 5H5.85C6.16 5.6 6.54 6.17 7 6.68C7.72 5.88 + 8.24 4.97 8.57 4L3 4V3H6.5V2H7.5V3H11V4M21 9H13C11.9 9 11 9.9 11 11V18C11 19.1 11.9 20 13 + 20H20L23 23V11C23 9.9 22.1 9 21 9M19.63 19L18.78 16.75H15.22L14.38 19H12.88L16.25 + 10H17.75L21.13 19H19.63M17 12L18.22 15.25H15.79L17 12Z + M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 + 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z + M10.5,5A8.5,8.5 0 0,0 2,13.5A8.5,8.5 0 0,0 10.5,22A8.5,8.5 0 0,0 + 19,13.5A8.5,8.5 0 0,0 10.5,5M13.5,13A2.5,2.5 0 0,1 11,10.5A2.5,2.5 0 0,1 13.5,8A2.5,2.5 0 + 0,1 16,10.5A2.5,2.5 0 0,1 13.5,13M19.5,2A2.5,2.5 0 0,0 17,4.5A2.5,2.5 0 0,0 19.5,7A2.5,2.5 0 + 0,0 22,4.5A2.5,2.5 0 0,0 19.5,2 + M5,3H7V5H5V10A2,2 0 0,1 3,12A2,2 0 0,1 5,14V19H7V21H5C3.93,20.73 + 3,20.1 3,19V15A2,2 0 0,0 1,13H0V11H1A2,2 0 0,0 3,9V5A2,2 0 0,1 5,3M19,3A2,2 0 0,1 21,5V9A2,2 + 0 0,0 23,11H24V13H23A2,2 0 0,0 21,15V19A2,2 0 0,1 19,21H17V19H19V14A2,2 0 0,1 21,12A2,2 0 + 0,1 19,10V5H17V3H19M12,15A1,1 0 0,1 13,16A1,1 0 0,1 12,17A1,1 0 0,1 11,16A1,1 0 0,1 + 12,15M8,15A1,1 0 0,1 9,16A1,1 0 0,1 8,17A1,1 0 0,1 7,16A1,1 0 0,1 8,15M16,15A1,1 0 0,1 + 17,16A1,1 0 0,1 16,17A1,1 0 0,1 15,16A1,1 0 0,1 16,15Z + M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 + 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z + M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 + 4,21.1 4,20V4C4,2.89 4.89,2 6,2M6,20H15L18,20V12L14,16L12,14L6,20M8,9A2,2 0 0,0 6,11A2,2 0 + 0,0 8,13A2,2 0 0,0 10,11A2,2 0 0,0 8,9Z + M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 + 32-32V32a32 32 0 0 0-32-32M232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 + 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 + 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 + 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 + 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32M96 224a32 32 0 1 1-32 32a32 32 0 0 1 + 32-32m288 224H64v-32l64-64l32 32l128-128l96 96z + M 21.955078 6.001953 L 13.535156 1.269531 C 12.896484 0.912109 + 12.103516 0.912109 11.464844 1.269531 L 3.044922 6.001953 C 2.400391 6.363281 2 7.041016 2 + 7.767578 L 2 17.232422 C 2 17.958984 2.400391 18.636719 3.044922 18.998047 L 11.464844 + 23.730469 C 11.785156 23.910156 12.142578 24 12.5 24 C 12.857422 24 13.214844 23.910156 + 13.535156 23.730469 L 21.955078 18.998047 C 22.599609 18.636719 23 17.958984 23 17.232422 L + 23 7.767578 C 23 7.041016 22.599609 6.363281 21.955078 6.001953 Z M 12.5 18.5 C 9.191406 + 18.5 6.5 15.808594 6.5 12.5 C 6.5 9.191406 9.191406 6.5 12.5 6.5 C 14.390625 6.5 16.136719 + 7.376953 17.271484 8.871094 L 15.080078 10.138672 C 14.421875 9.417969 13.486328 9 12.5 9 C + 10.570313 9 9 10.570313 9 12.5 C 9 14.429688 10.570313 16 12.5 16 C 13.486328 16 14.421875 + 15.582031 15.080078 14.861328 L 17.271484 16.128906 C 16.136719 17.623047 14.390625 18.5 + 12.5 18.5 Z M 18.5 13 L 17.5 13 L 17.5 14 L 16.5 14 L 16.5 13 L 15.5 13 L 15.5 12 L 16.5 12 + L 16.5 11 L 17.5 11 L 17.5 12 L 18.5 12 Z M 22 13 L 21 13 L 21 14 L 20 14 L 20 13 L 19 13 L + 19 12 L 20 12 L 20 11 L 21 11 L 21 12 L 22 12 Z + M4,2C2.89,2 2,2.89 2,4V14H4V4H14V2H4M8,6C6.89,6 6,6.89 + 6,8V18H8V8H18V6H8M12,10C10.89,10 10,10.89 10,12V20C10,21.11 10.89,22 12,22H20C21.11,22 + 22,21.11 22,20V12C22,10.89 21.11,10 20,10H12Z + M14.46,15.88L15.88,14.46L18,16.59L20.12,14.46L21.54,15.88L19.41,18L21.54,20.12L20.12,21.54L18,19.41L15.88,21.54L14.46,20.12L16.59,18L14.46,15.88M12,17V15H7V17H12M17,11H7V13H14.69C13.07,14.07 + 12,15.91 12,18C12,19.09 12.29,20.12 12.8,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19A2,2 + 0 0,1 21,5V12.8C20.12,12.29 19.09,12 18,12L17,12.08V11M17,9V7H7V9H17Z + + M18,11a1,1,0,0,1-1,1,5,5,0,0,0-5,5,1,1,0,0,1-2,0,5,5,0,0,0-5-5,1,1,0,0,1,0-2,5,5,0,0,0,5-5,1,1,0,0,1,2,0,5,5,0,0,0,5,5A1,1,0,0,1,18,11Z + M19,24a1,1,0,0,1-1,1,2,2,0,0,0-2,2,1,1,0,0,1-2,0,2,2,0,0,0-2-2,1,1,0,0,1,0-2,2,2,0,0,0,2-2,1,1,0,0,1,2,0,2,2,0,0,0,2,2A1,1,0,0,1,19,24Z + M28,17a1,1,0,0,1-1,1,4,4,0,0,0-4,4,1,1,0,0,1-2,0,4,4,0,0,0-4-4,1,1,0,0,1,0-2,4,4,0,0,0,4-4,1,1,0,0,1,2,0,4,4,0,0,0,4,4A1,1,0,0,1,28,17Z + M24.965,14.125c1.913,2.718,2.076,2.976,2.092,3.345c0.646,0.529,1.002,1.082,1.002,1.621 + c0,2.141-5.571,4.535-13.03,4.535c-7.457,0-13.03-2.396-13.03-4.535c0-0.859,0.912-1.76,2.475-2.529 + c0.373-0.715,0.843-1.61,1.429-2.721C2.456,14.931,0,16.703,0,19.091c0,4.244,7.743,6.535,15.029,6.535 + c7.287,0,15.03-2.291,15.03-6.535C30.059,16.896,27.977,15.228,24.965,14.125z + M12.849,20.742c4.61,0,8.348-0.45,8.348-1.01c0-0.029-0.442-0.652-0.855-1.229c2.933-0.05,5.217-0.445,5.217-0.927 + c0-0.013-5.186-7.367-6.614-9.396c-0.082-0.117-0.218-0.187-0.36-0.188c-0.144,0-0.279,0.07-0.362,0.187l-1.804,2.551 + L13.24,4.668c-0.078-0.145-0.228-0.236-0.392-0.236c-0.165,0-0.315,0.091-0.393,0.236C10.802,7.788,4.5,19.685,4.5,19.731 + C4.499,20.291,8.236,20.742,12.849,20.742z M 0 0 L 191 380 L 381 0 L 227 0 L 298 52 L 204 238 L 85 1 Z - M9.96,11.31C10.82,8.1 11.5,6 13,6C14.5,6 15.18,8.1 16.04,11.31C17,14.92 18.1,19 22,19V17C19.8,17 19,14.54 17.97,10.8C17.08,7.46 16.15,4 13,4C9.85,4 8.92,7.46 8.03,10.8C7.03,14.54 6.2,17 4,17V2H2V22H22V20H4V19C7.9,19 9,14.92 9.96,11.31Z - M15.6,5.29C14.5,5.19 13.53,6 13.43,7.11L13.18,10H16V12H13L12.56,17.07C12.37,19.27 10.43,20.9 8.23,20.7C6.92,20.59 5.82,19.86 5.17,18.83L6.67,17.33C6.91,18.07 7.57,18.64 8.4,18.71C9.5,18.81 10.47,18 10.57,16.89L11,12H8V10H11.17L11.44,6.93C11.63,4.73 13.57,3.1 15.77,3.3C17.08,3.41 18.18,4.14 18.83,5.17L17.33,6.67C17.09,5.93 16.43,5.36 15.6,5.29Z - M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M350 153.5c-13.2-1.2-25.8 8.4-27 21.2l-3 34.8h36v24h-36l-5.3 60.8c-2.3 26.4-25.6 45.9-52 43.4-15.7-1.3-28.9-10.1-36.7-22.4l18-18c2.9 8.9 10.8 15.7 20.7 16.5 13.2 1.2 25.8-8.4 27-21.2l5.2-58.9h-36v-24h38l3.3-36.8c2.3-26.4 25.6-45.9 52-43.4 15.7 1.3 28.9 10.1 36.7 22.4l-18 18c-2.9-8.9-10.8-15.7-20.7-16.5z - M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z - M60.131 21.423H35.659l24.279-2.656l1.878-.206l-.224-1.876l-1.53-12.849l-.183-1.524l-1.527-.12l-2.22-.173L55.888 2l-.24.044l-51.923 9.565L2 11.927l.207 1.744l.404 3.397v16.381l.477.029v16.524l1.473.32l52.982 11.516l.746.162l.646-.408l2.191-1.383l.874-.55V21.423h-1.869M55.985 3.884l2.22.174l1.37 11.494l-1.739-2.536l-6.791-8.222l4.94-.91M42.58 6.354l9.299 11.413l-8.489.929l-8.431-10.938l7.621-1.404M28.059 9.029l7.692 10.503l-6.908.756l-7.046-10.105l6.262-1.154m-11.981 2.206l6.482 9.74l-5.731.626l-5.988-9.401l5.237-.965m-5.461 15.844l-2.77-3.601l.096-.184h4.72l-2.046 3.785m1.064 3.165c0 .55-.393.973-.874.946c-.479-.027-.863-.488-.863-1.029s.385-.965.863-.945c.481.018.874.479.874 1.028M4.516 17.246l-.453-3.797l1.961-.361l5.554 9.089l-1.146.125l-2.766.303l-.588-1l-2.562-4.359M6.474 22.8c0 .525-.359.952-.799.957c-.437.002-.787-.414-.787-.931c0-.519.351-.945.787-.957c.439-.011.799.406.799.931m-.799 6.213c.439.018.799.457.799.982c0 .525-.359.929-.799.903c-.437-.024-.787-.463-.787-.98c0-.518.35-.922.787-.905m54.456 15.454l-1.867.482l-43.419-5.381v4.129l43.419 6.875l1.867-.797v1.365l-1.867.814l-53.307-8.87v-.948l8.956 1.414v-4.098l-8.956-1.11v-.948l53.307 6.174l1.867-.468v1.367m0-8.235l-1.867.311l-53.307-3.89v-.923l9.713.62l-1.161-1.51l4.27-7.546h5.096l-5.473 9.183l5.727.369l6.006-9.552h6.882l-6.614 9.957l6.905.445l7.319-10.402h8.458L43.94 34.189l8.485.547l5.937-7.888l1.769-3.007v12.391 - M19 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.89 21 5 21H19C20.11 21 21 20.11 21 19V5C21 3.89 20.11 3 19 3M8 15H6.5L6 13L5.5 15H4L4.75 12L4 9H5.5L6 11L6.5 9H8L7.25 12L8 15M15.5 15H14V10.5H13V14H11.5V10.5H10.5V15H9V11C9 9.9 9.9 9 11 9H13.5C14.61 9 15.5 9.9 15.5 11V15M20 15H17V9H18.5V13.5H20V15Z - m397.529,58.225c-37.359,0-72.27,11.235-100.957,32.49-25.401,18.819-44.228,44.84-51.653,71.391-8.498,30.386-1.593,57.841 18.431,75.96-6.892,12.102-13.298,24.592-18.372,36.707-4.66-11.592-10.865-21.973-17.882-31.224 9.949-15.808 11.327-35.12 3.511-54.911-7.36-18.635-22.266-35.818-41.974-48.386-21.258-13.556-46.288-20.721-72.383-20.721-33.485,0-67.836,12.078-99.338,34.928l-16.912,12.268 20.162,5.478c33.26,9.036 59.805,34.679 83.225,57.303 23.91,23.098 46.495,44.914 72.659,44.921 0.004,0 0.008,0 0.012,0 12.875,0 25.18-5.146 37.498-15.667 11.82,16.664 20.228,37.094 20.228,61.938v127h20c0,0 0.018-122.778 0.018-129.384 0-15.96 9.362-39.486 26.042-68.882 12.387,6.689 23.962,9.954 35.235,9.954 36.76,0 60.665-35.173 85.974-72.41 22.59-33.238 48.194-70.911 86.29-90.421l18.581-9.516-19.061-8.516c-30.153-13.47-60.209-20.3-89.334-20.3zm-221.471,196.203c-0.002,0-0.004,0-0.007,0-18.085-0.005-36.938-18.218-58.768-39.306-20.663-19.961-43.588-42.108-72.305-55.135 23.345-13.586 47.248-20.456 71.272-20.456 48.227,0 84.676,28.4 95.755,56.453 2.869,7.266 5.835,19.295 0.99,31.335-17.942-18.216-37.69-30.663-49.979-38.408-3.594-2.266-6.698-4.222-8.771-5.695l-11.59,16.299c2.526,1.797 5.85,3.892 9.697,6.316 12.659,7.979 31.868,20.09 48.451,37.523-8.638,7.436-16.76,11.074-24.745,11.074zm208.452-78.693c-23.213,34.155-43.261,63.652-69.432,63.652-7.676,0-15.897-2.358-24.996-7.165 0.894-1.439 1.797-2.886 2.722-4.348 19.815-31.329 39.938-56.696 40.139-56.949l-15.649-12.454c-1.715,2.155-22.828,28.846-43.394,61.905-12.095-13.03-15.666-31.622-9.72-52.884 6.252-22.354 22.397-44.482 44.298-60.708 17.584-13.028 47.309-28.56 89.051-28.56 20.458,0 41.53,3.779 62.861,11.258-32.716,22.745-55.46,56.209-75.88,86.253z - M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M341 395l-36 -40 -45 20 3 -13 24 -11c5,-2 9,-4 11,-5 -2,-2 -5,-5 -8,-8l-19 -21 2 -12 33 36 49 -22 -3 13 -33 15c-2,1 -4,2 -6,2 2,2 4,4 5,5l24 26 -3 13zm-15 -177l-10 54 -9 -2 10 -54 9 2zm25 5l-10 54 -9 -2 10 -54 9 2zm39 -76l-2 10 -64 -12c2,3 4,6 5,11 2,4 3,8 3,12l-10 -2c-2,-6 -4,-12 -7,-17 -3,-5 -6,-9 -9,-11l1 -6 82 16z - M4,3C2.89,3 2,3.89 2,5V15A2,2 0 0,0 4,17H12V22L15,19L18,22V17H20A2,2 0 0,0 22,15V8L22,6V5A2,2 0 0,0 20,3H16V3H4M12,5L15,7L18,5V8.5L21,10L18,11.5V15L15,13L12,15V11.5L9,10L12,8.5V5M4,5H9V7H4V5M4,9H7V11H4V9M4,13H9V15H4V13Z - M289.718,1208.22 L283.795,1202.28 C283.404,1201.89 282.768,1201.89 282.376,1202.28 C281.984,1202.68 282,1203.35 282,1204 L282,1207 L266,1207 L266,1204 C266,1203.35 266.016,1202.68 265.624,1202.28 C265.232,1201.89 264.597,1201.89 264.205,1202.28 L258.282,1208.22 C258.073,1208.43 257.983,1208.71 257.998,1208.98 C257.983,1209.26 258.073,1209.54 258.282,1209.75 L264.205,1215.69 C264.597,1216.08 265.232,1216.08 265.624,1215.69 C266.016,1215.29 266,1214.39 266,1214 L266,1211 L282,1211 L282,1214 C282,1214.65 281.984,1215.29 282.376,1215.69 C282.768,1216.08 283.404,1216.08 283.795,1215.69 L289.718,1209.75 C289.927,1209.54 290.017,1209.26 290.002,1208.98 C290.017,1208.71 289.927,1208.43 289.718,1208.22 - M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M6.12,15.5L9.86,19.24L11.28,17.83L8.95,15.5L11.28,13.17L9.86,11.76L6.12,15.5M17.28,15.5L13.54,11.76L12.12,13.17L14.45,15.5L12.12,17.83L13.54,19.24L17.28,15.5Z - M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z - M12,17.56L16.07,16.43L16.62,10.33H9.38L9.2,8.3H16.8L17,6.31H7L7.56,12.32H14.45L14.22,14.9L12,15.5L9.78,14.9L9.64,13.24H7.64L7.93,16.43L12,17.56M4.07,3H19.93L18.5,19.2L12,21L5.5,19.2L4.07,3Z - M3,3H21V21H3V3M7.73,18.04C8.13,18.89 8.92,19.59 10.27,19.59C11.77,19.59 12.8,18.79 12.8,17.04V11.26H11.1V17C11.1,17.86 10.75,18.08 10.2,18.08C9.62,18.08 9.38,17.68 9.11,17.21L7.73,18.04M13.71,17.86C14.21,18.84 15.22,19.59 16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19 17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64 16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17 16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43 16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09 16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86Z - M5,3L4.35,6.34H17.94L17.5,8.5H3.92L3.26,11.83H16.85L16.09,15.64L10.61,17.45L5.86,15.64L6.19,14H2.85L2.06,18L9.91,21L18.96,18L20.16,11.97L20.4,10.76L21.94,3H5Z - M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V8L14 2M15 16L13 20H10L12 16H9V11H15V16M13 9V3.5L18.5 9H13Z - M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z - + M9.96,11.31C10.82,8.1 11.5,6 13,6C14.5,6 15.18,8.1 + 16.04,11.31C17,14.92 18.1,19 22,19V17C19.8,17 19,14.54 17.97,10.8C17.08,7.46 16.15,4 + 13,4C9.85,4 8.92,7.46 8.03,10.8C7.03,14.54 6.2,17 4,17V2H2V22H22V20H4V19C7.9,19 9,14.92 + 9.96,11.31Z + M15.6,5.29C14.5,5.19 13.53,6 + 13.43,7.11L13.18,10H16V12H13L12.56,17.07C12.37,19.27 10.43,20.9 8.23,20.7C6.92,20.59 + 5.82,19.86 5.17,18.83L6.67,17.33C6.91,18.07 7.57,18.64 8.4,18.71C9.5,18.81 10.47,18 + 10.57,16.89L11,12H8V10H11.17L11.44,6.93C11.63,4.73 13.57,3.1 15.77,3.3C17.08,3.41 18.18,4.14 + 18.83,5.17L17.33,6.67C17.09,5.93 16.43,5.36 15.6,5.29Z + M165.446 34.793c-23.17.023-45.634 12.97-54.612 + 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 + 181.723-29.213 + 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 + 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 + 1.238-10.799 1.87-16.189l22.134 3.278 + 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 + 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 + 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 + 7.67 1.12 15.341 2.244 23.012 + 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 + 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 + 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 + 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 + 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 + 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 + 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 + 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 + 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 + 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 + 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 + 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 + 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 + 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 + 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M350 153.5c-13.2-1.2-25.8 8.4-27 + 21.2l-3 34.8h36v24h-36l-5.3 60.8c-2.3 26.4-25.6 45.9-52 + 43.4-15.7-1.3-28.9-10.1-36.7-22.4l18-18c2.9 8.9 10.8 15.7 20.7 16.5 13.2 1.2 25.8-8.4 + 27-21.2l5.2-58.9h-36v-24h38l3.3-36.8c2.3-26.4 25.6-45.9 52-43.4 15.7 1.3 28.9 10.1 36.7 + 22.4l-18 18c-2.9-8.9-10.8-15.7-20.7-16.5z + M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 + 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z + M60.131 + 21.423H35.659l24.279-2.656l1.878-.206l-.224-1.876l-1.53-12.849l-.183-1.524l-1.527-.12l-2.22-.173L55.888 + 2l-.24.044l-51.923 9.565L2 11.927l.207 1.744l.404 + 3.397v16.381l.477.029v16.524l1.473.32l52.982 + 11.516l.746.162l.646-.408l2.191-1.383l.874-.55V21.423h-1.869M55.985 3.884l2.22.174l1.37 + 11.494l-1.739-2.536l-6.791-8.222l4.94-.91M42.58 6.354l9.299 + 11.413l-8.489.929l-8.431-10.938l7.621-1.404M28.059 9.029l7.692 + 10.503l-6.908.756l-7.046-10.105l6.262-1.154m-11.981 2.206l6.482 + 9.74l-5.731.626l-5.988-9.401l5.237-.965m-5.461 15.844l-2.77-3.601l.096-.184h4.72l-2.046 + 3.785m1.064 3.165c0 + .55-.393.973-.874.946c-.479-.027-.863-.488-.863-1.029s.385-.965.863-.945c.481.018.874.479.874 + 1.028M4.516 17.246l-.453-3.797l1.961-.361l5.554 + 9.089l-1.146.125l-2.766.303l-.588-1l-2.562-4.359M6.474 22.8c0 + .525-.359.952-.799.957c-.437.002-.787-.414-.787-.931c0-.519.351-.945.787-.957c.439-.011.799.406.799.931m-.799 + 6.213c.439.018.799.457.799.982c0 + .525-.359.929-.799.903c-.437-.024-.787-.463-.787-.98c0-.518.35-.922.787-.905m54.456 + 15.454l-1.867.482l-43.419-5.381v4.129l43.419 + 6.875l1.867-.797v1.365l-1.867.814l-53.307-8.87v-.948l8.956 + 1.414v-4.098l-8.956-1.11v-.948l53.307 + 6.174l1.867-.468v1.367m0-8.235l-1.867.311l-53.307-3.89v-.923l9.713.62l-1.161-1.51l4.27-7.546h5.096l-5.473 + 9.183l5.727.369l6.006-9.552h6.882l-6.614 9.957l6.905.445l7.319-10.402h8.458L43.94 + 34.189l8.485.547l5.937-7.888l1.769-3.007v12.391 + M19 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.89 21 5 21H19C20.11 21 21 20.11 + 21 19V5C21 3.89 20.11 3 19 3M8 15H6.5L6 13L5.5 15H4L4.75 12L4 9H5.5L6 11L6.5 9H8L7.25 12L8 + 15M15.5 15H14V10.5H13V14H11.5V10.5H10.5V15H9V11C9 9.9 9.9 9 11 9H13.5C14.61 9 15.5 9.9 15.5 + 11V15M20 15H17V9H18.5V13.5H20V15Z + m397.529,58.225c-37.359,0-72.27,11.235-100.957,32.49-25.401,18.819-44.228,44.84-51.653,71.391-8.498,30.386-1.593,57.841 + 18.431,75.96-6.892,12.102-13.298,24.592-18.372,36.707-4.66-11.592-10.865-21.973-17.882-31.224 + 9.949-15.808 11.327-35.12 + 3.511-54.911-7.36-18.635-22.266-35.818-41.974-48.386-21.258-13.556-46.288-20.721-72.383-20.721-33.485,0-67.836,12.078-99.338,34.928l-16.912,12.268 + 20.162,5.478c33.26,9.036 59.805,34.679 83.225,57.303 23.91,23.098 46.495,44.914 + 72.659,44.921 0.004,0 0.008,0 0.012,0 12.875,0 25.18-5.146 37.498-15.667 11.82,16.664 + 20.228,37.094 20.228,61.938v127h20c0,0 0.018-122.778 0.018-129.384 0-15.96 9.362-39.486 + 26.042-68.882 12.387,6.689 23.962,9.954 35.235,9.954 36.76,0 60.665-35.173 85.974-72.41 + 22.59-33.238 48.194-70.911 + 86.29-90.421l18.581-9.516-19.061-8.516c-30.153-13.47-60.209-20.3-89.334-20.3zm-221.471,196.203c-0.002,0-0.004,0-0.007,0-18.085-0.005-36.938-18.218-58.768-39.306-20.663-19.961-43.588-42.108-72.305-55.135 + 23.345-13.586 47.248-20.456 71.272-20.456 48.227,0 84.676,28.4 95.755,56.453 2.869,7.266 + 5.835,19.295 + 0.99,31.335-17.942-18.216-37.69-30.663-49.979-38.408-3.594-2.266-6.698-4.222-8.771-5.695l-11.59,16.299c2.526,1.797 + 5.85,3.892 9.697,6.316 12.659,7.979 31.868,20.09 + 48.451,37.523-8.638,7.436-16.76,11.074-24.745,11.074zm208.452-78.693c-23.213,34.155-43.261,63.652-69.432,63.652-7.676,0-15.897-2.358-24.996-7.165 + 0.894-1.439 1.797-2.886 2.722-4.348 19.815-31.329 39.938-56.696 + 40.139-56.949l-15.649-12.454c-1.715,2.155-22.828,28.846-43.394,61.905-12.095-13.03-15.666-31.622-9.72-52.884 + 6.252-22.354 22.397-44.482 44.298-60.708 17.584-13.028 47.309-28.56 89.051-28.56 20.458,0 + 41.53,3.779 62.861,11.258-32.716,22.745-55.46,56.209-75.88,86.253z + M165.446 34.793c-23.17.023-45.634 12.97-54.612 + 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 + 181.723-29.213 + 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 + 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 + 1.238-10.799 1.87-16.189l22.134 3.278 + 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 + 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 + 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 + 7.67 1.12 15.341 2.244 23.012 + 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 + 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 + 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 + 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 + 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 + 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 + 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 + 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 + 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 + 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 + 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 + 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 + 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 + 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 + 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M341 395l-36 -40 -45 20 3 -13 24 + -11c5,-2 9,-4 11,-5 -2,-2 -5,-5 -8,-8l-19 -21 2 -12 33 36 49 -22 -3 13 -33 15c-2,1 -4,2 -6,2 + 2,2 4,4 5,5l24 26 -3 13zm-15 -177l-10 54 -9 -2 10 -54 9 2zm25 5l-10 54 -9 -2 10 -54 9 2zm39 + -76l-2 10 -64 -12c2,3 4,6 5,11 2,4 3,8 3,12l-10 -2c-2,-6 -4,-12 -7,-17 -3,-5 -6,-9 -9,-11l1 + -6 82 16z + + M4,3C2.89,3 2,3.89 2,5V15A2,2 0 0,0 + 4,17H12V22L15,19L18,22V17H20A2,2 0 0,0 22,15V8L22,6V5A2,2 0 0,0 + 20,3H16V3H4M12,5L15,7L18,5V8.5L21,10L18,11.5V15L15,13L12,15V11.5L9,10L12,8.5V5M4,5H9V7H4V5M4,9H7V11H4V9M4,13H9V15H4V13Z + M289.718,1208.22 L283.795,1202.28 C283.404,1201.89 + 282.768,1201.89 282.376,1202.28 C281.984,1202.68 282,1203.35 282,1204 L282,1207 L266,1207 + L266,1204 C266,1203.35 266.016,1202.68 265.624,1202.28 C265.232,1201.89 264.597,1201.89 + 264.205,1202.28 L258.282,1208.22 C258.073,1208.43 257.983,1208.71 257.998,1208.98 + C257.983,1209.26 258.073,1209.54 258.282,1209.75 L264.205,1215.69 C264.597,1216.08 + 265.232,1216.08 265.624,1215.69 C266.016,1215.29 266,1214.39 266,1214 L266,1211 L282,1211 + L282,1214 C282,1214.65 281.984,1215.29 282.376,1215.69 C282.768,1216.08 283.404,1216.08 + 283.795,1215.69 L289.718,1209.75 C289.927,1209.54 290.017,1209.26 290.002,1208.98 + C290.017,1208.71 289.927,1208.43 289.718,1208.22 + + M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 + 4,20V4C4,2.89 4.89,2 + 6,2M6.12,15.5L9.86,19.24L11.28,17.83L8.95,15.5L11.28,13.17L9.86,11.76L6.12,15.5M17.28,15.5L13.54,11.76L12.12,13.17L14.45,15.5L12.12,17.83L13.54,19.24L17.28,15.5Z + M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 + 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 + 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 + 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 + 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 + 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 + 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z + + M12,17.56L16.07,16.43L16.62,10.33H9.38L9.2,8.3H16.8L17,6.31H7L7.56,12.32H14.45L14.22,14.9L12,15.5L9.78,14.9L9.64,13.24H7.64L7.93,16.43L12,17.56M4.07,3H19.93L18.5,19.2L12,21L5.5,19.2L4.07,3Z + M3,3H21V21H3V3M7.73,18.04C8.13,18.89 8.92,19.59 + 10.27,19.59C11.77,19.59 12.8,18.79 12.8,17.04V11.26H11.1V17C11.1,17.86 10.75,18.08 + 10.2,18.08C9.62,18.08 9.38,17.68 9.11,17.21L7.73,18.04M13.71,17.86C14.21,18.84 15.22,19.59 + 16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19 + 17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64 + 16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17 + 16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43 + 16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09 + 16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86Z + + M5,3L4.35,6.34H17.94L17.5,8.5H3.92L3.26,11.83H16.85L16.09,15.64L10.61,17.45L5.86,15.64L6.19,14H2.85L2.06,18L9.91,21L18.96,18L20.16,11.97L20.4,10.76L21.94,3H5Z + M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 + 20V8L14 2M15 16L13 20H10L12 16H9V11H15V16M13 9V3.5L18.5 9H13Z + M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 + 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 + 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 + 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 + 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 + 0,0 16.5,13Z + - M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6 ZM12,11A3,3 0 1,0 12,17A3,3 0 0,0 12,11 ZM12,12.5L14,16H13L12,14.5L11,16H10L12,12.5Z - M609 180.1c-19.4 2.3-38.2 7.8-56.5 16.8-53.8 26.5-89.2 74.9-98.7 135.1-1.1 7-1.3 133.1-1.3 739 0 693.9.1 731 1.8 741.4 12.8 79.4 70.7 137.8 149.2 150.6 11.8 2 20.6 2 563.5 2s551.7 0 563.5-2c57.2-9.3 104-43 130.8-94.1 9.1-17.2 14.6-33.9 18.4-55.4 1.6-9.4 1.8-40.6 2-554l.3-544-268.2-268.2L1345.5 179l-364.5.1c-200.5.1-367.9.5-372 1m893 378.4L1747.5 804H1256V558.5c0-135 .1-245.5.3-245.5.1 0 110.7 110.5 245.7 245.5m-792.1 532c24.5 1.3 47 2.9 49.8 3.4 7.1 1.3 12.8 5.5 22.5 16.4 6.4 7.3 9.2 11.5 13.6 20.7 9.2 19.4 21.4 47.2 44.4 101.5 27.5 65.1 39.7 92.3 55.5 124 6.9 13.7 16.1 32.9 20.5 42.5 8.2 17.9 15.4 31.9 18.3 35.5 1.5 1.8 1.5-7.2.9-109-.6-108.7-.7-111.1-2.7-116.5-3.1-8.3-10-14.5-24.7-22-10.1-5.1-11.9-6.4-10.9-7.6 1.6-2 5.8-1.8 21.3 1.1 19.3 3.6 39.1 4.5 97.7 4.5 42.1 0 51.9.3 53.4 1.4 1.8 1.3 1.8 1.4-.1 1.9-1 .3-3.9.8-6.4 1.2s-8.5 1.7-13.5 3c-4.9 1.3-12.1 2.6-16 3-7.9.8-14.3 3.2-18 6.9l-2.5 2.5v123.7c0 121.8 0 123.8 2 125.9 1.4 1.5 2.1 4.1 2.6 9.2.8 8.1 2.2 10.1 12.6 17.2 9.3 6.5 9.3 6.5-26.7 7.3-17.6.4-45.3.7-61.5.5-29.2-.2-29.5-.2-29.8-2.3-.2-1.7.7-2.5 5.5-4.5 3.2-1.3 7.5-4.1 9.8-6.4 4.5-4.5 8.3-11 7.2-12.2-1.3-1.2-72.8-1.6-90.2-.5-13.5.9-16.2.8-17.5-.4-1.9-1.9-.9-2.7 8-6.4 9.8-4.1 11-5.2 11-11 0-3.9-3.7-13.2-22.3-56.1l-22.3-51.4-4.5-.6c-13.1-2-52.1-3.1-69.3-2-14.4.9-38.5 3.6-39.3 4.4-.1.1-5.6 13.5-12.3 29.7s-16 38.7-20.7 50c-7.4 17.9-8.5 21.1-8.1 25.1.6 5.6 3.9 10.3 10.2 14.3 4.8 3 5.8 5.1 2.9 5.8-1 .2-10.6 0-21.3-.5-21.7-.9-83.9-.2-108.4 1.3-22.1 1.4-22.5.3-1.7-5 17.9-4.6 33.3-9.6 42.4-13.7l7.7-3.6 6.9-13.1c3.8-7.2 14.2-27.5 23.1-45.2 17.9-35.6 19-38.9 15.5-47.9-1-2.7-1.4-5.6-1.1-7.1.4-1.5 8.1-10.1 17.5-19.8 9.2-9.4 17.6-18.6 18.5-20.4s6.4-15.7 12.2-30.8c5.7-15.1 17.9-46.7 27.1-70.2l16.6-42.7-9.3-18.2c-5.1-10-10.7-19.8-12.5-21.6-6-6.1-16.6-9.9-32-11.4-7.8-.8-8-.9-8.3-3.6s-.3-2.7 5.9-2.7c3.5 0 26.3 1.1 50.8 2.5m999.3 20.4c3 5.2 4.8 10.9 9.7 31 8.8 35.5 11.8 55.6 14.2 93.1 1.5 24.1.6 87-1.5 108-1.8 17.4-4.4 37.5-5.3 40.5-.3 1.3-.2 1.7.5 1 1.2-1.2 11.9-33.8 16.2-49.5 1.8-6.3 3.7-12.4 4.2-13.4 3.4-6.4 2.2 14.4-2 34.9-1.3 6.3-1.5 9.6-.9 10.7 2.1 3.3-9.4 55.8-18.3 83.3-5.5 17.2-15.6 42.7-18.1 45.9-1.1 1.5-2.6 2.3-3.4 1.9-.8-.3-5.7-6.9-10.9-14.7-17.4-26.2-33.3-45.2-60.7-72.1-16.4-16.1-29.1-27.5-45.6-41-4-3.2-7.5-6.5-7.8-7.3-1.2-3.2 5.5.3 19.9 10.4 8.1 5.8 15 10.3 15.2 10.2.4-.5-17.3-14.6-37.1-29.4-43.5-32.7-81.4-58.4-86.1-58.4-1.3 0-1.4 9.9-.8 86.7.4 61.2 1 87.5 1.8 89.3 1.4 3.1 7.5 7.2 14 9.5 6.9 2.4 7.6 3.2 4.6 5.5-2.4 1.9-5 2-74.2 2-45.3 0-71.8-.4-71.8-1 0-.9 3.2-1.9 12-3.9 9.2-2.1 22.3-6.2 26.9-8.6 7.6-3.8 8.9-8.7 10.1-38 1.3-29.8 2.5-203 1.5-217.8-.7-11.3-.9-12-3.8-15.3-1.6-1.9-4.3-4.2-6-5-5.1-2.7-24.7-6.3-42.9-7.9-9.7-.8-18.4-1.8-19.2-2.1-1.4-.5-2.2-2-1.3-2.6.3-.2 73.8-1.9 90.7-2.1 12.6-.2 13.9-.4 19.5-3 4.8-2.3 8.6-3.1 19.5-4.2 18.5-1.9 34.2-2.3 34.7-.9.3 1-2.3 4.6-10.9 14.7l-3.3 3.9-.3 20.2-.3 20.2 5.7 8c17.5 24.5 49.6 55.6 93.9 91 20 16.1 58.7 45.6 59.1 45.1.7-.7 6.5-38.1 8.5-55.7 3-25 3.3-66.8.6-84-2.5-16.2-9.6-43-11.4-43-.2 0-8.1 7.2-17.5 16.1-9.3 8.8-17.2 15.8-17.5 15.5s2.7-4.5 6.8-9.3c13-15.6 35.1-41.7 37.2-44.1 1.1-1.2 1.8-2.2 1.4-2.2-.3 0-16.9 17-36.8 37.7-37.3 38.8-41.5 43-42.6 41.9-.8-.8-4.1 3.1 54-63.3 28.4-32.6 51.7-59.6 51.7-59.9s-3.2 2.3-7 5.7c-14.3 12.9-15.9 13.8-7.5 4.4 16.1-18.1 32.8-35.6 33.9-35.2.6.2 2.8 3.2 4.8 6.6m-578.4 94.3c-.3.7-5 4.4-10.5 8.3-13.5 9.4-17.7 12.9-31.6 26.4-8.1 8-13.5 14.2-17.6 20.5-6.8 10.7-11.5 18.6-10.9 18.6.3 0 2-2.1 3.8-4.8 5.1-7.1 19.5-21.6 28.5-28.7 24.4-19.1 53.7-31.3 89-37.2 13.7-2.2 53.7-2.5 68.5-.5 45.5 6.4 82.4 22.6 109.1 48 26 24.7 40.4 54.7 45 93.7 1.7 14.2.6 42.3-2.1 54.9-8.5 39.6-25.4 68.8-53.5 92.6-15.5 13-29.1 20.9-45.7 26.5-18.4 6.1-35.4 7.7-56 5.3l-10.3-1.3 10.5-.6c11.4-.8 27.2-3.2 31.1-4.9 2.3-.9 2.2-1-.6-.5-15.1 2.4-38.9 3.2-48.9 1.5-11.5-1.9-10.1-4 6.3-9.9 6.2-2.3 15.4-6.2 20.4-8.8 56.5-29.2 84.7-97.9 69.1-168.3-11.5-51.5-43.4-85-89.3-93.6-11.4-2.1-32.9-2.2-44.2 0-40.6 7.7-70 34.9-84.5 78.1-5.8 17.5-7.7 31.8-7.1 54 .6 21.3 2.2 32.3 7.3 49.2 11.8 39 34.4 64.6 78.4 88.7 4.7 2.6 9.6 5.8 11 7.1 2.3 2.4 2.4 2.6.7 4.2-1.6 1.6-3.8 1.8-17 1.7-45.3-.2-82.1-18.2-112.6-55-4.2-5.1-9.6-12.4-12.1-16.2-2.5-3.9-4.9-7.1-5.4-7.1-.5-.1-.6 3.7-.3 8.5l.5 8.5-2.4-2.2c-3-2.8-10.5-17.2-14.3-27.7-7.2-19.5-12.1-46.9-12.1-67.8 0-30.8 5.7-56.3 18.5-81.9 16.2-32.6 43.1-58.4 79-75.7 10.3-4.9 13-5.7 12.3-3.6 M731 1231.2c-6.2 15.5-15.9 40.1-21.6 54.5-5.7 14.5-10.4 26.7-10.4 27.2 0 1.5 7.9 2 39 2.7 26.5.5 51.1-.3 52.6-1.8.6-.6-46.1-108.6-47.5-110.1-.5-.5-5.9 11.9-12.1 27.5 + M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 + 6,22H18A2,2 0 0,0 20,20V8L14,2H6 ZM12,11A3,3 0 1,0 12,17A3,3 0 0,0 12,11 + ZM12,12.5L14,16H13L12,14.5L11,16H10L12,12.5Z + M609 180.1c-19.4 2.3-38.2 7.8-56.5 16.8-53.8 26.5-89.2 74.9-98.7 + 135.1-1.1 7-1.3 133.1-1.3 739 0 693.9.1 731 1.8 741.4 12.8 79.4 70.7 137.8 149.2 150.6 11.8 + 2 20.6 2 563.5 2s551.7 0 563.5-2c57.2-9.3 104-43 130.8-94.1 9.1-17.2 14.6-33.9 18.4-55.4 + 1.6-9.4 1.8-40.6 2-554l.3-544-268.2-268.2L1345.5 179l-364.5.1c-200.5.1-367.9.5-372 1m893 + 378.4L1747.5 804H1256V558.5c0-135 .1-245.5.3-245.5.1 0 110.7 110.5 245.7 245.5m-792.1 + 532c24.5 1.3 47 2.9 49.8 3.4 7.1 1.3 12.8 5.5 22.5 16.4 6.4 7.3 9.2 11.5 13.6 20.7 9.2 19.4 + 21.4 47.2 44.4 101.5 27.5 65.1 39.7 92.3 55.5 124 6.9 13.7 16.1 32.9 20.5 42.5 8.2 17.9 15.4 + 31.9 18.3 35.5 1.5 1.8 + 1.5-7.2.9-109-.6-108.7-.7-111.1-2.7-116.5-3.1-8.3-10-14.5-24.7-22-10.1-5.1-11.9-6.4-10.9-7.6 + 1.6-2 5.8-1.8 21.3 1.1 19.3 3.6 39.1 4.5 97.7 4.5 42.1 0 51.9.3 53.4 1.4 1.8 1.3 1.8 1.4-.1 + 1.9-1 .3-3.9.8-6.4 1.2s-8.5 1.7-13.5 3c-4.9 1.3-12.1 2.6-16 3-7.9.8-14.3 3.2-18 6.9l-2.5 + 2.5v123.7c0 121.8 0 123.8 2 125.9 1.4 1.5 2.1 4.1 2.6 9.2.8 8.1 2.2 10.1 12.6 17.2 9.3 6.5 + 9.3 6.5-26.7 7.3-17.6.4-45.3.7-61.5.5-29.2-.2-29.5-.2-29.8-2.3-.2-1.7.7-2.5 5.5-4.5 3.2-1.3 + 7.5-4.1 9.8-6.4 4.5-4.5 8.3-11 + 7.2-12.2-1.3-1.2-72.8-1.6-90.2-.5-13.5.9-16.2.8-17.5-.4-1.9-1.9-.9-2.7 8-6.4 9.8-4.1 11-5.2 + 11-11 0-3.9-3.7-13.2-22.3-56.1l-22.3-51.4-4.5-.6c-13.1-2-52.1-3.1-69.3-2-14.4.9-38.5 + 3.6-39.3 4.4-.1.1-5.6 13.5-12.3 29.7s-16 38.7-20.7 50c-7.4 17.9-8.5 21.1-8.1 25.1.6 5.6 3.9 + 10.3 10.2 14.3 4.8 3 5.8 5.1 2.9 5.8-1 .2-10.6 0-21.3-.5-21.7-.9-83.9-.2-108.4 1.3-22.1 + 1.4-22.5.3-1.7-5 17.9-4.6 33.3-9.6 42.4-13.7l7.7-3.6 6.9-13.1c3.8-7.2 14.2-27.5 23.1-45.2 + 17.9-35.6 19-38.9 15.5-47.9-1-2.7-1.4-5.6-1.1-7.1.4-1.5 8.1-10.1 17.5-19.8 9.2-9.4 17.6-18.6 + 18.5-20.4s6.4-15.7 12.2-30.8c5.7-15.1 17.9-46.7 + 27.1-70.2l16.6-42.7-9.3-18.2c-5.1-10-10.7-19.8-12.5-21.6-6-6.1-16.6-9.9-32-11.4-7.8-.8-8-.9-8.3-3.6s-.3-2.7 + 5.9-2.7c3.5 0 26.3 1.1 50.8 2.5m999.3 20.4c3 5.2 4.8 10.9 9.7 31 8.8 35.5 11.8 55.6 14.2 + 93.1 1.5 24.1.6 87-1.5 108-1.8 17.4-4.4 37.5-5.3 40.5-.3 1.3-.2 1.7.5 1 1.2-1.2 11.9-33.8 + 16.2-49.5 1.8-6.3 3.7-12.4 4.2-13.4 3.4-6.4 2.2 14.4-2 34.9-1.3 6.3-1.5 9.6-.9 10.7 2.1 + 3.3-9.4 55.8-18.3 83.3-5.5 17.2-15.6 42.7-18.1 45.9-1.1 1.5-2.6 2.3-3.4 + 1.9-.8-.3-5.7-6.9-10.9-14.7-17.4-26.2-33.3-45.2-60.7-72.1-16.4-16.1-29.1-27.5-45.6-41-4-3.2-7.5-6.5-7.8-7.3-1.2-3.2 + 5.5.3 19.9 10.4 8.1 5.8 15 10.3 15.2 + 10.2.4-.5-17.3-14.6-37.1-29.4-43.5-32.7-81.4-58.4-86.1-58.4-1.3 0-1.4 9.9-.8 86.7.4 61.2 1 + 87.5 1.8 89.3 1.4 3.1 7.5 7.2 14 9.5 6.9 2.4 7.6 3.2 4.6 5.5-2.4 1.9-5 2-74.2 2-45.3 + 0-71.8-.4-71.8-1 0-.9 3.2-1.9 12-3.9 9.2-2.1 22.3-6.2 26.9-8.6 7.6-3.8 8.9-8.7 10.1-38 + 1.3-29.8 2.5-203 + 1.5-217.8-.7-11.3-.9-12-3.8-15.3-1.6-1.9-4.3-4.2-6-5-5.1-2.7-24.7-6.3-42.9-7.9-9.7-.8-18.4-1.8-19.2-2.1-1.4-.5-2.2-2-1.3-2.6.3-.2 + 73.8-1.9 90.7-2.1 12.6-.2 13.9-.4 19.5-3 4.8-2.3 8.6-3.1 19.5-4.2 18.5-1.9 34.2-2.3 + 34.7-.9.3 1-2.3 4.6-10.9 14.7l-3.3 3.9-.3 20.2-.3 20.2 5.7 8c17.5 24.5 49.6 55.6 93.9 91 20 + 16.1 58.7 45.6 59.1 45.1.7-.7 6.5-38.1 8.5-55.7 3-25 + 3.3-66.8.6-84-2.5-16.2-9.6-43-11.4-43-.2 0-8.1 7.2-17.5 16.1-9.3 8.8-17.2 15.8-17.5 + 15.5s2.7-4.5 6.8-9.3c13-15.6 35.1-41.7 37.2-44.1 1.1-1.2 1.8-2.2 1.4-2.2-.3 0-16.9 17-36.8 + 37.7-37.3 38.8-41.5 43-42.6 41.9-.8-.8-4.1 3.1 54-63.3 28.4-32.6 51.7-59.6 51.7-59.9s-3.2 + 2.3-7 5.7c-14.3 12.9-15.9 13.8-7.5 4.4 16.1-18.1 32.8-35.6 33.9-35.2.6.2 2.8 3.2 4.8 + 6.6m-578.4 94.3c-.3.7-5 4.4-10.5 8.3-13.5 9.4-17.7 12.9-31.6 26.4-8.1 8-13.5 14.2-17.6 + 20.5-6.8 10.7-11.5 18.6-10.9 18.6.3 0 2-2.1 3.8-4.8 5.1-7.1 19.5-21.6 28.5-28.7 24.4-19.1 + 53.7-31.3 89-37.2 13.7-2.2 53.7-2.5 68.5-.5 45.5 6.4 82.4 22.6 109.1 48 26 24.7 40.4 54.7 45 + 93.7 1.7 14.2.6 42.3-2.1 54.9-8.5 39.6-25.4 68.8-53.5 92.6-15.5 13-29.1 20.9-45.7 26.5-18.4 + 6.1-35.4 7.7-56 5.3l-10.3-1.3 10.5-.6c11.4-.8 27.2-3.2 31.1-4.9 2.3-.9 2.2-1-.6-.5-15.1 + 2.4-38.9 3.2-48.9 1.5-11.5-1.9-10.1-4 6.3-9.9 6.2-2.3 15.4-6.2 20.4-8.8 56.5-29.2 84.7-97.9 + 69.1-168.3-11.5-51.5-43.4-85-89.3-93.6-11.4-2.1-32.9-2.2-44.2 0-40.6 7.7-70 34.9-84.5 + 78.1-5.8 17.5-7.7 31.8-7.1 54 .6 21.3 2.2 32.3 7.3 49.2 11.8 39 34.4 64.6 78.4 88.7 4.7 2.6 + 9.6 5.8 11 7.1 2.3 2.4 2.4 2.6.7 4.2-1.6 1.6-3.8 1.8-17 + 1.7-45.3-.2-82.1-18.2-112.6-55-4.2-5.1-9.6-12.4-12.1-16.2-2.5-3.9-4.9-7.1-5.4-7.1-.5-.1-.6 + 3.7-.3 8.5l.5 8.5-2.4-2.2c-3-2.8-10.5-17.2-14.3-27.7-7.2-19.5-12.1-46.9-12.1-67.8 0-30.8 + 5.7-56.3 18.5-81.9 16.2-32.6 43.1-58.4 79-75.7 10.3-4.9 13-5.7 12.3-3.6 M731 1231.2c-6.2 + 15.5-15.9 40.1-21.6 54.5-5.7 14.5-10.4 26.7-10.4 27.2 0 1.5 7.9 2 39 2.7 26.5.5 51.1-.3 + 52.6-1.8.6-.6-46.1-108.6-47.5-110.1-.5-.5-5.9 11.9-12.1 27.5 diff --git a/FModel/Views/Resources/Resources.xaml b/FModel/Views/Resources/Resources.xaml index d9f04f99..725dff53 100644 --- a/FModel/Views/Resources/Resources.xaml +++ b/FModel/Views/Resources/Resources.xaml @@ -1,119 +1,100 @@ - - + - + - + + - + + + + + + + - - - - - + + + + + + @@ -123,128 +104,88 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/FModel/Views/SearchView.xaml b/FModel/Views/SearchView.xaml index 6a3d6a97..c7b8cc57 100644 --- a/FModel/Views/SearchView.xaml +++ b/FModel/Views/SearchView.xaml @@ -14,7 +14,7 @@ Background="Transparent"> - @@ -54,7 +54,7 @@ Watermark="Write your pattern and press enter..." /> - - - - - @@ -85,20 +75,27 @@ - - + - + + + + + + + + + + @@ -106,14 +103,7 @@ HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0 20" - IsVisible="{Binding CommitsView.Count, FallbackValue=0, - Converter={x:Static converters:IsNotZeroConverter.Instance}, - ConverterParameter=invert}"> - - + IsVisible="{Binding HasNoCommits}" />