diff --git a/GUI/GUI/FormMain.Designer.cs b/GUI/GUI/FormMain.Designer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..805ed1c35df46525742a7c6d9aca11096071ba60
--- /dev/null
+++ b/GUI/GUI/FormMain.Designer.cs
@@ -0,0 +1,565 @@
+п»їnamespace HDLNoCGen
+{
+    partial class FormMain
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            menuStrip1 = new MenuStrip();
+            файлToolStripMenuItem = new ToolStripMenuItem();
+            проекToolStripMenuItem = new ToolStripMenuItem();
+            splitContainer1 = new SplitContainer();
+            splitContainer2 = new SplitContainer();
+            pictureBox1 = new PictureBox();
+            tabControl2 = new TabControl();
+            output = new TabPage();
+            richTextBox1 = new RichTextBox();
+            button1 = new Button();
+            label7 = new Label();
+            label6 = new Label();
+            label5 = new Label();
+            label4 = new Label();
+            label3 = new Label();
+            label1 = new Label();
+            numericUpDown2 = new NumericUpDown();
+            numericUpDown1 = new NumericUpDown();
+            comboBox4 = new ComboBox();
+            comboBox3 = new ComboBox();
+            comboBox2 = new ComboBox();
+            comboBox1 = new ComboBox();
+            textBox1 = new TextBox();
+            label2 = new Label();
+            tabControl1 = new TabControl();
+            dijkstra = new TabPage();
+            listView_Deikstra = new ListView();
+            columnHeader19 = new ColumnHeader();
+            columnHeader20 = new ColumnHeader();
+            columnHeader21 = new ColumnHeader();
+            GA = new TabPage();
+            listView1 = new ListView();
+            columnHeader1 = new ColumnHeader();
+            columnHeader2 = new ColumnHeader();
+            columnHeader3 = new ColumnHeader();
+            XY = new TabPage();
+            listView2 = new ListView();
+            columnHeader4 = new ColumnHeader();
+            columnHeader5 = new ColumnHeader();
+            columnHeader6 = new ColumnHeader();
+            menuStrip1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
+            splitContainer1.Panel1.SuspendLayout();
+            splitContainer1.Panel2.SuspendLayout();
+            splitContainer1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)splitContainer2).BeginInit();
+            splitContainer2.Panel1.SuspendLayout();
+            splitContainer2.Panel2.SuspendLayout();
+            splitContainer2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
+            tabControl2.SuspendLayout();
+            output.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)numericUpDown2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit();
+            tabControl1.SuspendLayout();
+            dijkstra.SuspendLayout();
+            GA.SuspendLayout();
+            XY.SuspendLayout();
+            SuspendLayout();
+            // 
+            // menuStrip1
+            // 
+            menuStrip1.BackColor = SystemColors.Control;
+            menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem, проекToolStripMenuItem });
+            menuStrip1.Location = new Point(0, 0);
+            menuStrip1.Name = "menuStrip1";
+            menuStrip1.Size = new Size(1339, 24);
+            menuStrip1.TabIndex = 0;
+            menuStrip1.Text = "menuStrip1";
+            // 
+            // файлToolStripMenuItem
+            // 
+            файлToolStripMenuItem.Name = "файлToolStripMenuItem";
+            файлToolStripMenuItem.Size = new Size(48, 20);
+            файлToolStripMenuItem.Text = "Файл";
+            // 
+            // проекToolStripMenuItem
+            // 
+            проекToolStripMenuItem.Name = "проекToolStripMenuItem";
+            проекToolStripMenuItem.Size = new Size(59, 20);
+            проекToolStripMenuItem.Text = "Проект";
+            // 
+            // splitContainer1
+            // 
+            splitContainer1.BorderStyle = BorderStyle.FixedSingle;
+            splitContainer1.Dock = DockStyle.Fill;
+            splitContainer1.Location = new Point(0, 24);
+            splitContainer1.Name = "splitContainer1";
+            // 
+            // splitContainer1.Panel1
+            // 
+            splitContainer1.Panel1.Controls.Add(splitContainer2);
+            splitContainer1.Panel1MinSize = 280;
+            // 
+            // splitContainer1.Panel2
+            // 
+            splitContainer1.Panel2.Controls.Add(button1);
+            splitContainer1.Panel2.Controls.Add(label7);
+            splitContainer1.Panel2.Controls.Add(label6);
+            splitContainer1.Panel2.Controls.Add(label5);
+            splitContainer1.Panel2.Controls.Add(label4);
+            splitContainer1.Panel2.Controls.Add(label3);
+            splitContainer1.Panel2.Controls.Add(label1);
+            splitContainer1.Panel2.Controls.Add(numericUpDown2);
+            splitContainer1.Panel2.Controls.Add(numericUpDown1);
+            splitContainer1.Panel2.Controls.Add(comboBox4);
+            splitContainer1.Panel2.Controls.Add(comboBox3);
+            splitContainer1.Panel2.Controls.Add(comboBox2);
+            splitContainer1.Panel2.Controls.Add(comboBox1);
+            splitContainer1.Panel2.Controls.Add(textBox1);
+            splitContainer1.Panel2.Controls.Add(label2);
+            splitContainer1.Panel2.Controls.Add(tabControl1);
+            splitContainer1.Panel2MinSize = 280;
+            splitContainer1.Size = new Size(1339, 604);
+            splitContainer1.SplitterDistance = 1050;
+            splitContainer1.TabIndex = 1;
+            // 
+            // splitContainer2
+            // 
+            splitContainer2.BorderStyle = BorderStyle.FixedSingle;
+            splitContainer2.Dock = DockStyle.Fill;
+            splitContainer2.Location = new Point(0, 0);
+            splitContainer2.Name = "splitContainer2";
+            splitContainer2.Orientation = Orientation.Horizontal;
+            // 
+            // splitContainer2.Panel1
+            // 
+            splitContainer2.Panel1.Controls.Add(pictureBox1);
+            // 
+            // splitContainer2.Panel2
+            // 
+            splitContainer2.Panel2.Controls.Add(tabControl2);
+            splitContainer2.Size = new Size(1050, 604);
+            splitContainer2.SplitterDistance = 476;
+            splitContainer2.TabIndex = 0;
+            // 
+            // pictureBox1
+            // 
+            pictureBox1.BackColor = Color.White;
+            pictureBox1.Dock = DockStyle.Fill;
+            pictureBox1.Location = new Point(0, 0);
+            pictureBox1.Name = "pictureBox1";
+            pictureBox1.Size = new Size(1048, 474);
+            pictureBox1.TabIndex = 0;
+            pictureBox1.TabStop = false;
+            // 
+            // tabControl2
+            // 
+            tabControl2.Controls.Add(output);
+            tabControl2.Dock = DockStyle.Fill;
+            tabControl2.Location = new Point(0, 0);
+            tabControl2.Name = "tabControl2";
+            tabControl2.SelectedIndex = 0;
+            tabControl2.Size = new Size(1048, 122);
+            tabControl2.TabIndex = 0;
+            // 
+            // output
+            // 
+            output.Controls.Add(richTextBox1);
+            output.Location = new Point(4, 24);
+            output.Name = "output";
+            output.Padding = new Padding(3);
+            output.Size = new Size(1040, 94);
+            output.TabIndex = 0;
+            output.Text = "Вывод";
+            output.UseVisualStyleBackColor = true;
+            // 
+            // richTextBox1
+            // 
+            richTextBox1.BackColor = Color.White;
+            richTextBox1.BorderStyle = BorderStyle.None;
+            richTextBox1.Dock = DockStyle.Fill;
+            richTextBox1.Location = new Point(3, 3);
+            richTextBox1.Name = "richTextBox1";
+            richTextBox1.ReadOnly = true;
+            richTextBox1.Size = new Size(1034, 88);
+            richTextBox1.TabIndex = 0;
+            richTextBox1.Text = "";
+            // 
+            // button1
+            // 
+            button1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            button1.Location = new Point(150, 206);
+            button1.Name = "button1";
+            button1.Size = new Size(130, 23);
+            button1.TabIndex = 14;
+            button1.Text = "Построить";
+            button1.UseVisualStyleBackColor = true;
+            // 
+            // label7
+            // 
+            label7.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label7.AutoSize = true;
+            label7.Location = new Point(79, 180);
+            label7.Name = "label7";
+            label7.Size = new Size(65, 15);
+            label7.TabIndex = 13;
+            label7.Text = "Алгоритм:";
+            // 
+            // label6
+            // 
+            label6.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label6.AutoSize = true;
+            label6.Location = new Point(66, 151);
+            label6.Name = "label6";
+            label6.Size = new Size(78, 15);
+            label6.TabIndex = 12;
+            label6.Text = "Тип арбитра:";
+            // 
+            // label5
+            // 
+            label5.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label5.AutoSize = true;
+            label5.Location = new Point(50, 121);
+            label5.Name = "label5";
+            label5.Size = new Size(94, 15);
+            label5.TabIndex = 11;
+            label5.Text = "Длина очереди:";
+            // 
+            // label4
+            // 
+            label4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label4.AutoSize = true;
+            label4.Location = new Point(20, 93);
+            label4.Name = "label4";
+            label4.Size = new Size(124, 15);
+            label4.TabIndex = 10;
+            label4.Text = "Положение очереди:";
+            // 
+            // label3
+            // 
+            label3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label3.AutoSize = true;
+            label3.Location = new Point(65, 64);
+            label3.Name = "label3";
+            label3.Size = new Size(79, 15);
+            label3.TabIndex = 9;
+            label3.Text = "Тип очереди:";
+            // 
+            // label1
+            // 
+            label1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label1.AutoSize = true;
+            label1.Location = new Point(15, 32);
+            label1.Name = "label1";
+            label1.Size = new Size(129, 15);
+            label1.TabIndex = 8;
+            label1.Text = "Нагрузочная ширина:";
+            // 
+            // numericUpDown2
+            // 
+            numericUpDown2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            numericUpDown2.Location = new Point(227, 119);
+            numericUpDown2.Name = "numericUpDown2";
+            numericUpDown2.Size = new Size(53, 23);
+            numericUpDown2.TabIndex = 7;
+            // 
+            // numericUpDown1
+            // 
+            numericUpDown1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            numericUpDown1.Location = new Point(227, 32);
+            numericUpDown1.Name = "numericUpDown1";
+            numericUpDown1.Size = new Size(53, 23);
+            numericUpDown1.TabIndex = 6;
+            // 
+            // comboBox4
+            // 
+            comboBox4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            comboBox4.FormattingEnabled = true;
+            comboBox4.Location = new Point(150, 177);
+            comboBox4.Name = "comboBox4";
+            comboBox4.Size = new Size(130, 23);
+            comboBox4.TabIndex = 5;
+            // 
+            // comboBox3
+            // 
+            comboBox3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            comboBox3.FormattingEnabled = true;
+            comboBox3.Location = new Point(150, 148);
+            comboBox3.Name = "comboBox3";
+            comboBox3.Size = new Size(130, 23);
+            comboBox3.TabIndex = 4;
+            // 
+            // comboBox2
+            // 
+            comboBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            comboBox2.FormattingEnabled = true;
+            comboBox2.Location = new Point(150, 90);
+            comboBox2.Name = "comboBox2";
+            comboBox2.Size = new Size(130, 23);
+            comboBox2.TabIndex = 3;
+            // 
+            // comboBox1
+            // 
+            comboBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            comboBox1.FormattingEnabled = true;
+            comboBox1.Location = new Point(150, 61);
+            comboBox1.Name = "comboBox1";
+            comboBox1.Size = new Size(130, 23);
+            comboBox1.TabIndex = 2;
+            // 
+            // textBox1
+            // 
+            textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            textBox1.Location = new Point(150, 3);
+            textBox1.Name = "textBox1";
+            textBox1.Size = new Size(130, 23);
+            textBox1.TabIndex = 1;
+            // 
+            // label2
+            // 
+            label2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            label2.AutoSize = true;
+            label2.Location = new Point(75, 6);
+            label2.Name = "label2";
+            label2.Size = new Size(69, 15);
+            label2.TabIndex = 0;
+            label2.Text = "Топология:";
+            // 
+            // tabControl1
+            // 
+            tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+            tabControl1.Controls.Add(dijkstra);
+            tabControl1.Controls.Add(GA);
+            tabControl1.Controls.Add(XY);
+            tabControl1.Location = new Point(0, 235);
+            tabControl1.Name = "tabControl1";
+            tabControl1.SelectedIndex = 0;
+            tabControl1.Size = new Size(283, 367);
+            tabControl1.TabIndex = 0;
+            // 
+            // dijkstra
+            // 
+            dijkstra.Controls.Add(listView_Deikstra);
+            dijkstra.Location = new Point(4, 24);
+            dijkstra.Name = "dijkstra";
+            dijkstra.Padding = new Padding(3);
+            dijkstra.Size = new Size(275, 339);
+            dijkstra.TabIndex = 0;
+            dijkstra.Text = "Дейкстра";
+            dijkstra.UseVisualStyleBackColor = true;
+            // 
+            // listView_Deikstra
+            // 
+            listView_Deikstra.Columns.AddRange(new ColumnHeader[] { columnHeader19, columnHeader20, columnHeader21 });
+            listView_Deikstra.Dock = DockStyle.Fill;
+            listView_Deikstra.FullRowSelect = true;
+            listView_Deikstra.GridLines = true;
+            listView_Deikstra.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+            listView_Deikstra.Location = new Point(3, 3);
+            listView_Deikstra.Margin = new Padding(4, 5, 4, 5);
+            listView_Deikstra.MultiSelect = false;
+            listView_Deikstra.Name = "listView_Deikstra";
+            listView_Deikstra.Size = new Size(269, 333);
+            listView_Deikstra.TabIndex = 18;
+            listView_Deikstra.UseCompatibleStateImageBehavior = false;
+            listView_Deikstra.View = View.Details;
+            // 
+            // columnHeader19
+            // 
+            columnHeader19.Text = "A-B";
+            columnHeader19.Width = 40;
+            // 
+            // columnHeader20
+            // 
+            columnHeader20.Text = "Маршрут";
+            columnHeader20.Width = 190;
+            // 
+            // columnHeader21
+            // 
+            columnHeader21.Text = "L";
+            columnHeader21.Width = 30;
+            // 
+            // GA
+            // 
+            GA.Controls.Add(listView1);
+            GA.Location = new Point(4, 24);
+            GA.Name = "GA";
+            GA.Padding = new Padding(3);
+            GA.Size = new Size(277, 341);
+            GA.TabIndex = 1;
+            GA.Text = "GA";
+            GA.UseVisualStyleBackColor = true;
+            // 
+            // listView1
+            // 
+            listView1.Columns.AddRange(new ColumnHeader[] { columnHeader1, columnHeader2, columnHeader3 });
+            listView1.Dock = DockStyle.Fill;
+            listView1.FullRowSelect = true;
+            listView1.GridLines = true;
+            listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+            listView1.Location = new Point(3, 3);
+            listView1.Margin = new Padding(4, 5, 4, 5);
+            listView1.MultiSelect = false;
+            listView1.Name = "listView1";
+            listView1.Size = new Size(271, 335);
+            listView1.TabIndex = 19;
+            listView1.UseCompatibleStateImageBehavior = false;
+            listView1.View = View.Details;
+            // 
+            // columnHeader1
+            // 
+            columnHeader1.Text = "A-B";
+            columnHeader1.Width = 40;
+            // 
+            // columnHeader2
+            // 
+            columnHeader2.Text = "Маршрут";
+            columnHeader2.Width = 190;
+            // 
+            // columnHeader3
+            // 
+            columnHeader3.Text = "L";
+            columnHeader3.Width = 30;
+            // 
+            // XY
+            // 
+            XY.Controls.Add(listView2);
+            XY.Location = new Point(4, 24);
+            XY.Name = "XY";
+            XY.Size = new Size(277, 341);
+            XY.TabIndex = 2;
+            XY.Text = "XY";
+            XY.UseVisualStyleBackColor = true;
+            // 
+            // listView2
+            // 
+            listView2.Columns.AddRange(new ColumnHeader[] { columnHeader4, columnHeader5, columnHeader6 });
+            listView2.Dock = DockStyle.Fill;
+            listView2.FullRowSelect = true;
+            listView2.GridLines = true;
+            listView2.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+            listView2.Location = new Point(0, 0);
+            listView2.Margin = new Padding(4, 5, 4, 5);
+            listView2.MultiSelect = false;
+            listView2.Name = "listView2";
+            listView2.Size = new Size(277, 341);
+            listView2.TabIndex = 19;
+            listView2.UseCompatibleStateImageBehavior = false;
+            listView2.View = View.Details;
+            // 
+            // columnHeader4
+            // 
+            columnHeader4.Text = "A-B";
+            columnHeader4.Width = 40;
+            // 
+            // columnHeader5
+            // 
+            columnHeader5.Text = "Маршрут";
+            columnHeader5.Width = 190;
+            // 
+            // columnHeader6
+            // 
+            columnHeader6.Text = "L";
+            columnHeader6.Width = 30;
+            // 
+            // FormMain
+            // 
+            AutoScaleDimensions = new SizeF(7F, 15F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1339, 628);
+            Controls.Add(splitContainer1);
+            Controls.Add(menuStrip1);
+            MainMenuStrip = menuStrip1;
+            MinimumSize = new Size(600, 350);
+            Name = "FormMain";
+            Text = "FormMain";
+            menuStrip1.ResumeLayout(false);
+            menuStrip1.PerformLayout();
+            splitContainer1.Panel1.ResumeLayout(false);
+            splitContainer1.Panel2.ResumeLayout(false);
+            splitContainer1.Panel2.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit();
+            splitContainer1.ResumeLayout(false);
+            splitContainer2.Panel1.ResumeLayout(false);
+            splitContainer2.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)splitContainer2).EndInit();
+            splitContainer2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
+            tabControl2.ResumeLayout(false);
+            output.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)numericUpDown2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit();
+            tabControl1.ResumeLayout(false);
+            dijkstra.ResumeLayout(false);
+            GA.ResumeLayout(false);
+            XY.ResumeLayout(false);
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private MenuStrip menuStrip1;
+        private ToolStripMenuItem файлToolStripMenuItem;
+        private ToolStripMenuItem проекToolStripMenuItem;
+        private SplitContainer splitContainer1;
+        private SplitContainer splitContainer2;
+        private TabControl tabControl1;
+        private TabPage dijkstra;
+        private TabPage GA;
+        private Label label2;
+        private ComboBox comboBox1;
+        private TextBox textBox1;
+        private ComboBox comboBox4;
+        private ComboBox comboBox3;
+        private ComboBox comboBox2;
+        private NumericUpDown numericUpDown1;
+        private NumericUpDown numericUpDown2;
+        private Label label7;
+        private Label label6;
+        private Label label5;
+        private Label label4;
+        private Label label3;
+        private Label label1;
+        private Button button1;
+        private PictureBox pictureBox1;
+        private TabControl tabControl2;
+        private TabPage output;
+        private ListView listView_Deikstra;
+        private ColumnHeader columnHeader19;
+        private ColumnHeader columnHeader20;
+        private ColumnHeader columnHeader21;
+        private ListView listView1;
+        private ColumnHeader columnHeader1;
+        private ColumnHeader columnHeader2;
+        private ColumnHeader columnHeader3;
+        private TabPage XY;
+        private ListView listView2;
+        private ColumnHeader columnHeader4;
+        private ColumnHeader columnHeader5;
+        private ColumnHeader columnHeader6;
+        private RichTextBox richTextBox1;
+    }
+}
\ No newline at end of file
diff --git a/GUI/GUI/FormMain.cs b/GUI/GUI/FormMain.cs
new file mode 100644
index 0000000000000000000000000000000000000000..db46b33d0d8f91a2cf85c8a9bb070dad97aa00f0
--- /dev/null
+++ b/GUI/GUI/FormMain.cs
@@ -0,0 +1,20 @@
+п»їusing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HDLNoCGen
+{
+    public partial class FormMain : Form
+    {
+        public FormMain()
+        {
+            InitializeComponent();
+        }
+    }
+}
diff --git a/GUI/GUI/FormMain.resx b/GUI/GUI/FormMain.resx
new file mode 100644
index 0000000000000000000000000000000000000000..992796c0180d3bf5c68ba8a07158f62a4db3e41f
--- /dev/null
+++ b/GUI/GUI/FormMain.resx
@@ -0,0 +1,126 @@
+п»ї<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>53</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/GUI/GUI/Form_Main.Designer.cs b/GUI/GUI/Form_Main_Legacy.Designer.cs
similarity index 87%
rename from GUI/GUI/Form_Main.Designer.cs
rename to GUI/GUI/Form_Main_Legacy.Designer.cs
index c9ada548d3732d7368455a173986c392c8dd7690..54479be500500f984e4d5c72d856a60952aa42b1 100644
--- a/GUI/GUI/Form_Main.Designer.cs
+++ b/GUI/GUI/Form_Main_Legacy.Designer.cs
@@ -2,7 +2,7 @@
 
 namespace HDLNoCGen
 {
-    partial class Form_Main
+    partial class Form_Main_Legacy
     {
         /// <summary>
         /// Обязательная переменная конструктора.
@@ -39,7 +39,12 @@ namespace HDLNoCGen
             label_efficiency_algorithm = new Label();
             menuStrip1 = new MenuStrip();
             ToolStripMenuItem_File = new ToolStripMenuItem();
+            создатьПроектToolStripMenuItem = new ToolStripMenuItem();
+            открытьПроектToolStripMenuItem = new ToolStripMenuItem();
+            toolStripSeparator2 = new ToolStripSeparator();
             базаДанныхToolStripMenuItem = new ToolStripMenuItem();
+            projectToolStripMenuItem = new ToolStripMenuItem();
+            projectPropertiesToolStripMenuItem = new ToolStripMenuItem();
             modellingToolStripMenuItem = new ToolStripMenuItem();
             построитьГрафToolStripMenuItem = new ToolStripMenuItem();
             routingToolStripMenuItem = new ToolStripMenuItem();
@@ -54,11 +59,12 @@ namespace HDLNoCGen
             ButtonCompile = new Button();
             ButtonRouting = new Button();
             BuildTopology = new Button();
-            WestFirst = new TabPage();
-            listView_WestFirst = new ListView();
-            columnHeader16 = new ColumnHeader();
-            columnHeader17 = new ColumnHeader();
-            columnHeader18 = new ColumnHeader();
+            columnHeader1 = new ColumnHeader();
+            columnHeader2 = new ColumnHeader();
+            columnHeader3 = new ColumnHeader();
+            columnHeader4 = new ColumnHeader();
+            columnHeader5 = new ColumnHeader();
+            columnHeader6 = new ColumnHeader();
             XY = new TabPage();
             listView_XY = new ListView();
             columnHeader13 = new ColumnHeader();
@@ -69,26 +75,19 @@ namespace HDLNoCGen
             columnHeader10 = new ColumnHeader();
             columnHeader11 = new ColumnHeader();
             columnHeader12 = new ColumnHeader();
-            tabControl1 = new TabControl();
             Dijkstra = new TabPage();
             listView_Deikstra = new ListView();
             columnHeader19 = new ColumnHeader();
             columnHeader20 = new ColumnHeader();
             columnHeader21 = new ColumnHeader();
-            columnHeader1 = new ColumnHeader();
-            columnHeader2 = new ColumnHeader();
-            columnHeader3 = new ColumnHeader();
-            columnHeader4 = new ColumnHeader();
-            columnHeader5 = new ColumnHeader();
-            columnHeader6 = new ColumnHeader();
+            tabControl1 = new TabControl();
             panel1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
             menuStrip1.SuspendLayout();
-            WestFirst.SuspendLayout();
             XY.SuspendLayout();
             GA.SuspendLayout();
-            tabControl1.SuspendLayout();
             Dijkstra.SuspendLayout();
+            tabControl1.SuspendLayout();
             SuspendLayout();
             // 
             // panel1
@@ -163,7 +162,7 @@ namespace HDLNoCGen
             menuStrip1.BackColor = SystemColors.Control;
             menuStrip1.GripMargin = new Padding(2);
             menuStrip1.ImageScalingSize = new Size(20, 20);
-            menuStrip1.Items.AddRange(new ToolStripItem[] { ToolStripMenuItem_File, modellingToolStripMenuItem, справкаToolStripMenuItem });
+            menuStrip1.Items.AddRange(new ToolStripItem[] { ToolStripMenuItem_File, projectToolStripMenuItem, modellingToolStripMenuItem, справкаToolStripMenuItem });
             menuStrip1.Location = new Point(0, 0);
             menuStrip1.MaximumSize = new Size(15000, 15385);
             menuStrip1.Name = "menuStrip1";
@@ -173,17 +172,47 @@ namespace HDLNoCGen
             // 
             // ToolStripMenuItem_File
             // 
-            ToolStripMenuItem_File.DropDownItems.AddRange(new ToolStripItem[] { базаДанныхToolStripMenuItem });
+            ToolStripMenuItem_File.DropDownItems.AddRange(new ToolStripItem[] { создатьПроектToolStripMenuItem, открытьПроектToolStripMenuItem, toolStripSeparator2, базаДанныхToolStripMenuItem });
             ToolStripMenuItem_File.Name = "ToolStripMenuItem_File";
             ToolStripMenuItem_File.Size = new Size(48, 20);
             ToolStripMenuItem_File.Text = "Файл";
             // 
+            // создатьПроектToolStripMenuItem
+            // 
+            создатьПроектToolStripMenuItem.Name = "создатьПроектToolStripMenuItem";
+            создатьПроектToolStripMenuItem.Size = new Size(167, 22);
+            создатьПроектToolStripMenuItem.Text = "Создать проект...";
+            // 
+            // открытьПроектToolStripMenuItem
+            // 
+            открытьПроектToolStripMenuItem.Name = "открытьПроектToolStripMenuItem";
+            открытьПроектToolStripMenuItem.Size = new Size(167, 22);
+            открытьПроектToolStripMenuItem.Text = "Открыть проект";
+            // 
+            // toolStripSeparator2
+            // 
+            toolStripSeparator2.Name = "toolStripSeparator2";
+            toolStripSeparator2.Size = new Size(164, 6);
+            // 
             // базаДанныхToolStripMenuItem
             // 
             базаДанныхToolStripMenuItem.Name = "базаДанныхToolStripMenuItem";
-            базаДанныхToolStripMenuItem.Size = new Size(180, 22);
+            базаДанныхToolStripMenuItem.Size = new Size(167, 22);
             базаДанныхToolStripMenuItem.Text = "База данных...";
             // 
+            // projectToolStripMenuItem
+            // 
+            projectToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { projectPropertiesToolStripMenuItem });
+            projectToolStripMenuItem.Name = "projectToolStripMenuItem";
+            projectToolStripMenuItem.Size = new Size(59, 20);
+            projectToolStripMenuItem.Text = "Проект";
+            // 
+            // projectPropertiesToolStripMenuItem
+            // 
+            projectPropertiesToolStripMenuItem.Name = "projectPropertiesToolStripMenuItem";
+            projectPropertiesToolStripMenuItem.Size = new Size(172, 22);
+            projectPropertiesToolStripMenuItem.Text = "Свойства проекта";
+            // 
             // modellingToolStripMenuItem
             // 
             modellingToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { построитьГрафToolStripMenuItem, routingToolStripMenuItem, compilationToolStripMenuItem, toolStripSeparator1, настройкиToolStripMenuItem });
@@ -293,48 +322,41 @@ namespace HDLNoCGen
             BuildTopology.UseVisualStyleBackColor = true;
             BuildTopology.Click += BuildTopology_Click;
             // 
-            // WestFirst
+            // columnHeader1
             // 
-            WestFirst.Controls.Add(listView_WestFirst);
-            WestFirst.Location = new Point(4, 24);
-            WestFirst.Name = "WestFirst";
-            WestFirst.Padding = new Padding(3);
-            WestFirst.Size = new Size(335, 485);
-            WestFirst.TabIndex = 6;
-            WestFirst.Text = "WestFirst";
-            WestFirst.UseVisualStyleBackColor = true;
+            columnHeader1.DisplayIndex = 0;
+            columnHeader1.Text = "A-B";
+            columnHeader1.Width = 40;
+            // 
+            // columnHeader2
+            // 
+            columnHeader2.DisplayIndex = 1;
+            columnHeader2.Text = "Маршрут";
+            columnHeader2.Width = 233;
             // 
-            // listView_WestFirst
+            // columnHeader3
             // 
-            listView_WestFirst.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
-            listView_WestFirst.Columns.AddRange(new ColumnHeader[] { columnHeader16, columnHeader17, columnHeader18 });
-            listView_WestFirst.FullRowSelect = true;
-            listView_WestFirst.GridLines = true;
-            listView_WestFirst.HeaderStyle = ColumnHeaderStyle.Nonclickable;
-            listView_WestFirst.Location = new Point(0, 0);
-            listView_WestFirst.Margin = new Padding(4, 5, 4, 5);
-            listView_WestFirst.MultiSelect = false;
-            listView_WestFirst.Name = "listView_WestFirst";
-            listView_WestFirst.Size = new Size(335, 485);
-            listView_WestFirst.TabIndex = 19;
-            listView_WestFirst.UseCompatibleStateImageBehavior = false;
-            listView_WestFirst.View = View.Details;
-            listView_WestFirst.ItemActivate += listView_WestFirst_ItemActivate;
+            columnHeader3.DisplayIndex = 2;
+            columnHeader3.Text = "L";
+            columnHeader3.Width = 30;
             // 
-            // columnHeader16
+            // columnHeader4
             // 
-            columnHeader16.Text = "A-B";
-            columnHeader16.Width = 40;
+            columnHeader4.DisplayIndex = 0;
+            columnHeader4.Text = "A-B";
+            columnHeader4.Width = 40;
             // 
-            // columnHeader17
+            // columnHeader5
             // 
-            columnHeader17.Text = "Маршрут";
-            columnHeader17.Width = 233;
+            columnHeader5.DisplayIndex = 1;
+            columnHeader5.Text = "Маршрут";
+            columnHeader5.Width = 233;
             // 
-            // columnHeader18
+            // columnHeader6
             // 
-            columnHeader18.Text = "L";
-            columnHeader18.Width = 30;
+            columnHeader6.DisplayIndex = 2;
+            columnHeader6.Text = "L";
+            columnHeader6.Width = 30;
             // 
             // XY
             // 
@@ -423,21 +445,6 @@ namespace HDLNoCGen
             columnHeader12.Text = "L";
             columnHeader12.Width = 30;
             // 
-            // tabControl1
-            // 
-            tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
-            tabControl1.Controls.Add(Dijkstra);
-            tabControl1.Controls.Add(GA);
-            tabControl1.Controls.Add(XY);
-            tabControl1.Controls.Add(WestFirst);
-            tabControl1.Location = new Point(1049, 56);
-            tabControl1.Margin = new Padding(4, 5, 4, 5);
-            tabControl1.Name = "tabControl1";
-            tabControl1.SelectedIndex = 0;
-            tabControl1.Size = new Size(343, 513);
-            tabControl1.TabIndex = 20;
-            tabControl1.Selected += tabControl1_Selected;
-            // 
             // Dijkstra
             // 
             Dijkstra.Controls.Add(listView_Deikstra);
