diff --git a/Financial_Candlestick_Patterns.sln b/Financial_Candlestick_Patterns.sln index 7b41250..a2ae507 100644 --- a/Financial_Candlestick_Patterns.sln +++ b/Financial_Candlestick_Patterns.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples_Formations", "Exam EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples_Patterns", "Examples_Patterns\Examples_Patterns.csproj", "{23135CD8-163D-4C86-8017-1036D76F5C0D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GraphCreator", "GraphCreator\GraphCreator.csproj", "{D100D9CC-005D-4220-AEA2-63D008FA8A28}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {23135CD8-163D-4C86-8017-1036D76F5C0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {23135CD8-163D-4C86-8017-1036D76F5C0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {23135CD8-163D-4C86-8017-1036D76F5C0D}.Release|Any CPU.Build.0 = Release|Any CPU + {D100D9CC-005D-4220-AEA2-63D008FA8A28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D100D9CC-005D-4220-AEA2-63D008FA8A28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D100D9CC-005D-4220-AEA2-63D008FA8A28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D100D9CC-005D-4220-AEA2-63D008FA8A28}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/GraphCreator/Form1.Designer.cs b/GraphCreator/Form1.Designer.cs new file mode 100644 index 0000000..754305b --- /dev/null +++ b/GraphCreator/Form1.Designer.cs @@ -0,0 +1,39 @@ +namespace GraphCreator +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "Form1"; + } + + #endregion + } +} diff --git a/GraphCreator/Form1.cs b/GraphCreator/Form1.cs new file mode 100644 index 0000000..c02730b --- /dev/null +++ b/GraphCreator/Form1.cs @@ -0,0 +1,10 @@ +namespace GraphCreator +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + } +} diff --git a/GraphCreator/Form1.resx b/GraphCreator/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/GraphCreator/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/GraphCreator/GraphCreator.csproj b/GraphCreator/GraphCreator.csproj new file mode 100644 index 0000000..abe5ceb --- /dev/null +++ b/GraphCreator/GraphCreator.csproj @@ -0,0 +1,20 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + + + + + + + + + + \ No newline at end of file diff --git a/GraphCreator/Program.cs b/GraphCreator/Program.cs new file mode 100644 index 0000000..dfd9d3b --- /dev/null +++ b/GraphCreator/Program.cs @@ -0,0 +1,121 @@ +using Candlestick_Patterns; +using System.Windows.Forms.DataVisualization.Charting; +using GraphMaker; + +namespace Dino.Tools.WebMonitor +{ + public class Graph : Form + { + private System.ComponentModel.IContainer components = null; + System.Windows.Forms.DataVisualization.Charting.Chart chart1; + + IFiboTester _fiboTester = new FiboTester(); + + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Graph()); + } + public Graph() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + chart1.Series.Clear(); + var series1 = new System.Windows.Forms.DataVisualization.Charting.Series + { + Name = "graph", + Color = System.Drawing.Color.Green, + IsVisibleInLegend = false, + IsXValueIndexed = true, + ChartType = SeriesChartType.Line + }; + + this.chart1.Series.Add(series1); + + var patternName = "BullishButterfly"; + //var points = GetGraphData(patternName); + var points = new List() + { + new ZigZagObject() {Close = 2.5M, Signal = false}, + new ZigZagObject() {Close = 3.5M, Signal = true}, + new ZigZagObject() {Close = 4.5M, Signal = true}, + new ZigZagObject() {Close = 4.5M, Signal = false} , + }; + + for (int i = 0; i < points.Count; i++) + { + var item = points[i]; + series1.Points.AddXY(i, item.Close); + if (item.Signal == true) + { + series1.Points[i].MarkerStyle = MarkerStyle.Triangle; + series1.Points[i].MarkerSize = 5; + series1.Points[i].MarkerColor = Color.Red; + } + } + + chart1.Invalidate(); + } + + private List GetGraphData(string patternName) + { + return _fiboTester.GetGraphData(patternName); + } + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + ChartArea chartArea1 = new ChartArea(); + Legend legend1 = new Legend(); + chart1 = new Chart(); + ((System.ComponentModel.ISupportInitialize)chart1).BeginInit(); + SuspendLayout(); + // + // chart1 + // + chartArea1.Name = "ChartArea1"; + chart1.ChartAreas.Add(chartArea1); + chart1.Dock = DockStyle.Fill; + legend1.Name = "Legend1"; + chart1.Legends.Add(legend1); + chart1.Location = new Point(0, 0); + chart1.Margin = new Padding(4, 5, 4, 5); + chart1.Name = "chart1"; + chart1.Size = new Size(379, 403); + chart1.TabIndex = 0; + chart1.Text = "chart1"; + chart1.Click += chart1_Click; + // + // Graph + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(379, 403); + Controls.Add(chart1); + Margin = new Padding(4, 5, 4, 5); + Name = "Graph"; + Text = "Graph"; + Load += Form1_Load; + ((System.ComponentModel.ISupportInitialize)chart1).EndInit(); + ResumeLayout(false); + } + + private void chart1_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/GraphCreator/Program.resx b/GraphCreator/Program.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/GraphCreator/Program.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/GraphMaker/FiboTester.cs b/GraphMaker/FiboTester.cs index 251e178..46d3072 100644 --- a/GraphMaker/FiboTester.cs +++ b/GraphMaker/FiboTester.cs @@ -1,32 +1,60 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Candlestick_Patterns; -using OHLC_Candlestick_Patterns; +using Candlestick_Patterns; +using Newtonsoft.Json; using ScottPlot; namespace GraphMaker { - internal interface IFiboTester + public interface IFiboTester { void ShowOnGraph(List dataOhlcv, string patternName); + List GetGraphData(string patternName); + Task> GetPoints(string patternName); } - - internal class FiboTester : IFiboTester + + public class FiboTester : IFiboTester { IFibonacci _fibonacci; + public async Task> GetPoints(string patternName) + { + string json = string.Empty; + ISignals _signals = new Signals(); + IFiboTester _fiboTester = new FiboTester(); + IFibonacci _fibonacci; + + var client = new HttpClient(); + var url = "https://gist.githubusercontent.com/przemyslawbak/c90528453d512a8d85ad2deea5cf6ad2/raw/aapl_us_d.csv"; + + using (HttpResponseMessage response = await client.GetAsync(url)) + { + using (HttpContent content = response.Content) + { + json = content.ReadAsStringAsync().Result; + } + } + + var dataOhlcv = JsonConvert.DeserializeObject>(json).Select(x => new OhlcvObject() + { + Open = x.Open, + High = x.High, + Low = x.Low, + Close = x.Close, + Volume = x.Volume, + }).Reverse().ToList(); + + + _fibonacci = new Fibonacci(dataOhlcv); + var signalList = _fibonacci.GetFibonacciSignalsList(patternName); + return signalList; + } void IFiboTester.ShowOnGraph(List dataOhlcv, string patternName) { _fibonacci = new Fibonacci(dataOhlcv); var signalList = _fibonacci.GetFibonacciSignalsList(patternName); - GetGraph(signalList); + GetGraph(signalList, patternName); } - static void GetGraph(List points) + static void GetGraph(List points, string patternName) { var plt = new Plot(); var numbers = new List(); @@ -47,6 +75,7 @@ static void GetGraph(List points) var numbersArray = numbers.ToArray(); var myScatter = plt.Add.Scatter(numbersArray, pointsPlot); + ScottPlot.Palettes.Category20 palette = new(); for (int i = 0; i < points.Count; i++) { @@ -59,8 +88,8 @@ static void GetGraph(List points) mp.MarkerStyle.FillColor = palette.GetColor(8); mp.MarkerStyle.Size = 1.5F; mp.MarkerStyle.OutlineColor = palette.GetColor(8); - //mp.MarkerStyle.OutlineWidth = 2; - //mp.MarkerStyle.LineWidth = 2f; + mp.MarkerStyle.OutlineWidth = 2; + mp.MarkerStyle.LineWidth = 2f; mp.MarkerStyle.LineColor = palette.GetColor(10); } } @@ -76,12 +105,17 @@ static void GetGraph(List points) //myScatter.MaxRenderIndex = points.Count; // save - var fn = $"Plot_points.png"; - // plt.SavePng(fn, 10000, 1000); - fn = $"Plot_points.svg"; + var fn = $"Data\\graph_{patternName}.svg"; plt.SaveSvg(fn, 50000, 2000); } + + public List GetGraphData(string patternName) + { + var signalList = GetPoints(patternName); + List points = signalList.Result; + return points; + } } } diff --git a/GraphMaker/Program.cs b/GraphMaker/Program.cs index 8e42ec8..8e2d3cc 100644 --- a/GraphMaker/Program.cs +++ b/GraphMaker/Program.cs @@ -3,8 +3,8 @@ using Newtonsoft.Json; string json = string.Empty; -ISignals _signals = new Signals(); IFiboTester _fiboTester = new FiboTester(); + var client = new HttpClient(); var url = "https://gist.githubusercontent.com/przemyslawbak/c90528453d512a8d85ad2deea5cf6ad2/raw/aapl_us_d.csv"; @@ -26,3 +26,5 @@ }).Reverse().ToList(); _fiboTester.ShowOnGraph(dataOhlcv, "BullishButterfly"); + + diff --git a/GraphMaker/graph_BullishButterfly.svg b/GraphMaker/graph_BullishButterfly.svg new file mode 100644 index 0000000..10fce40 --- /dev/null +++ b/GraphMaker/graph_BullishButterfly.svg @@ -0,0 +1,13092 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -225 + + + + -220 + + + + -215 + + + + -210 + + + + -205 + + + + -200 + + + + -195 + + + + -190 + + + + -185 + + + + -180 + + + + -175 + + + + -170 + + + + -165 + + + + -160 + + + + -155 + + + + -150 + + + + -145 + + + + -140 + + + + -135 + + + + -130 + + + + -125 + + + + -120 + + + + -115 + + + + -110 + + + + -105 + + + + -100 + + + + -95 + + + + -90 + + + + -85 + + + + -80 + + + + -75 + + + + -70 + + + + -65 + + + + -60 + + + + -55 + + + + -50 + + + + -45 + + + + -40 + + + + -35 + + + + -30 + + + + -25 + + + + -20 + + + + -15 + + + + -10 + + + + -5 + + + + 0 + + + + 5 + + + + 10 + + + + 15 + + + + 20 + + + + 25 + + + + 30 + + + + 35 + + + + 40 + + + + 45 + + + + 50 + + + + 55 + + + + 60 + + + + 65 + + + + 70 + + + + 75 + + + + 80 + + + + 85 + + + + 90 + + + + 95 + + + + 100 + + + + 105 + + + + 110 + + + + 115 + + + + 120 + + + + 125 + + + + 130 + + + + 135 + + + + 140 + + + + 145 + + + + 150 + + + + 155 + + + + 160 + + + + 165 + + + + 170 + + + + 175 + + + + 180 + + + + 185 + + + + 190 + + + + 195 + + + + 200 + + + + 205 + + + + 210 + + + + 215 + + + + 220 + + + + 225 + + + + 230 + + + + 235 + + + + 240 + + + + 245 + + + + 250 + + + + 255 + + + + 260 + + + + 265 + + + + 270 + + + + 275 + + + + 280 + + + + 285 + + + + 290 + + + + 295 + + + + 300 + + + + 305 + + + + 310 + + + + 315 + + + + 320 + + + + 325 + + + + 330 + + + + 335 + + + + 340 + + + + 345 + + + + 350 + + + + 355 + + + + 360 + + + + 365 + + + + 370 + + + + 375 + + + + 380 + + + + 385 + + + + 390 + + + + 395 + + + + 400 + + + + 405 + + + + 410 + + + + 415 + + + + 420 + + + + 425 + + + + 430 + + + + 435 + + + + 440 + + + + 445 + + + + 450 + + + + 455 + + + + 460 + + + + 465 + + + + 470 + + + + 475 + + + + 480 + + + + 485 + + + + 490 + + + + 495 + + + + 500 + + + + 505 + + + + 510 + + + + 515 + + + + 520 + + + + 525 + + + + 530 + + + + 535 + + + + 540 + + + + 545 + + + + 550 + + + + 555 + + + + 560 + + + + 565 + + + + 570 + + + + 575 + + + + 580 + + + + 585 + + + + 590 + + + + 595 + + + + 600 + + + + 605 + + + + 610 + + + + 615 + + + + 620 + + + + 625 + + + + 630 + + + + 635 + + + + 640 + + + + 645 + + + + 650 + + + + 655 + + + + 660 + + + + 665 + + + + 670 + + + + 675 + + + + 680 + + + + 685 + + + + 690 + + + + 695 + + + + 700 + + + + 705 + + + + 710 + + + + 715 + + + + 720 + + + + 725 + + + + 730 + + + + 735 + + + + 740 + + + + 745 + + + + 750 + + + + 755 + + + + 760 + + + + 765 + + + + 770 + + + + 775 + + + + 780 + + + + 785 + + + + 790 + + + + 795 + + + + 800 + + + + 805 + + + + 810 + + + + 815 + + + + 820 + + + + 825 + + + + 830 + + + + 835 + + + + 840 + + + + 845 + + + + 850 + + + + 855 + + + + 860 + + + + 865 + + + + 870 + + + + 875 + + + + 880 + + + + 885 + + + + 890 + + + + 895 + + + + 900 + + + + 905 + + + + 910 + + + + 915 + + + + 920 + + + + 925 + + + + 930 + + + + 935 + + + + 940 + + + + 945 + + + + 950 + + + + 955 + + + + 960 + + + + 965 + + + + 970 + + + + 975 + + + + 980 + + + + 985 + + + + 990 + + + + 995 + + + + 1,000 + + + + 1,005 + + + + 1,010 + + + + 1,015 + + + + 1,020 + + + + 1,025 + + + + 1,030 + + + + 1,035 + + + + 1,040 + + + + 1,045 + + + + 1,050 + + + + 1,055 + + + + 1,060 + + + + 1,065 + + + + 1,070 + + + + 1,075 + + + + 1,080 + + + + 1,085 + + + + 1,090 + + + + 1,095 + + + + 1,100 + + + + 1,105 + + + + 1,110 + + + + 1,115 + + + + 1,120 + + + + 1,125 + + + + 1,130 + + + + 1,135 + + + + 1,140 + + + + 1,145 + + + + 1,150 + + + + 1,155 + + + + 1,160 + + + + 1,165 + + + + 1,170 + + + + 1,175 + + + + 1,180 + + + + 1,185 + + + + 1,190 + + + + 1,195 + + + + 1,200 + + + + 1,205 + + + + 1,210 + + + + 1,215 + + + + 1,220 + + + + 1,225 + + + + 1,230 + + + + 1,235 + + + + 1,240 + + + + 1,245 + + + + 1,250 + + + + 1,255 + + + + 1,260 + + + + 1,265 + + + + 1,270 + + + + 1,275 + + + + 1,280 + + + + 1,285 + + + + 1,290 + + + + 1,295 + + + + 1,300 + + + + 1,305 + + + + 1,310 + + + + 1,315 + + + + 1,320 + + + + 1,325 + + + + 1,330 + + + + 1,335 + + + + 1,340 + + + + 1,345 + + + + 1,350 + + + + 1,355 + + + + 1,360 + + + + 1,365 + + + + 1,370 + + + + 1,375 + + + + 1,380 + + + + 1,385 + + + + 1,390 + + + + 1,395 + + + + 1,400 + + + + 1,405 + + + + 1,410 + + + + 1,415 + + + + 1,420 + + + + 1,425 + + + + 1,430 + + + + 1,435 + + + + 1,440 + + + + 1,445 + + + + 1,450 + + + + 1,455 + + + + 1,460 + + + + 1,465 + + + + 1,470 + + + + 1,475 + + + + 1,480 + + + + 1,485 + + + + 1,490 + + + + 1,495 + + + + 1,500 + + + + 1,505 + + + + 1,510 + + + + 1,515 + + + + 1,520 + + + + 1,525 + + + + 1,530 + + + + 1,535 + + + + 1,540 + + + + 1,545 + + + + 1,550 + + + + 1,555 + + + + 1,560 + + + + 1,565 + + + + 1,570 + + + + 1,575 + + + + 1,580 + + + + 1,585 + + + + 1,590 + + + + 1,595 + + + + 1,600 + + + + 1,605 + + + + 1,610 + + + + 1,615 + + + + 1,620 + + + + 1,625 + + + + 1,630 + + + + 1,635 + + + + 1,640 + + + + 1,645 + + + + 1,650 + + + + 1,655 + + + + 1,660 + + + + 1,665 + + + + 1,670 + + + + 1,675 + + + + 1,680 + + + + 1,685 + + + + 1,690 + + + + 1,695 + + + + 1,700 + + + + 1,705 + + + + 1,710 + + + + 1,715 + + + + 1,720 + + + + 1,725 + + + + 1,730 + + + + 1,735 + + + + 1,740 + + + + 1,745 + + + + 1,750 + + + + 1,755 + + + + 1,760 + + + + 1,765 + + + + 1,770 + + + + 1,775 + + + + 1,780 + + + + 1,785 + + + + 1,790 + + + + 1,795 + + + + 1,800 + + + + 1,805 + + + + 1,810 + + + + 1,815 + + + + 1,820 + + + + 1,825 + + + + 1,830 + + + + 1,835 + + + + 1,840 + + + + 1,845 + + + + 1,850 + + + + 1,855 + + + + 1,860 + + + + 1,865 + + + + 1,870 + + + + 1,875 + + + + 1,880 + + + + 1,885 + + + + 1,890 + + + + 1,895 + + + + 1,900 + + + + 1,905 + + + + 1,910 + + + + 1,915 + + + + 1,920 + + + + 1,925 + + + + 1,930 + + + + 1,935 + + + + 1,940 + + + + 1,945 + + + + 1,950 + + + + 1,955 + + + + 1,960 + + + + 1,965 + + + + 1,970 + + + + 1,975 + + + + 1,980 + + + + 1,985 + + + + 1,990 + + + + 1,995 + + + + 2,000 + + + + 2,005 + + + + 2,010 + + + + 2,015 + + + + 2,020 + + + + 2,025 + + + + 2,030 + + + + 2,035 + + + + 2,040 + + + + 2,045 + + + + 2,050 + + + + 2,055 + + + + 2,060 + + + + 2,065 + + + + 2,070 + + + + 2,075 + + + + 2,080 + + + + 2,085 + + + + 2,090 + + + + 2,095 + + + + 2,100 + + + + 2,105 + + + + 2,110 + + + + 2,115 + + + + 2,120 + + + + 2,125 + + + + 2,130 + + + + 2,135 + + + + 2,140 + + + + 2,145 + + + + 2,150 + + + + 2,155 + + + + 2,160 + + + + 2,165 + + + + 2,170 + + + + 2,175 + + + + 2,180 + + + + 2,185 + + + + 2,190 + + + + 2,195 + + + + 2,200 + + + + 2,205 + + + + 2,210 + + + + 2,215 + + + + 2,220 + + + + 2,225 + + + + 2,230 + + + + 2,235 + + + + 2,240 + + + + 2,245 + + + + 2,250 + + + + 2,255 + + + + 2,260 + + + + 2,265 + + + + 2,270 + + + + 2,275 + + + + 2,280 + + + + 2,285 + + + + 2,290 + + + + 2,295 + + + + 2,300 + + + + 2,305 + + + + 2,310 + + + + 2,315 + + + + 2,320 + + + + 2,325 + + + + 2,330 + + + + 2,335 + + + + 2,340 + + + + 2,345 + + + + 2,350 + + + + 2,355 + + + + 2,360 + + + + 2,365 + + + + 2,370 + + + + 2,375 + + + + 2,380 + + + + 2,385 + + + + 2,390 + + + + 2,395 + + + + 2,400 + + + + 2,405 + + + + 2,410 + + + + 2,415 + + + + 2,420 + + + + 2,425 + + + + 2,430 + + + + 2,435 + + + + 2,440 + + + + 2,445 + + + + 2,450 + + + + 2,455 + + + + 2,460 + + + + 2,465 + + + + 2,470 + + + + 2,475 + + + + 2,480 + + + + 2,485 + + + + 2,490 + + + + 2,495 + + + + 2,500 + + + + 2,505 + + + + 2,510 + + + + 2,515 + + + + 2,520 + + + + 2,525 + + + + 2,530 + + + + 2,535 + + + + 2,540 + + + + 2,545 + + + + 2,550 + + + + 2,555 + + + + 2,560 + + + + 2,565 + + + + 2,570 + + + + 2,575 + + + + 2,580 + + + + 2,585 + + + + 2,590 + + + + 2,595 + + + + 2,600 + + + + 2,605 + + + + 2,610 + + + + 2,615 + + + + 2,620 + + + + 2,625 + + + + 2,630 + + + + 2,635 + + + + 2,640 + + + + 2,645 + + + + 2,650 + + + + 2,655 + + + + 2,660 + + + + 2,665 + + + + 2,670 + + + + 2,675 + + + + 2,680 + + + + 2,685 + + + + 2,690 + + + + 2,695 + + + + 2,700 + + + + 2,705 + + + + 2,710 + + + + 2,715 + + + + 2,720 + + + + 2,725 + + + + 2,730 + + + + 2,735 + + + + 2,740 + + + + 2,745 + + + + 2,750 + + + + 2,755 + + + + 2,760 + + + + 2,765 + + + + 2,770 + + + + 2,775 + + + + 2,780 + + + + 2,785 + + + + 2,790 + + + + 2,795 + + + + 2,800 + + + + 2,805 + + + + 2,810 + + + + 2,815 + + + + 2,820 + + + + 2,825 + + + + 2,830 + + + + 2,835 + + + + 2,840 + + + + 2,845 + + + + 2,850 + + + + 2,855 + + + + 2,860 + + + + 2,865 + + + + 2,870 + + + + 2,875 + + + + 2,880 + + + + 2,885 + + + + 2,890 + + + + 2,895 + + + + 2,900 + + + + 2,905 + + + + 2,910 + + + + 2,915 + + + + 2,920 + + + + 2,925 + + + + 2,930 + + + + 2,935 + + + + 2,940 + + + + 2,945 + + + + 2,950 + + + + 2,955 + + + + 2,960 + + + + 2,965 + + + + 2,970 + + + + 2,975 + + + + 2,980 + + + + 2,985 + + + + 2,990 + + + + 2,995 + + + + 3,000 + + + + 3,005 + + + + 3,010 + + + + 3,015 + + + + 3,020 + + + + 3,025 + + + + 3,030 + + + + 3,035 + + + + 3,040 + + + + 3,045 + + + + 3,050 + + + + 3,055 + + + + 3,060 + + + + 3,065 + + + + 3,070 + + + + 3,075 + + + + 3,080 + + + + 3,085 + + + + 3,090 + + + + 3,095 + + + + 3,100 + + + + 3,105 + + + + 3,110 + + + + 3,115 + + + + 3,120 + + + + 3,125 + + + + 3,130 + + + + 3,135 + + + + 3,140 + + + + 3,145 + + + + 3,150 + + + + 3,155 + + + + 3,160 + + + + 3,165 + + + + 3,170 + + + + 3,175 + + + + 3,180 + + + + 3,185 + + + + 3,190 + + + + 3,195 + + + + 3,200 + + + + 3,205 + + + + 3,210 + + + + 3,215 + + + + 3,220 + + + + 3,225 + + + + 3,230 + + + + 3,235 + + + + 3,240 + + + + 3,245 + + + + 3,250 + + + + 3,255 + + + + 3,260 + + + + 3,265 + + + + 3,270 + + + + 3,275 + + + + 3,280 + + + + 3,285 + + + + 3,290 + + + + 3,295 + + + + 3,300 + + + + 3,305 + + + + 3,310 + + + + 3,315 + + + + 3,320 + + + + 3,325 + + + + 3,330 + + + + 3,335 + + + + 3,340 + + + + 3,345 + + + + 3,350 + + + + 3,355 + + + + 3,360 + + + + 3,365 + + + + 3,370 + + + + 3,375 + + + + 3,380 + + + + 3,385 + + + + 3,390 + + + + 3,395 + + + + 3,400 + + + + 3,405 + + + + 3,410 + + + + 3,415 + + + + 3,420 + + + + 3,425 + + + + 3,430 + + + + 3,435 + + + + 3,440 + + + + 3,445 + + + + 3,450 + + + + 3,455 + + + + 3,460 + + + + 3,465 + + + + 3,470 + + + + 3,475 + + + + 3,480 + + + + 3,485 + + + + 3,490 + + + + 3,495 + + + + 3,500 + + + + 3,505 + + + + 3,510 + + + + 3,515 + + + + 3,520 + + + + 3,525 + + + + 3,530 + + + + 3,535 + + + + 3,540 + + + + 3,545 + + + + 3,550 + + + + 3,555 + + + + 3,560 + + + + 3,565 + + + + 3,570 + + + + 3,575 + + + + 3,580 + + + + 3,585 + + + + 3,590 + + + + 3,595 + + + + 3,600 + + + + 3,605 + + + + 3,610 + + + + 3,615 + + + + 3,620 + + + + 3,625 + + + + 3,630 + + + + 3,635 + + + + 3,640 + + + + 3,645 + + + + 3,650 + + + + 3,655 + + + + 3,660 + + + + 3,665 + + + + 3,670 + + + + 3,675 + + + + 3,680 + + + + 3,685 + + + + 3,690 + + + + 3,695 + + + + 3,700 + + + + 3,705 + + + + 3,710 + + + + 3,715 + + + + 3,720 + + + + 3,725 + + + + 3,730 + + + + 3,735 + + + + 3,740 + + + + 3,745 + + + + 3,750 + + + + 3,755 + + + + 3,760 + + + + 3,765 + + + + 3,770 + + + + 3,775 + + + + 3,780 + + + + 3,785 + + + + 3,790 + + + + 3,795 + + + + 3,800 + + + + 3,805 + + + + 3,810 + + + + 3,815 + + + + 3,820 + + + + 3,825 + + + + 3,830 + + + + 3,835 + + + + 3,840 + + + + 3,845 + + + + 3,850 + + + + 3,855 + + + + 3,860 + + + + 3,865 + + + + 3,870 + + + + 3,875 + + + + 3,880 + + + + 3,885 + + + + 3,890 + + + + 3,895 + + + + 3,900 + + + + 3,905 + + + + 3,910 + + + + 3,915 + + + + 3,920 + + + + 3,925 + + + + 3,930 + + + + 3,935 + + + + 3,940 + + + + 3,945 + + + + 3,950 + + + + 3,955 + + + + 3,960 + + + + 3,965 + + + + 3,970 + + + + 3,975 + + + + 3,980 + + + + 3,985 + + + + 3,990 + + + + 3,995 + + + + 4,000 + + + + 4,005 + + + + 4,010 + + + + 4,015 + + + + 4,020 + + + + 4,025 + + + + 4,030 + + + + 4,035 + + + + 4,040 + + + + 4,045 + + + + 4,050 + + + + 4,055 + + + + 4,060 + + + + 4,065 + + + + 4,070 + + + + 4,075 + + + + 4,080 + + + + 4,085 + + + + 4,090 + + + + 4,095 + + + + 4,100 + + + + 4,105 + + + + 4,110 + + + + 4,115 + + + + 4,120 + + + + 4,125 + + + + 4,130 + + + + 4,135 + + + + 4,140 + + + + 4,145 + + + + 4,150 + + + + 4,155 + + + + 4,160 + + + + 4,165 + + + + 4,170 + + + + 4,175 + + + + 4,180 + + + + 4,185 + + + + 4,190 + + + + 4,195 + + + + 4,200 + + + + 4,205 + + + + 4,210 + + + + 4,215 + + + + 4,220 + + + + 4,225 + + + + 4,230 + + + + 4,235 + + + + 4,240 + + + + 4,245 + + + + 4,250 + + + + 4,255 + + + + 4,260 + + + + 4,265 + + + + 4,270 + + + + 4,275 + + + + 4,280 + + + + 4,285 + + + + 4,290 + + + + 4,295 + + + + 4,300 + + + + 4,305 + + + + 4,310 + + + + 4,315 + + + + 4,320 + + + + 4,325 + + + + 4,330 + + + + 4,335 + + + + 4,340 + + + + 4,345 + + + + 4,350 + + + + 4,355 + + + + 4,360 + + + + 4,365 + + + + 4,370 + + + + 4,375 + + + + 4,380 + + + + 4,385 + + + + 4,390 + + + + 4,395 + + + + 4,400 + + + + 4,405 + + + + 4,410 + + + + 4,415 + + + + 4,420 + + + + 4,425 + + + + 4,430 + + + + 4,435 + + + + 4,440 + + + + 4,445 + + + + 4,450 + + + + 4,455 + + + + 4,460 + + + + 4,465 + + + + 4,470 + + + + 4,475 + + + + 4,480 + + + + 4,485 + + + + 4,490 + + + + 4,495 + + + + 4,500 + + + + 4,505 + + + + 4,510 + + + + 4,515 + + + + 4,520 + + + + 4,525 + + + + 4,530 + + + + 4,535 + + + + 4,540 + + + + 4,545 + + + + 4,550 + + + + 4,555 + + + + 4,560 + + + + 4,565 + + + + 4,570 + + + + 4,575 + + + + 4,580 + + + + 4,585 + + + + 4,590 + + + + 4,595 + + + + 4,600 + + + + 4,605 + + + + 4,610 + + + + 4,615 + + + + 4,620 + + + + 4,625 + + + + 4,630 + + + + 4,635 + + + + 4,640 + + + + 4,645 + + + + 4,650 + + + + 4,655 + + + + 4,660 + + + + 4,665 + + + + 4,670 + + + + 4,675 + + + + 4,680 + + + + 4,685 + + + + 4,690 + + + + 4,695 + + + + 4,700 + + + + 4,705 + + + + 4,710 + + + + 4,715 + + + + 4,720 + + + + 4,725 + + + + 4,730 + + + + 4,735 + + + + 4,740 + + + + 4,745 + + + + 4,750 + + + + 4,755 + + + + 4,760 + + + + 4,765 + + + + 4,770 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -15 + + + + -10 + + + + -5 + + + + 0 + + + + 5 + + + + 10 + + + + 15 + + + + 20 + + + + 25 + + + + 30 + + + + 35 + + + + 40 + + + + 45 + + + + 50 + + + + 55 + + + + 60 + + + + 65 + + + + 70 + + + + 75 + + + + 80 + + + + 85 + + + + 90 + + + + 95 + + + + 100 + + + + 105 + + + + 110 + + + + 115 + + + + 120 + + + + 125 + + + + 130 + + + + 135 + + + + 140 + + + + 145 + + + + 150 + + + + 155 + + + + 160 + + + + 165 + + + + 170 + + + + 175 + + + + 180 + + + + 185 + + + + 190 + + + + 195 + + + + 200 + + + + 205 + + + + 210 + + + + 215 + + + + 220 + + + + 225 + + + + 230 + + + + 235 + + + + 240 + + + + 245 + + + + 250 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +