private async void button1_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Are You Sure to Proceed ?", "Confirmation Dialog", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (checkInput(tbTitle.Text) && totalRequest < 2400)
                {
                    groupBox1.Enabled = false;
                    richTextBox1.Clear();
                    matrix_data.Clear();
                    progressBar1.Value   = 0;
                    progressBar1.Maximum = totalRequest;

                    String title  = tbTitle.Text;
                    String mode   = cbMode.SelectedItem.ToString();
                    String apiKey = cbKey.SelectedItem.ToString();

                    try
                    {
                        int request         = 0;
                        int originOffset    = 0;
                        int destOffset      = 0;
                        int MAXIMUM_COUNTER = place_data.Count;
                        int MAXIMUM_DEST    = (int)numericMaxGrab.Value;

                        while (originOffset < MAXIMUM_COUNTER)
                        {
                            while (destOffset < MAXIMUM_COUNTER)
                            {
                                int DEST_COUNTER = (destOffset + MAXIMUM_DEST > MAXIMUM_COUNTER) ? MAXIMUM_COUNTER : (destOffset + MAXIMUM_DEST);

                                List <String> origin = new List <String>();
                                origin.Add(place_data[originOffset].placeid);

                                List <String> destinations = new List <String>();
                                for (int i = destOffset; i < DEST_COUNTER; i++)
                                {
                                    if (i != originOffset)
                                    {
                                        destinations.Add(place_data[i].placeid);
                                    }
                                }

                                String query = DistanceMatrix.getDistanceMatrixQuery(apiKey, origin, destinations, mode);

                                //richTextBox1.AppendText(query + "\n");

                                //START JSON PARSING
                                String distanceMatrixResult = await doTaskAsync(query);

                                JObject distanceMatrixJSON   = JObject.Parse(distanceMatrixResult);
                                String  distanceMatrixStatus = (String)distanceMatrixJSON["status"];

                                if (distanceMatrixStatus == "OK")
                                {
                                    JArray distanceMatrixArray = (JArray)distanceMatrixJSON["rows"][0]["elements"];
                                    int    idx = 0;
                                    foreach (var item in distanceMatrixArray)
                                    {
                                        String status    = (String)item["status"];
                                        String curOrigin = place_data[originOffset].placeid;
                                        String curDest   = destinations[idx].Split(':')[1];
                                        if (status == "OK")
                                        {
                                            int    distance, traveltime, fare;
                                            String currency;

                                            if (item["distance"] != null)
                                            {
                                                distance = (int)item["distance"]["value"];
                                            }
                                            else
                                            {
                                                distance = -1;
                                            }

                                            if (item["duration"] != null)
                                            {
                                                traveltime = (int)item["duration"]["value"];
                                            }
                                            else
                                            {
                                                traveltime = -1;
                                            }

                                            if (item["fare"] != null)
                                            {
                                                fare     = (int)item["fare"]["value"];
                                                currency = (String)item["fare"]["currency"];
                                            }
                                            else
                                            {
                                                fare     = -1;
                                                currency = "NONE";
                                            }

                                            MatrixData data = new MatrixData(curOrigin, curDest, distance, traveltime, currency, fare);
                                            matrix_data.Add(data);
                                        }
                                        else
                                        {
                                            MatrixData data = new MatrixData(curOrigin, curDest);
                                            matrix_data.Add(data);
                                        }
                                        idx++;
                                    }
                                }
                                else
                                {
                                    break;
                                }

                                richTextBox1.AppendText("Request-" + (request + 1).ToString() + " Success... \n");
                                richTextBox1.ScrollToCaret();
                                destOffset = DEST_COUNTER;
                                request++;
                                progressBar1.Value++;
                            }
                            destOffset = 0;
                            originOffset++;
                        }

                        savetoLog(title);
                        exportCSV("Matrix/City/" + getDateTimeDirectory() + "_" + title + ".csv", matrix_data);

                        richTextBox1.AppendText("Done...\n");
                        System.Media.SoundPlayer player = new System.Media.SoundPlayer("alert.wav");
                        player.Play();
                    }
                    catch (Exception)
                    {
                        if (checkConnection())
                        {
                            richTextBox1.AppendText("INVALID REQUEST...\n");
                        }
                        else
                        {
                            richTextBox1.AppendText("No Connection...\n");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Invalid Input!!");
                }
            }
            groupBox1.Enabled = true;
            tbTitle.Text      = "";
        }