@@ -482,43 +489,21 @@ namespace HDLNoCGen
             columnHeader21.Text = "L";
             columnHeader21.Width = 30;
             // 
-            // columnHeader1
-            // 
-            columnHeader1.DisplayIndex = 0;
-            columnHeader1.Text = "A-B";
-            columnHeader1.Width = 40;
-            // 
-            // columnHeader2
-            // 
-            columnHeader2.DisplayIndex = 1;
-            columnHeader2.Text = "Маршрут";
-            columnHeader2.Width = 233;
-            // 
-            // columnHeader3
-            // 
-            columnHeader3.DisplayIndex = 2;
-            columnHeader3.Text = "L";
-            columnHeader3.Width = 30;
-            // 
-            // columnHeader4
-            // 
-            columnHeader4.DisplayIndex = 0;
-            columnHeader4.Text = "A-B";
-            columnHeader4.Width = 40;
-            // 
-            // columnHeader5
-            // 
-            columnHeader5.DisplayIndex = 1;
-            columnHeader5.Text = "Маршрут";
-            columnHeader5.Width = 233;
-            // 
-            // columnHeader6
+            // tabControl1
             // 
-            columnHeader6.DisplayIndex = 2;
-            columnHeader6.Text = "L";
-            columnHeader6.Width = 30;
+            tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
+            tabControl1.Controls.Add(Dijkstra);
+            tabControl1.Controls.Add(GA);
+            tabControl1.Controls.Add(XY);
+            tabControl1.Location = new Point(1049, 56);
+            tabControl1.Margin = new Padding(4, 5, 4, 5);
+            tabControl1.Name = "tabControl1";
+            tabControl1.SelectedIndex = 0;
+            tabControl1.Size = new Size(343, 513);
+            tabControl1.TabIndex = 20;
+            tabControl1.Selected += tabControl1_Selected;
             // 
