using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public class clsDB
{
    public string Connectionstring = "";

    public DataSet dsdaten = new DataSet();
    private SqlDataAdapter dadaten;

    public clsDB()
    {
        // Me.Connectionstring = Get_Connectionstring(parcoursnr)
        if (this.Connectionstring == "")
            this.Connectionstring = Get_Connectionstring();
    }

    public string Get_Connectionstring()
    {
        return System.Configuration.ConfigurationManager.ConnectionStrings["QWToolConnectionString"].ConnectionString;

    }

    public string Get_Option(int onr)
    {
        try
        {
            SqlConnection sqlconnect = new SqlConnection();
            DataSet ds = new DataSet();
            ds.Tables.Clear();
            sqlconnect.ConnectionString = this.Connectionstring;
            sqlconnect.Open();
            SqlDataAdapter da = new SqlDataAdapter("", sqlconnect);
            SqlCommand sqlcmd = new SqlCommand();
            sqlcmd.Connection = sqlconnect;
            sqlcmd.CommandType = CommandType.Text;

            sqlcmd.CommandText = "Select * from optionen where optionnr=" + onr.ToString();


            // sqlcmd.CommandText = "Select * from optionen where mandantnr=" + mandantnr.ToString + " and optionnr=" + onr.ToString
            da.SelectCommand = sqlcmd;
            da.Fill(ds, "Daten");
            // If ds.Tables(0).Rows.Count = 0 Then
            // sqlcmd.CommandText = "Select * from optionen where mandantnr=1 and optionnr=" + onr.ToString
            // da.Fill(ds, "Daten")

            // End If

            return ds.Tables[0].Rows[0]["Inhalt"].ToString();
        }
        catch (Exception ex)
        {
            return "";
        }
    }
    public DataSet Get_Tabledata(int sqlscriptnumber, string vereinnr, int userid)
        {
        Get_Tabledata("Select sqlscript from sqlqueries where sqlscriptnumber=" + sqlscriptnumber.ToString(),false,true);
        string sql = dsdaten.Tables[0].Rows[0][0].ToString();
        dsdaten.Tables.Clear();
        sql = sql.Replace("@vereinnr", vereinnr);
        sql = sql.Replace("@userid", userid.ToString());
        Get_Tabledata(sql, false, true);
        return dsdaten;
    }
    public DataSet Get_Tabledata(string Tablename, bool StoredProc = false, bool is_SQL_String = false)
    {
        SqlConnection sqlconnect = new SqlConnection();
        DataSet ds = new DataSet();
        ds.Tables.Clear();
        sqlconnect.ConnectionString = this.Connectionstring;
        sqlconnect.Open();
        SqlDataAdapter da = new SqlDataAdapter("", sqlconnect);
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd.Connection = sqlconnect;
        if (StoredProc == true)
        {
            sqlcmd.CommandType = CommandType.StoredProcedure;
            if (Tablename.IndexOf("@@Mandantnr@@") > 0)
                Tablename = Tablename.Replace("@@Mandantnr@@", "");
            sqlcmd.CommandText = Tablename;
        }
        else
        {
            sqlcmd.CommandType = CommandType.Text;
            sqlcmd.CommandText = "Select * from " + Tablename;
        }
        if (is_SQL_String == true)
            sqlcmd.CommandText = Tablename;
        // sqlcmd.CommandType = CommandType.StoredProcedure
        // sqlcmd.CommandText = "Berufsliste"
        da.SelectCommand = sqlcmd;
        da.Fill(dsdaten, "Daten");
        sqlconnect.Close();

        return dsdaten;
    }

    public void Get_Tabledata(string tablename, string wherestatement = "", string SQL = "", string args = "", bool SP = false, DataTable SP_Params = null/* TODO Change to default(_) if this is not a reference type */)
    {
        if (SP == true)
        {
        }
        try
        {
            dsdaten.Clear();
            dsdaten.Tables.Clear();
            dadaten = new SqlDataAdapter(SQL, this.Connectionstring);
            if (SP == true)
            {
                SqlCommand sqlcmd = new SqlCommand();
                SqlConnection sqlconnect = new SqlConnection();
                sqlconnect.ConnectionString = this.Connectionstring;
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = tablename;
                foreach (DataRow r in SP_Params.Rows)
                {
                    sqlcmd.Parameters.Add(r["Paramname"].ToString(), SqlDbType.VarChar);
                    sqlcmd.Parameters[sqlcmd.Parameters.Count - 1].Value = r["Paramvalue"];
                }
                sqlcmd.Connection = sqlconnect;
                try
                {
                    dadaten.SelectCommand = sqlcmd;
                    dadaten.Fill(dsdaten, tablename);

                    return;
                }
                catch (Exception ex)
                {
                    sqlconnect.Open();
                    sqlcmd.ExecuteNonQuery();
                    sqlconnect.Close();
                }
            }
            if (SQL != "")
            {
                SQL = SQL.Replace("&ARGS&", args);
                dadaten = new SqlDataAdapter(SQL, this.Connectionstring);
            }
            else
                dadaten = new SqlDataAdapter("select * from [" + tablename + "] " + wherestatement, this.Connectionstring);
            dadaten.Fill(dsdaten, tablename);
        }
        catch (Exception ex)
        {
            int a = 1;
        }
    }

    public void Get_Tabeldata_for_Update(string Tablename, bool StoredProc = false, bool is_SQL_String = false)
    {
        dsdaten.Clear();
        dsdaten.Tables.Clear();
        dadaten = new SqlDataAdapter(Tablename, this.Connectionstring);
        dadaten.Fill(dsdaten, Tablename);
    }

    public void Update_Tabeldata()
    {
        SqlCommandBuilder cb = new SqlCommandBuilder(dadaten);
        dadaten.Update(dsdaten, dsdaten.Tables[0].TableName);
    }


    public DataTable Get_Menu(string Menutype, bool loggedoffmenu)
    {
        SqlConnection SQLconnect = new SqlConnection();
        DataSet ds = new DataSet();
        ds.Tables.Clear();
        SQLconnect.ConnectionString = this.Connectionstring;
        SQLconnect.Open();
        SqlDataAdapter da = new SqlDataAdapter("", SQLconnect);
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd.Connection = SQLconnect;
        sqlcmd.CommandType = CommandType.Text;
        clsDB dh = new clsDB();
        // ds = dh.Get_Tabledata("Select Mandanttype from mandant where mandantnr=" + mandantnr.ToString, False, True)
        // Dim mandanttyp As Integer
        // mandanttyp = ds.Tables(0).Rows(0).Item(0)
        // ds.Tables.Clear()

        // If Get_Option(11, mandantnr) = "1/2" And
        // Menutype = 3 Then
        // sqlcmd.CommandText = "Select * from web_menu where mandanttype>=" + mandanttyp.ToString + " and aktiv=1 and menutext<>'Schüler' and ( menutype=10 or menutype=1 or menutype = " + Menutype.ToString + ") order by menutype, sort"
        // Else
        if (loggedoffmenu==true)
        {
            sqlcmd.CommandText = "Select * from web_menu where aktiv=1 and ( menutype=100 or menutype=1 or menutype = " + Menutype.ToString() + ") order by menutype, sort";

        }
        else
        {
            sqlcmd.CommandText = "Select * from web_menu where aktiv=1 and ( menutype <> 100 and menutype=10 or menutype=1 or menutype = " + Menutype.ToString() + ") order by menutype, sort";
        }
        // End If

        da.SelectCommand = sqlcmd;

        da.Fill(ds, "Daten");
        sqlcmd.Dispose();
        SQLconnect.Close();
        return ds.Tables[0];
    }

    public void add_user()
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("add_user", myConnection);


        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            //return null;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        //return 0;
    }
    public void generate_password(string usernr, int pwgen)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("Generate_Password", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, usernr));
        myCommand.Parameters.Add(new SqlParameter("@nurpw", SqlDbType.Int, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, pwgen));


        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            //return null;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        //return 0;
    }
    public void insert_log(int loglevel, int userid, string description)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("sp_insert_logentry", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@userid", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, userid));
        myCommand.Parameters.Add(new SqlParameter("@entrydescription", SqlDbType.VarChar, 4096, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, description));
        myCommand.Parameters.Add(new SqlParameter("@level", SqlDbType.VarChar, 4096, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, loglevel));


        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            //return null;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        //return 0;
    }
    public void add_new_mannschaft(string verein, string usernr)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("add_mannschaft", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@vereinnr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, verein));
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, usernr));


        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            //return null;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        //return 0;
    }

    public int Add_New_Teilnehmer(string vereinnr, string usernr)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("add_Teilnehmer", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@vereinnr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, vereinnr));
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, usernr));

        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            return 0;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        return 0;
    }

    public int Check_Teilnehmer(string vereinnr, string usernr)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("chk_Teilnehmer", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@vereinnr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, vereinnr));
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, usernr));

        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            return 0;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        return 0;
    }

    public int Add_Athlet(string Vereinnr, int Athlete_id, string user)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("add_athlet", myConnection);

        myCommand.CommandType = CommandType.StoredProcedure;
        myCommand.Parameters.Add(new SqlParameter("@vereinnr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, Vereinnr));
        myCommand.Parameters.Add(new SqlParameter("@athletid", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, Athlete_id));
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, user));

        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            return 0;
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        return 0;

    }


    public void Add_Nicht_angemeldete_Teilnehmer(string vereinnr, string usernr)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("add_all_Teilnehmer", myConnection);
        myCommand.Parameters.Add(new SqlParameter("@vereinnr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, vereinnr));
        myCommand.Parameters.Add(new SqlParameter("@usernr", SqlDbType.VarChar, 255, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, usernr));

        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }
        
    }

    public void truncate_table(string tablename)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("truncate table " + tablename, myConnection);
        myCommand.CommandType = CommandType.Text;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }

    }


    public void migrate_taf_resultate(string ortnr, string deldata)
    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("[dbo].[Migrate_TAF_Import]", myConnection);
        if (deldata == "False") ortnr = "0"; 
        myCommand.Parameters.Add(new SqlParameter("@ortnr", SqlDbType.Int, 3, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, ortnr));
        myCommand.CommandType = CommandType.StoredProcedure;
        try
        {
            myConnection.Open();
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {

        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }

    }
    public void update_verein(string targetfolder)
    {
        truncate_table("base_account");
        String Filter = ConfigurationSettings.AppSettings["VereinFilter"];
        string[] filters = Filter.Split(',');
        Get_Tabeldata_for_Update ("Select * from base_account",false,true);
        DataSet verein = new DataSet();
        verein.ReadXml(targetfolder + "\\verein.xml");
        foreach (DataRow r in verein.Tables[0].Rows)
        {
            DataRow rn = dsdaten.Tables[0].NewRow();
            Boolean useit;
            useit = false;
            foreach(var filt in filters)
            {
                if (r["accountcode"].ToString().IndexOf(filt) > 0) useit = true;

            }
            if (useit == true)
            {

            rn["account_code"] = r["accountCode"];
            rn["account_name"] = r["accountName"];
            rn["account_short"] = r["accountShort"];
            rn["account_type"] = r["accountType"];
            rn["lg"] = r["lg"];
            dsdaten.Tables[0].Rows.Add(rn);
            }

        }
        Update_Tabeldata();

    }


    public string get_unicode(string inputstring, DataTable unicodes)
    {
        string res = "";
        string res1 = "";
        char[] characters = inputstring.ToCharArray();
        foreach (char c in characters)
        {
            res1 = "";
            foreach (DataRow r in unicodes.Rows)

            {
               
                int ascii = (int)c;
                if (ascii == Convert.ToInt32(r[0]))
                {
                    res1 = r[1].ToString();
                }
            }
            if (res1=="")
                {
                res = res + c.ToString();
            }
            else
            {
                res = res + res1;
            }

        }
        return res;
    }

    public void update_athlete(string targetfolder)
    {
        dsdaten.Tables.Clear();
        Get_Tabledata("Select * from charconvert", false, true);
        DataTable unicodes = new DataTable();
        unicodes = dsdaten.Tables[0].Copy();
        dsdaten.Tables.Clear();
        String Filter = ConfigurationSettings.AppSettings["VereinFilter"];
        string[] filters = Filter.Split(',');
        DataSet athlete = new DataSet();
        athlete.ReadXml(targetfolder + "\\athlete.xml");
        foreach (DataRow r in athlete.Tables[0].Rows)
        {

            Boolean useit;
            useit = false;
            foreach (var filt in filters)
            {
                if (r["accountcode"].ToString().IndexOf(filt) > 0) useit = true;

            }
            if (useit == true)
            {
               
                Get_Tabeldata_for_Update("Select * from base_athlete where license=" + r["license"].ToString(), false, true);
                if (dsdaten.Tables[0].Rows.Count == 0)
                {
                    DataRow rn = dsdaten.Tables[0].NewRow();
                    //string a = "";
                    //ASCIIEncoding ascii = new ASCIIEncoding();
                    //Byte[] bytes = ascii.GetBytes(r["Lastname"].ToString());
                    //String decoded = ascii.GetString(bytes);
                    //if (decoded.IndexOf("o?in") > -1)
                    //{
                    //    decoded = decoded.Replace("o?in", "ošin");
                    //    r["Lastname"] = decoded;
                    //}

                    r["lastname"] = get_unicode(r["lastname"].ToString(),unicodes);
                    r["firstname"] = get_unicode(r["firstname"].ToString(),unicodes);
                    rn["lastname"] = r["lastname"];
                    rn["firstname"] = r["firstname"];
                    rn["birth_date"] = r["birthdate"].ToString().Substring(3,2)+"."+ r["birthdate"].ToString().Substring(0, 2) + "."+r["birthdate"].ToString().Substring(6, 4);
                    rn["sex"] = r["sex"];
                    rn["nationality"] = r["nationality"];
                    rn["account_code"] = r["accountcode"];
                    rn["second_account_code"] = r["secondaccountcode"];
                    rn["account_info"] = r["lastKnownAccountInfo"];
                    rn["license_Paid"] = r["licensepaid"];
                    rn["license_Cat"] = r["licensecat"];
                    rn["license"] = r["license"];
                    dsdaten.Tables[0].Rows.Add(rn);
                    Update_Tabeldata();
                }
                else
                {
                    DataRow rn = dsdaten.Tables[0].NewRow();
                   
                        //string a = "";
                        //ASCIIEncoding ascii = new ASCIIEncoding();
                        //Byte[] bytes = ascii.GetBytes(r["Lastname"].ToString());
                        //String decoded = ascii.GetString(bytes);
                        //if (decoded.IndexOf("o?in")>-1)
                        //{
                        //    decoded = decoded.Replace("o?in", "ošin");
                        //    r["Lastname"] = decoded;
                        //}

                    if (r["License"].ToString() == "173471")
                    {
                        string a = "";
                    }
                    r["lastname"] = get_unicode(r["lastname"].ToString(),unicodes);
                    r["firstname"] = get_unicode(r["firstname"].ToString(),unicodes);
                    dsdaten.Tables[0].Rows[0]["lastname"] = r["lastname"];
                    
                    dsdaten.Tables[0].Rows[0]["firstname"] = r["firstname"];
                    dsdaten.Tables[0].Rows[0]["birth_date"] = r["birthdate"].ToString().Substring(3, 2) + "." + r["birthdate"].ToString().Substring(0, 2) + "." + r["birthdate"].ToString().Substring(6, 4); ;
                    dsdaten.Tables[0].Rows[0]["sex"] = r["sex"];
                    dsdaten.Tables[0].Rows[0]["nationality"] = r["nationality"];
                    dsdaten.Tables[0].Rows[0]["account_code"] = r["accountcode"];
                    dsdaten.Tables[0].Rows[0]["second_account_code"] = r["secondaccountcode"];
                    dsdaten.Tables[0].Rows[0]["account_info"] = r["lastKnownAccountInfo"];
                    dsdaten.Tables[0].Rows[0]["license_paid"] = r["licensepaid"];
                    dsdaten.Tables[0].Rows[0]["license_cat"] = r["licensecat"];
                    //dsdaten.Tables[0].AcceptChanges();
                    Update_Tabeldata();
                }
            }
        }
    }
    public DataSet Get_Reportdata(string Orte, string U1012, string erdgas, string vierkampf, int ortnr)

    {
        SqlConnection myConnection = new SqlConnection(this.Connectionstring);
        SqlCommand myCommand = new SqlCommand("dbo.res_resultate_aufbereiten", myConnection);
        myCommand.Parameters.Add("@orte", SqlDbType.VarChar, 1024);
        myCommand.Parameters.Add("@U10U12", SqlDbType.VarChar, 1);
        if (vierkampf == "J")
        {
            myCommand.Parameters.Add("@resqw", SqlDbType.Int, 4);
            myCommand.Parameters.Add("@resew", SqlDbType.Int, 4);
            myCommand.Parameters.Add("@resortnr", SqlDbType.Int, 4);
            myCommand.Parameters[4].Value = ortnr;
            myCommand.Parameters[3].Value = 0;
            myCommand.Parameters[2].Value = 1;

        }
        if (erdgas == "J")
        {
            myCommand.Parameters.Add("@resqw", SqlDbType.Int, 4);
            myCommand.Parameters.Add("@resew", SqlDbType.Int, 4);
            myCommand.Parameters.Add("@resortnr", SqlDbType.Int, 4);
            myCommand.Parameters[4].Value = ortnr;
            myCommand.Parameters[2].Value = 1;
            myCommand.Parameters[1].Value = 0;
        }
        myCommand.Parameters[0].Value = Orte;
        myCommand.Parameters[1].Value = U1012;
        myCommand.CommandType = CommandType.StoredProcedure;
        myCommand.CommandTimeout = 600;

        SqlDataAdapter da = new SqlDataAdapter(myCommand);

        try
        {
            myConnection.Open();
            da.Fill(dsdaten, "Daten");
            //myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {

        }
        finally
        {
            if (myConnection.State == ConnectionState.Open)
                myConnection.Close();
        }


        return dsdaten;
    }

    public void Insert_Disziplin_select(int ortnr)
    {

    }



}
