Argument out of Range Exception Error - Parameter Name: Index

Hey guys, so i keep on getting this error for my enemy AI script (which basically uses A* pathfinding to move towards a target)

My error is on this line:

Vector3 dir = (path.vectorPath [currentWaypoint] - transform.position).normalized;

This is the whole script:

using UnityEngine;
using Pathfinding;
using System.Collections;

[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(Seeker))]

public class EnemyAI : MonoBehaviour
{

		//what to chase
		Transform target;

		//restart path
		public bool restartpath = false;

		//How many times each second we will update our path
		public float updateRate = 2f;

		private Seeker seeker;
		private Rigidbody2D rb;

		//the calculated path
		public Path path;

		//AI's speed/second
		public float speed = 300f;

		public ForceMode2D fmode;

		//Waypoint we are currently moving towards
		private int currentWaypoint = 0;

		[HideInInspector]
		public static bool
				pathisEnded = false;

		//Max distance from AI to a waypoint for it to continue to the next waypoint
		public float nextWaypointDistance = 3;

		void Start ()
		{
				seeker = GetComponent<Seeker> ();
				rb = GetComponent<Rigidbody2D> ();
				target = GameObject.Find ("Roti").GetComponent<Transform> ();

				if (target == null) {
						//search for target
				}

				seeker.StartPath (transform.position, target.position, OnPathComplete);
	
				StartCoroutine (UpdatePath ());
	
		}

		IEnumerator UpdatePath ()
		{
				if (target == null) {
						//search for target

						return false;
				}

				seeker.StartPath (transform.position, target.position, OnPathComplete);

				yield return new WaitForSeconds (1f / updateRate);

				StartCoroutine (UpdatePath ());
		}

		public void OnPathComplete (Path p)
		{

				if (!p.error) {
						path = p;
						currentWaypoint = 0;
				}
		}


		void FixedUpdate ()
		{
				if (target == null) {
						//search for target
			
						return;
				}

				//Optional: Always look at player?
				Vector3 diff = target.position - transform.position;
				diff.Normalize ();

				float rot_z = Mathf.Atan2 (diff.y, diff.x) * Mathf.Rad2Deg;
				transform.rotation = Quaternion.Euler (0f, 0f, rot_z - 90);
		


				if (path == null) {
						return;
				}

				//end of path
				if (currentWaypoint > path.vectorPath.Count) {
						if (pathisEnded)
								return;

						pathisEnded = true;
				}

		if (pathisEnded == false) {
						//Direction to next waypoint
						Vector3 dir = (path.vectorPath [currentWaypoint] - transform.position).normalized;

						dir *= speed * Time.fixedDeltaTime;

						//Move the AI
						rb.AddForce (dir, fmode);

						float dist = Vector3.Distance (transform.position, path.vectorPath [currentWaypoint]);

						if (dist < nextWaypointDistance) {
								currentWaypoint++;
								return;
						}
				}
				
		}


}

Thanks guys! :). Any help is appreciated!

Pretty easy to miss.

if (currentWaypoint > path.vectorPath.Count) {

You mean:

if (currentWaypoint >= path.vectorPath.Count) {