-            // Form_Main
+            // Form_Main_Legacy
             // 
             AutoScaleMode = AutoScaleMode.Inherit;
             ClientSize = new Size(1405, 638);
@@ -535,18 +520,17 @@ namespace HDLNoCGen
             MainMenuStrip = menuStrip1;
             Margin = new Padding(4, 5, 4, 5);
             MinimumSize = new Size(388, 185);
-            Name = "Form_Main";
+            Name = "Form_Main_Legacy";
             Text = "Визуализация топологий";
             Resize += Form1_Resize;
             panel1.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
             menuStrip1.ResumeLayout(false);
             menuStrip1.PerformLayout();
-            WestFirst.ResumeLayout(false);
             XY.ResumeLayout(false);
             GA.ResumeLayout(false);
-            tabControl1.ResumeLayout(false);
             Dijkstra.ResumeLayout(false);
+            tabControl1.ResumeLayout(false);
             ResumeLayout(false);
             PerformLayout();
         }
@@ -574,27 +558,6 @@ namespace HDLNoCGen
         private System.Windows.Forms.ToolStripMenuItem отрисовкаToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem симуляцияToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem базаДанныхToolStripMenuItem;
-        private System.Windows.Forms.TabPage WestFirst;
-        private System.Windows.Forms.ListView listView_WestFirst;
-        private System.Windows.Forms.ColumnHeader columnHeader16;
-        private System.Windows.Forms.ColumnHeader columnHeader17;
-        private System.Windows.Forms.ColumnHeader columnHeader18;
-        private System.Windows.Forms.TabPage XY;
-        private System.Windows.Forms.ListView listView_XY;
-        private System.Windows.Forms.ColumnHeader columnHeader13;
-        private System.Windows.Forms.ColumnHeader columnHeader14;
-        private System.Windows.Forms.ColumnHeader columnHeader15;
-        private System.Windows.Forms.TabPage GA;
-        private System.Windows.Forms.ListView listView_GA;
-        private System.Windows.Forms.ColumnHeader columnHeader10;
-        private System.Windows.Forms.ColumnHeader columnHeader11;
-        private System.Windows.Forms.ColumnHeader columnHeader12;
-        private System.Windows.Forms.TabControl tabControl1;
-        private System.Windows.Forms.TabPage Dijkstra;
-        private System.Windows.Forms.ListView listView_Deikstra;
-        private System.Windows.Forms.ColumnHeader columnHeader19;
-        private System.Windows.Forms.ColumnHeader columnHeader20;
-        private System.Windows.Forms.ColumnHeader columnHeader21;
         private System.Windows.Forms.ColumnHeader columnHeader1;
         private System.Windows.Forms.ColumnHeader columnHeader2;
         private System.Windows.Forms.ColumnHeader columnHeader3;
@@ -604,6 +567,27 @@ namespace HDLNoCGen
         private System.Windows.Forms.ToolStripMenuItem справкаToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem userManualToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem developerManualToolStripMenuItem;
+        private ToolStripMenuItem создатьПроектToolStripMenuItem;
+        private ToolStripMenuItem открытьПроектToolStripMenuItem;
+        private ToolStripSeparator toolStripSeparator2;
+        private TabPage XY;
+        private ListView listView_XY;
+        private ColumnHeader columnHeader13;
+        private ColumnHeader columnHeader14;
+        private ColumnHeader columnHeader15;
+        private TabPage GA;
+        private ListView listView_GA;
+        private ColumnHeader columnHeader10;
+        private ColumnHeader columnHeader11;
+        private ColumnHeader columnHeader12;
+        private TabPage Dijkstra;
+        private ListView listView_Deikstra;
+        private ColumnHeader columnHeader19;
+        private ColumnHeader columnHeader20;
+        private ColumnHeader columnHeader21;
+        private TabControl tabControl1;
+        private ToolStripMenuItem projectToolStripMenuItem;
+        private ToolStripMenuItem projectPropertiesToolStripMenuItem;
     }
 }
 
diff --git a/GUI/GUI/Form_Main.cs b/GUI/GUI/Form_Main_Legacy.cs
similarity index 96%
rename from GUI/GUI/Form_Main.cs
rename to GUI/GUI/Form_Main_Legacy.cs
index 99b6577be1026a2d84a33934638b07d2073c20d9..814cfa95f06f110ab879855da2370e565a8abcd4 100644
--- a/GUI/GUI/Form_Main.cs
+++ b/GUI/GUI/Form_Main_Legacy.cs
@@ -2,7 +2,7 @@
 
 namespace HDLNoCGen
 {
-    public partial class Form_Main : Form
+    public partial class Form_Main_Legacy : Form
     {
         private static Task CreateGraphFromBufferThread, RoutingThread, DrawGraphThread, DrawRouteThread;
         Task[] ThreadWatcher = { CreateGraphFromBufferThread, RoutingThread, DrawGraphThread, DrawRouteThread };
@@ -16,7 +16,7 @@ namespace HDLNoCGen
 
         Dictionary<string, Dictionary<string, Dictionary<string, double>>> algorithmMetrics;
 
-        public Form_Main()
+        public Form_Main_Legacy()
         {
             Settings.Load();
             InitializeComponent();
@@ -34,7 +34,6 @@ namespace HDLNoCGen
             //tabControl1.TabPages.Remove(Dijkstra); // алгоритм дейкстры
             tabControl1.TabPages.Remove(GA);
             tabControl1.TabPages.Remove(XY);
-            tabControl1.TabPages.Remove(WestFirst);
 
             algorithmMetrics = new Dictionary<string, Dictionary<string, Dictionary<string, double>>>()
             {
@@ -253,7 +252,6 @@ namespace HDLNoCGen
                 listView.Invoke(new Action(() => listView.Items.Clear()));
                 tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(GA)));
                 tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(XY)));
