diff --git a/App.config b/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..1aaef35 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,62 @@ +namespace VAG_FRF_Extractor +{ + partial class Form1 + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором форм Windows + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.button_OpenFile = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button_OpenFile + // + this.button_OpenFile.Location = new System.Drawing.Point(12, 12); + this.button_OpenFile.Name = "button_OpenFile"; + this.button_OpenFile.Size = new System.Drawing.Size(163, 84); + this.button_OpenFile.TabIndex = 0; + this.button_OpenFile.Text = "Open file"; + this.button_OpenFile.UseVisualStyleBackColor = true; + this.button_OpenFile.Click += new System.EventHandler(this.Button_OpenFile_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(187, 108); + this.Controls.Add(this.button_OpenFile); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Form1"; + this.Text = "VAG FRF Extractor"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button_OpenFile; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..927f16e --- /dev/null +++ b/Form1.cs @@ -0,0 +1,48 @@ +using System; +using System.Windows.Forms; +using System.IO; +using System.IO.Compression; + +namespace VAG_FRF_Extractor +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void Button_OpenFile_Click(object sender, EventArgs e) + { + try + { + var ofd = new OpenFileDialog(); + ofd.Filter = "FRF Files |*.frf"; + if (ofd.ShowDialog() != DialogResult.OK) return; + if (File.Exists(ofd.FileName) == false) return; + var key = Key.GetKey(); + var crypted_file = File.ReadAllBytes(ofd.FileName); + var decrypted_file = new byte[crypted_file.Length]; + int first_seed = 0; + int second_seed = 1; + for (int i = 0; i < crypted_file.Length; i++) + { + var key_byte = key[i % key.Length]; + first_seed = ((first_seed + key_byte) * 3) & 0xFF; + decrypted_file[i] = (byte)(crypted_file[i] ^ (first_seed ^ 0xFF ^ second_seed ^ key_byte)); + second_seed = ((second_seed + 1) * first_seed) & 0xFF; + } + var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() != DialogResult.OK) return; + + File.WriteAllBytes("decrypted.zip", decrypted_file); + ZipFile.ExtractToDirectory("decrypted.zip", fbd.SelectedPath); + File.Delete("decrypted.zip"); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Error"); + } + } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Key.cs b/Key.cs new file mode 100644 index 0000000..f785952 --- /dev/null +++ b/Key.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VAG_FRF_Extractor +{ + static class Key + { + private static string key = "3221602D1719426B710F11297C61084375656E727E451B43430E39475E03480C7837644D315B4B6642541A0A61115738661B346B2B6D12123807453F203E172326560F3A245273432E0B0B7372286A626D6566161F2D376B067D73710C6B6A0425685C3827426A7B5D6D4B755602403303084A0502731A24346A4918154D49594D771C350240437171467A333D6E222006257F413E6C232B38132A5F0244286F754460620A76375A702168745B7278701E456D127C203B473B7F0C7B596F0C46581108686B2C7C01037D58192A6C726F7C3F64184842653A2E6827130679683A186F44270B214D76211E5D68215C2B2B14121D5B33625D48213B2F7A567E02725B5F44333D0F7B013C181269430870011D51507165704C323E4D3A1645623C0944201316290E342D36341E2379376A7A7F452463453359016F6571703C6F3F063A795758366820773B2A1E2C32411D223642383A752D3C1B4D7C0F246B3371243439024E63660467745D6342421C726E6C51782E7C6F6B294B027B631F40536C17601B58492F416E296079252D23024C2E7A2B0812481703282B3D63530C32796B752B3B60223E75205A683B3B542245655A307D6047102B215C0A4F421933771F3B61716803622274396E365871597A390D0D055E03381E0960425A080D02050751314328181F7756732464565F5A131E4A09746B5363470E52723D06184E5B547813200B061267271E470F1F280C583E1B0B102E4079705639024166417F422F356F4E3954253A0F433E7D5E5356133E077C235051625F091D592B4D107D0240122D16590A3F37386871763969220A49164273780F075D50066146650E31632E163640133047284718484458715706055146494F4E31537D01595642012D22497014114F275367582B2E64735C4F1A3F706C7D2E20253909212B483556274334445A786E463E32027B05781B2D316929262921667F2A332905626D191B3A5E1A5973160C79742D357462077B687255573D7B5F06085002022F4C74304F2E505B5A274E610532512C6124286447040D637A1C726A08507E12712F52050B48106D253F1E2D6B2027500A72633E141019362534627847552F4213330D7E1930283A02610E587465360736754172153D7F37066A351A0C051E7B5C7F2F05400D1F293936274A6829073A2E5549661334494D6467753720085223163C400147077E211165706C0F1620523B390403551C7F62095329364C0753230711465A77474C0C5316722430520B3523497831251E275D3B555A01562A2A6477274B77187511514873335B1505504D2E2F2F5949624B2543150F7F06185E4D302556427239565835213D7A045875261031610A0F7224693C5018267A7745793470224C392209654B18674672043851170433304D2541747226347C777E36197C1F7F6F207D4C1F174A0C237D045C7969323503466B642E5E173B52387A0759246E4224146F092A2D5D50621E7E54643143514B1F4C755D292D156E64732001556251313D01284F36591A4D7F79085A153D6E4F03505D4A7A702B18247169593605155E453A11565A44542A487D60253D2A735818023D7A67631A207D4A28705E767551232C07402865422113440C52114A2E06634D7D511A263B7F1E2B382A755D3C0C426229110C355D30411C567C7B5A197601265426115D426A5D744F0D53307D1B21190674792C432011504C626F0B611063760821556E7808400D36417F587E29483A641276323B170B48362D75454D7B1023626C6D432502525E356D013E085C3D2E0C130B2F0E3D366C5C041570266010172A2C6142117F184F13396249625C0A5B461E400B043C1A250510587434666C38280C3A5503281C491A4E29605652372B5A5B1E2E65393F597A79453A3F362B7024327F634425653210545E6D2A664A050F732C795F2E71046665280F775526654638541D1D7B743E720A57273F4D502E0E726A08536E56697F3E276B52734234716D0F533867756C513406150647767F5379525940076E716E5A201D6F0C2B595A277E311F301F621964623C62415E4A6B4821354C0223665841796B75284B1C2B6D087E7A5E5867712253637C4270577E6840641F665C0E68791C1E0D4F094409481501707A0A44017741547B52146D335F152E623B0133430C6F7E5E0A4D1B1E3F0D032A0A1C42726A14550879325632370A5B3D09791B14025C5211607F67125A594C501976276C04342F4B4032582477063257592E0E016149644D5A08710D215F24092C3B164B092A6B2E7C3C3128717C593207563233207A3B7F4E01361D08537D4D224819497C0D114C794A5132016A1D6C3A507F485D02573A5F35553C20550344141D06732264210F493A7A330933214501034E29554B6A34523351645539574E684909572F0D352703062C5B5C5C467A7472272B293E412523581A6638504F280C455A117D33102A3E0D6D12410C14745B461236230263731B4B372C1243763A483A0107547F3B7E43764840026B14197E2617320940580835301C2A39516D645006237B193D0D5A6A424D65224D52243B3F07241F294A1A3D0E204A5B6A27272E724C3C281E3D4A11652233594708162D111D3C485D23330C581F385148515B7D4D695D5466785D12382533370B211D23165D19627C7A114916013D42735446641D6427471E255916433F2F6520077F45542D02160F367D1D512D21577416300C6C2462264E2C07440F586D0B0E20043C5576400C1C413F300F0D2C375201631C4111561C7C752F45235937505E56763021211C6B2E021F295B08260A157C263D25134A4F326719400728535C170F1B483E145B5C4A6165303A06567A466E40171F120867776C0C5E442F095841353D2D363948067A46586F366F052D6B417A513776560D546B52476155236C652F220711772A124519410B562C7B4B0F5C1C1475277D694F4D31226601673F0A65127D553548273442682F22237D37276E07620E4522737872175C1D1F7A383F57370C5D6B6E4D2A1501233D5C6B6D0A37530511756045555C504A1011447725385E3D565B0E1A3710296062563C386D411F6619574D4F4C397238420646507F7C1A7108603023522050627B3818213852140E0F310F18464F282E1B45284A356C122F5B427C6F640F1E2F6E48292E53335A04594C4E28296818350318116E2F506F7F3748190653233A51254F1469262C1850617033085F4A6A546245294356705869043C307009254D500614045A1A04767B0D64653F4E3D471420151951101376762A6468356C5C7E327B611F0815051D0C47720D55600B577C255009204602712D11086A5E661276016B7C0D7B75350B766053537B7A4114593E20396106701721725E735E0D5C443E2E773B441D650101775E4009542E642526072347651B3A43696A7A3B1759045B3F055147455675527F5724715F45756F52666662671B205D34397D677615482C775E447335306F504065071B642F4E2008640B18561851591C710349723718181E2B1C2F341A77630231726F2A137721112918537839541D693B154955687C077B1361620B3C16730C636C557B1A7959355E187A17273013633E3A4F654F7D61573F1C76033F536827227E351D6B5B2F3B2B1075790A702151237A436C15220F7A565552624B372B1B162F775930250D6D370A2C660919317D115D0D306174772C01125E7007492230680703770E605A112B0D07284C352A2D316C167A5C7A0235685D02771C11362D400E413F2F137D702E226E067C4B742A2B2E44112D3C185C323D263D32174F5C454D1A793B466052695049474164773C262C3F7E42226A083B320B6F645603204B746C59016A7F031F3442071A2A4A6C334A74150628115D0E297E7F316B79103961324D033E25177B15283C483E4078437B393C2E5B762D235F05704A5C76254F206E311358774122321A0C663E30581A1A753F4E5E3357752D40081E421120713436021620245E52417D5D7341121E6F4F276648727613321D765278035C121C2C62393E4948153E451915251C303941707A47105A7E40607E1A1233620F0F68401E181936303F4D68761C6939525A430B6F3D53444577342F1706317E1F55551A6E3975181B0171691F4F36502607192D437E0929314D116C184A4607562B1606500D331A0A3C5478762E1D7C0A505B1215067556536C207A3F6351682849782907076B061051206D07292016552538655B737213061A44092402060C7637291F066A27253A3936472A3041152F0F18703C4D6727725E65606E324D3A667E1230743E4F41317B7C4D064968433F156379611D3B5B3E406B4846780E3920251A247A0C4A201D1F5C49447F7D662E3F0249726B587713483E09545E31524D3428423F5B020A252D3D010B57684723155B28163D2543187F466B3F6B1F4D153326536C335E49712E073F045B112E4720575E751D0A06766C6B3630273E721F2B7B1F281C46242A2A21495712616242675E3238126F0A541816314E1B770814240F6E1C1F2262782775672B043E2D3B72596D07243C155B092D25424E33591B244A086F435A4C022F6A63283A11555A4A2E57095C597032491A5A3348582B5D3514354A11572A71496804773B43234976473867412F63036043184A124F47025E553C550F7F446C7E5711400F3A5F2D7E0A58495C2435735412272F3301753128756637473B611C5420532A3F6051316B617F553321302C2F6D4E0933557D12195C7B1941744A295529125E521C417A44337436510F1A56783E561B32264E3B7243220410483A095B1504505576331168123B543C18386C083D7202390D1620057B18792177771E2643427539025B686B127B5A5E1B765F2A68402C7E76304C0B4B05151D09275B0B432F63520F281A7D5D170748073A7F04290E183D3213601B3B534E061821780D2D1F07090303687D1C1A4541030D346026632E3E6847427E730B0A224B6E5F74291A49250671393576097B12377566040A47564841525C7C1A35333B4B1576085E2911703F7C766B146E11044C7C7D397B427825653E145C58573017401E271175534730572B05681D506E5D6A2A6147215D7C1B7B135468577B697E511259561521532E76064F743A387C6538067A76261F4A732C5703663C28463A2677732067191D3242163C56132D22665F18310E2F114A751F14081F32672F1268585F3713460E04666235584F37482607686C56673965687D514D5B5F3F0C4D3F3A0463402D0C6B08732040165E566E567F1417732101166D1739616B38453452274A6C165831514F6657122B3506776412197E510745186D347B7F5A420F4A2619193F4E531C68706569254B36101F4C242E4F603E255B266F432E6C264E40593360176B75750E2532435501464A392C2B2572493D6977065E3B2940077B7202243C3203227F6C054941407D4C3919741E5B272D08201008790962261D624D4E30440F10155D2F2822736E253F277B4A2F7766342D07573D3B2121377A505F2F376962762F5561777374044A0C3948050316245527356D4D0A69777D4D647D471D2A426E7E467970473B62166E3D37490621462706135F564C07701862726F207F39782551693834792A094A586E5E22096E624C2E575C7F7040563041607E63647E4C423028656C1128400F4F3407391365406B276B2C707D7E6F6C731772385561066D236A4A3F151F4E0D5D7778352C6E272D773517507B2805757F1346594A6D5033"; + public static byte[] GetKey() + { + return Enumerable.Range(0, key.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(key.Substring(x, 2), 16)) + .ToArray(); + } + } +} diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..9774e80 --- /dev/null +++ b/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace VAG_FRF_Extractor +{ + static class Program + { + /// + /// Главная точка входа для приложения. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3b1489a --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанных со сборкой. +[assembly: AssemblyTitle("VAG_FRF_Extractor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VAG_FRF_Extractor")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// COM, следует установить атрибут ComVisible в TRUE для этого типа. +[assembly: ComVisible(false)] + +// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM +[assembly: Guid("371e4ec1-a1a7-4abb-b91d-ff617848061b")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Редакция +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3a6b60d --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программным средством. +// Версия среды выполнения: 4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если +// код создан повторно. +// +//------------------------------------------------------------------------------ + +namespace VAG_FRF_Extractor.Properties +{ + + + /// + /// Класс ресурсов со строгим типом для поиска локализованных строк и пр. + /// + // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder + // класс с помощью таких средств, как ResGen или Visual Studio. + // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen + // с параметром /str или заново постройте свой VS-проект. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Возврат кэшированного экземпляра ResourceManager, используемого этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VAG_FRF_Extractor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Переопределяет свойство CurrentUICulture текущего потока для всех + /// подстановки ресурсов с помощью этого класса ресурсов со строгим типом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..1e289c9 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace VAG_FRF_Extractor.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/VAG_FRF_Extractor.csproj b/VAG_FRF_Extractor.csproj new file mode 100644 index 0000000..8b9adfb --- /dev/null +++ b/VAG_FRF_Extractor.csproj @@ -0,0 +1,84 @@ + + + + + Debug + AnyCPU + {371E4EC1-A1A7-4ABB-B91D-FF617848061B} + WinExe + VAG_FRF_Extractor + VAG_FRF_Extractor + v4.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/VAG_FRF_Extractor.sln b/VAG_FRF_Extractor.sln new file mode 100644 index 0000000..6f6347c --- /dev/null +++ b/VAG_FRF_Extractor.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28922.388 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VAG_FRF_Extractor", "VAG_FRF_Extractor.csproj", "{371E4EC1-A1A7-4ABB-B91D-FF617848061B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {371E4EC1-A1A7-4ABB-B91D-FF617848061B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {371E4EC1-A1A7-4ABB-B91D-FF617848061B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {371E4EC1-A1A7-4ABB-B91D-FF617848061B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {371E4EC1-A1A7-4ABB-B91D-FF617848061B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8D9BB058-91F1-4575-870D-D0163ADECDF9} + EndGlobalSection +EndGlobal