public bool Analyse()
		{
			var tree = new SearchTree();

			var found = false;

			var last = Fields.Last();

			if (!last.IsScoreRed() && !last.IsScoreYellow())
			{
				tree.GetMove(last, Duration, Duration);
			}
			var node = tree.GetNode(last, (byte)(last.Count + 1));

			if (!Scores.IsWinning(node.Score)) { return found; }

			var redToMove = node.Score > 0;
			
			tree.Initialize(Nodes.Values);
			var fields = Fields
				.Where(f => f.RedToMove == redToMove)
				.OrderByDescending(f => f.Count)
				.ToList();

			Field target = Field.Empty;
			var score = 0;

			foreach (var field in fields)
			{
				var loop = Stopwatch.StartNew();
				tree.GetMove(field, Duration, Duration);

				Console.WriteLine(tree.Logger);

				var test = tree.Root.Score;
				if (redToMove && test < Scores.RedWin)
				{
					break;
				}
				else if (!redToMove && test > Scores.YelWin)
				{
					break;
				}
				target = field;
				score = test;

				if (loop.Elapsed >= Duration) { break; }
				if (field.Count < 19) { break; }

				if (Scores.GetPlyToWinning(score) > field.Count + 1)
				{
					found = true;
					Console.WriteLine("{0} [{2}] {1}", Scores.GetFormatted(score), target, target.Count + 1);

					if (target.GetHashCode() > target.Flip().GetHashCode())
					{
						target = target.Flip();
					}
					Nodes[target] = new SearchTreeKnownNode(target, score);
				}
			}
			if (!found) { return false; }

			

			return true;
		}
		public TheDaltonsBot()
		{
			Tree = new SearchTree();
		}