-                tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(WestFirst)));
                 label_diam_graph.Invoke(new Action(() => label_diam_graph.Text = "D = -"));
                 label_efficiency_algorithm.Invoke(new Action(() => label_efficiency_algorithm.Text = "E = -"));
             }
@@ -297,17 +295,6 @@ namespace HDLNoCGen
             GC.Collect();
         }
 
-        private void listView_WestFirst_ItemActivate(object sender, EventArgs e)
-        {
-            ListViewItem item = listView_WestFirst.SelectedItems[0];
-            selected_route = item.SubItems[1].Text;
-
-            Draw_graph();
-            Draw_route(selected_route);
-
-            GC.Collect();
-        }
-
         private void tabControl1_Selected(object sender, TabControlEventArgs e)
         {
             try
@@ -395,7 +382,6 @@ namespace HDLNoCGen
                 listView_Deikstra.Items.Clear();
                 tabControl1.TabPages.Remove(GA);
                 tabControl1.TabPages.Remove(XY);
-                tabControl1.TabPages.Remove(WestFirst);
                 ButtonCompile.Enabled = false;
                 compilationToolStripMenuItem.Enabled = false;
 
@@ -471,7 +457,6 @@ namespace HDLNoCGen
 
                         tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(GA)));
                         tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(XY)));
-                        tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(WestFirst)));
 
                         if (Settings.Get_checked_routing_algorithms_circulant(0))
                         {
@@ -519,7 +504,6 @@ namespace HDLNoCGen
                         {
                             tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(GA)));
                             tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(XY)));
-                            tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(WestFirst)));
 
                             GraphMesh graphMesh = graph as GraphMesh;
 
@@ -547,7 +531,6 @@ namespace HDLNoCGen
                         {
                             tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(GA)));
                             tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(XY)));
-                            tabControl1.Invoke(new Action(() => tabControl1.TabPages.Remove(WestFirst)));
 
                             GraphTorus graphTorus = graph as GraphTorus;
 
@@ -654,5 +637,10 @@ namespace HDLNoCGen
             }
 
         }
+
+        private void Form_Main_Legacy_Load(object sender, EventArgs e)
+        {
+
+        }
     }
 }
\ No newline at end of file
diff --git a/GUI/GUI/Form_Main.resx b/GUI/GUI/Form_Main_Legacy.resx
similarity index 100%
rename from GUI/GUI/Form_Main.resx
rename to GUI/GUI/Form_Main_Legacy.resx
diff --git a/GUI/GUI/GUI.csproj b/GUI/GUI/GUI.csproj
index 7ba3d61b1d25d8532659ea59e0c20cdf49818c6d..37c75b4d495ce3138f1524628da123fe83f2f75e 100644
--- a/GUI/GUI/GUI.csproj
+++ b/GUI/GUI/GUI.csproj
@@ -22,4 +22,19 @@
     <PackageReference Include="Npgsql" Version="9.0.3" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Compile Update="Properties\Resources.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Update="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+
 </Project>
\ No newline at end of file
diff --git a/GUI/GUI/GUI.csproj.user b/GUI/GUI/GUI.csproj.user
index 34fcf50b257be186a71787b9f0a39a7c73f117b7..1e18a8595fb78a63a44da490a9d6dead1a1e049e 100644
--- a/GUI/GUI/GUI.csproj.user
+++ b/GUI/GUI/GUI.csproj.user
@@ -1,10 +1,13 @@
 п»ї<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
+    <Compile Update="FormMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="FormSettings.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Update="Form_Main.cs">
+    <Compile Update="Form_Main_Legacy.cs">
       <SubType>Form</SubType>
     </Compile>
   </ItemGroup>
diff --git a/GUI/GUI/Program.cs b/GUI/GUI/Program.cs
index 60ee087213d1ee9191583e572ea0b4cc165174f4..66f97906c3dc2b073e22254773110096e64ea92b 100644
--- a/GUI/GUI/Program.cs
+++ b/GUI/GUI/Program.cs
@@ -11,7 +11,7 @@ namespace HDLNoCGen
             // To customize application configuration such as set high DPI settings or default font,
             // see https://aka.ms/applicationconfiguration.
             ApplicationConfiguration.Initialize();
-            Application.Run(new Form_Main());
+            Application.Run(new FormMain());
         }
     }
 }
\ No newline at end of file
diff --git a/GUI/GUI/Properties/Resources.Designer.cs b/GUI/GUI/Properties/Resources.Designer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7552641ad770e140cdf4d540286295991a9cff9f
--- /dev/null
+++ b/GUI/GUI/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+п»ї//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GUI.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
+    /// </summary>
+    // Этот класс создан автоматически классом StronglyTypedResourceBuilder
+    // с помощью такого средства, как ResGen или Visual Studio.
+    // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
+    // с параметром /str или перестройте свой проект VS.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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() {
+        }
+        
+        /// <summary>
+        ///   Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GUI.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Перезаписывает свойство CurrentUICulture текущего потока для всех
+        ///   обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
+        /// </summary>
+        [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/GUI/GUI/Properties/Resources.resx b/GUI/GUI/Properties/Resources.resx
new file mode 100644
index 0000000000000000000000000000000000000000..1af7de150c99c12dd67a509fe57c10d63e4eeb04
--- /dev/null
+++ b/GUI/GUI/Properties/Resources.resx
@@ -0,0 +1,120 @@
+п»ї<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/GUI/GUI/Resources/373753366.png b/GUI/GUI/Resources/373753366.png
new file mode 100644
index 0000000000000000000000000000000000000000..63472801742e912b9a1a13f4521c6b69978c5c0a
Binary files /dev/null and b/GUI/GUI/Resources/373753366.png differ