Example #1
0
        private void ClearUI()
        {
            scannedItems       = new List <LendObject>();
            ScannedItemMifares = new List <string>();
            userInUse          = null;

            LabelNameResult.Visibility       = Visibility.Hidden;
            LabelZbcNameResult.Visibility    = Visibility.Hidden;
            LabelPhoneResult.Visibility      = Visibility.Hidden;
            LabelTeacherResult.Visibility    = Visibility.Hidden;
            LabelIsDisabledResult.Visibility = Visibility.Hidden;
            LabelIsScannedResult.Visibility  = Visibility.Hidden;

            ButtonComment.IsEnabled = false;

            this.ListViewLend.Items.Clear();
            this.ListViewItems.Items.Clear();

            this.datePickerReturn.SelectedDate = DateTime.Now;

            isUserScanned = false;
            isItemsLended = null;

            TextBoxMain.Focus();

            ButtonReturn.IsEnabled            = false;
            ButtonReturnWIthoutCard.IsEnabled = false;
            ButtonLend.IsEnabled = false;
        }
Example #2
0
 private void DatePickerReturn_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
 {
     if (datePickerReturn.SelectedDate.Value.DayOfWeek == DayOfWeek.Saturday || datePickerReturn.SelectedDate.Value.DayOfWeek == DayOfWeek.Sunday)
     {
         MessageBox.Show("Du må ikke vælge at afleveringsdatoen skal være i weekenden!");
         datePickerReturn.SelectedDate = DateTime.Now;
     }
     else
     {
         if (ListViewItems.SelectedItems.Count != 0)
         {
             foreach (ListViewObject listViewObject in ListViewItems.SelectedItems)
             {
                 foreach (LendObject lendObject in scannedItems.ToList())
                 {
                     if (lendObject.ItemObject.ItemMifare == listViewObject.ItemMifare)
                     {
                         lendObject.ReturnDate = datePickerReturn.SelectedDate.Value.Date;
                     }
                 }
             }
             RefreshListViewItems();
         }
     }
     TextBoxMain.Focus();
 }
Example #3
0
        private void ButtonUser_Click(object sender, RoutedEventArgs e)
        {
            UIInputUser inputUserbox = new UIInputUser();

            inputUserbox.ShowDialog();
            TextBoxMain.Focus();
        }
Example #4
0
        private void ButtonItem_Click(object sender, RoutedEventArgs e)
        {
            UIInputItem inputItembox = new UIInputItem();

            inputItembox.ShowDialog();
            TextBoxMain.Focus();
        }
Example #5
0
        private void ButtonComment_Click(object sender, RoutedEventArgs e)
        {
            UIUserNote uiUserNote = new UIUserNote(userInUse);

            uiUserNote.ShowDialog();
            TextBoxMain.Focus();
        }
        private void CountAllVowels()
        {
            // Build a list of vowels up front:
            var vowels = new HashSet <char> {
                'a', 'e', 'i', 'o', 'u', 'y', 'æ', 'ø', 'å'
            };

            int total = TextBoxMain.ToLower().Count(c => vowels.Contains(c));

            TextBoxResult = total.ToString();
        }
        private void RemoveAllVowels()
        {
            // Build a list of vowels up front:
            var vowels = new HashSet <char> {
                'A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'Y', 'y', 'Æ', 'æ', 'Ø', 'ø', 'Å', 'å'
            };

            string text = new string(TextBoxMain.Where(c => !vowels.Contains(c)).ToArray());

            TextBoxResult = text;
        }
        private void ButtonEqual_Click(object sender, RoutedEventArgs e)
        {
            string str = TextBoxMain.Text;

            try
            {
                if (str.Contains('+'))
                {
                    int   position   = str.IndexOf('+');
                    float firstpart  = float.Parse(str.Substring(0, position));
                    float secondpart = float.Parse(str.Substring(position + 1, str.Length - position - 1));
                    TextBoxMain.Clear();
                    TextBoxMain.Text = (firstpart + secondpart).ToString();
                }
                if (str.Contains('-'))
                {
                    int   position   = str.IndexOf('-');
                    float firstpart  = float.Parse(str.Substring(0, position));
                    float secondpart = float.Parse(str.Substring(position + 1, str.Length - position - 1));
                    TextBoxMain.Clear();
                    TextBoxMain.Text = (firstpart - secondpart).ToString();
                }
                if (str.Contains('*'))
                {
                    int   position   = str.IndexOf('*');
                    float firstpart  = float.Parse(str.Substring(0, position));
                    float secondpart = float.Parse(str.Substring(position + 1, str.Length - position - 1));
                    TextBoxMain.Clear();
                    TextBoxMain.Text = (firstpart * secondpart).ToString();
                }
                if (str.Contains('/'))
                {
                    int   position   = str.IndexOf('/');
                    float firstpart  = float.Parse(str.Substring(0, position));
                    float secondpart = float.Parse(str.Substring(position + 1, str.Length - position - 1));
                    TextBoxMain.Clear();

                    if (secondpart == 0 || firstpart == 0)
                    {
                        throw new Exception("Dividing by zero");
                    }

                    TextBoxMain.Text = (firstpart / secondpart).ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #9
0
 private void ButtonDeleteItems_Click(object sender, RoutedEventArgs e)
 {
     foreach (ListViewObject listViewObject in ListViewItems.SelectedItems)
     {
         foreach (LendObject lendObject in scannedItems.ToList())
         {
             if (lendObject.ItemObject.ItemMifare == listViewObject.ItemMifare)
             {
                 scannedItems.Remove(lendObject);
                 ScannedItemMifares.Remove(lendObject.ItemObject.ItemMifare);
             }
         }
     }
     RefreshListViewItems();
     TextBoxMain.Focus();
 }
Example #10
0
        private void CreateReport(CustomReports.ItemReport itemReport)
        {
            BackgroundWorker bw = new BackgroundWorker();

            bw.WorkerReportsProgress = true;

            bw.ProgressChanged += (s, e) => {
                if (e.UserState != null)
                {
                    TextBoxMain.Text += e.UserState.ToString() + Environment.NewLine;
                    TextBoxMain.ScrollToEnd();
                }
            };

            bw.DoWork += (s, e) => {
                CustomReports.Program.CreateReport(itemReport);
            };

            bw.RunWorkerCompleted += (s, e) => {
                if (e.Error != null)
                {
                    MessageBox.Show(this, e.Error.Message + Environment.NewLine + e.Error.StackTrace, "",
                                    MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    MessageBox.Show(this, "Завершено", "",
                                    MessageBoxButton.OK, MessageBoxImage.Information);
                }

                ButtonClose.IsEnabled = true;
                Cursor = Cursors.Arrow;

                if (!string.IsNullOrEmpty(itemReport.FileResult))
                {
                    try {
                        string argument = "/select, \"" + itemReport.FileResult + "\"";
                        Process.Start("explorer.exe", argument);
                    } catch (Exception exc) {
                        MessageBox.Show(this, exc.Message, string.Empty, MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            };

            CustomReports.Logging.bw = bw;
            bw.RunWorkerAsync();
        }
 private void TextBoxMainWrite(string text)
 {
     TextBoxMain.AppendText("\r" + text);
 }
        private void FileReader(string[] files, int startIndex, int endIndex)
        {
            // 設定ファイルの値読み込み
            setting = new SettingWindow.Setting();
            setting = SettingWindow.LoadSetting(setting);

            for (int fileIndex = startIndex; fileIndex < endIndex; fileIndex++)
            {
                TextBoxMainWrite();
                TextBoxMainWrite(files[fileIndex]);

                // ディレクトリかファイルか判別
                if (File.GetAttributes(files[fileIndex]).HasFlag(FileAttributes.Directory))
                {
                    // ディレクトリが読み込まれた場合

                    // ダイアログが埋もれないようにアクティブ化
                    FormMain.Activate();

                    string msgText    = "フォルダーが読み込まれました。フォルダー内にある全ての.tjaを変換しますか?";
                    string msgCaption = "警告";

                    TextBoxMainWrite();
                    TextBoxMainWrite(msgCaption + ":" + msgText);
                    TextBoxMain.ScrollToEnd();

                    var result = MessageBox.Show(this, files[fileIndex] + "\r" + msgText, msgCaption, MessageBoxButton.YesNo, MessageBoxImage.Exclamation);

                    // ダイアログでの選択を判別
                    if (result == MessageBoxResult.Yes)
                    {
                        // はいを選んだ場合
                        TextBoxMainWrite();
                        TextBoxMainWrite(">>はい");

                        // ディレクトリから.tjaファイルを検索(サブディレクトリを含む)
                        var tjaFiles = Directory.EnumerateFiles(files[fileIndex], "*.tja", SearchOption.AllDirectories);

                        if (tjaFiles.Count() >= 1)
                        {
                            // .tjaファイルが1件以上の場合
                            foreach (string tjaFilePath in tjaFiles)
                            {
                                TextBoxMainWrite();
                                TextBoxMainWrite(tjaFilePath);
                                OTCConvert(tjaFilePath);
                            }

                            msgText = tjaFiles.Count() + "件の.tjaファイルを変換しました。";
                        }
                        else
                        {
                            // .tjaファイルが0件の場合
                            msgText = ".tjaファイルがありませんでした。";
                        }

                        TextBoxMainWrite();
                        TextBoxMainWrite(msgText);
                        TextBoxMain.ScrollToEnd();

                        MessageBox.Show(this, msgText, "情報", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        // いいえを選んだ場合
                        TextBoxMainWrite();
                        TextBoxMainWrite(">>いいえ");
                    }
                }
                else
                {
                    // ファイルが読み込まれた場合
                    OTCConvert(files[fileIndex]);
                    System.Media.SystemSounds.Asterisk.Play();
                }
            }

            TextBoxMainWrite();
            TextBoxMainWrite("処理完了");

            TextBoxMain.ScrollToEnd();
        }
Example #13
0
        private void OnMyfareScanned(object sender, KeyEventArgs e)                                         // Runs when a key is pressed.
        {
            if (TextBoxMain.IsFocused)                                                                      // checks if the maintextbox is focused
            {
                if (e.Key == Key.Return)                                                                    // checks if its the enter button that has been pressed
                {
                    ItemObject scannedItem = ItemController.Instance.CheckIfMifareIsItem(TextBoxMain.Text); //Tjekker om den kan finde et item udfra det scannede Mifare. Hvis den ikke returner et item er scannedItem = null og mifare er enter en user eller findes ikke

                    if (scannedItem == null)                                                                //On User Scanned
                    {
                        LendedObject lendedObject = LendController.Instance.GetUserData(TextBoxMain.Text);  //Henter Det lended Object der tilhøre det usermifare der er blevet scanned, inklusive alle hans date, hans nuværende lån og hans arkiv
                        if (lendedObject.UserObject == null)                                                //Hvis userobject er null findes han ikke og skal derfor hentes fra den gamle database
                        {
                            if (!CheckForInternetConnection())                                              //Tjekker om der er internet
                            {
                                MessageBox.Show("Der Er Ikke Noget Internet");
                            }
                            else if (isItemsLended == true && lendedObject.UserObject.UserMifare != userInUse.UserMifare) //Tjekker at du ikke scanner 2 forskellige brugeres udstyr i samma omgang
                            {
                                MessageBox.Show("Du kan ikke scanne udstyr der er udlånt til forskellige brugere!");
                            }
                            else
                            {
                                /*
                                 * Denne del af koden er UDELUKKENDE til mmigration så udstyret bliver afleveret i den gamle DB!!!
                                 */
                                if (MigrationController.Instance.CheckIfItemIsLendedInOldDB(TextBoxMain.Text))//Hvis mifaret ikke tilhøre en bruger skal vi tjekke om det er udlånt i den gamle DB og aflevere det
                                {
                                    MigrationController.Instance.ReturnItemInOldDB(TextBoxMain.Text);
                                    MessageBox.Show("Udstyret er afleveret i den gamle databse, men er ikke scannet ind i den nye!" + Environment.NewLine + "Scan det venligst ind når i har tid!");
                                }
                                else
                                {
                                    MessageBox.Show("Findes ikke i databasen!");
                                }

                                /*
                                 * Her Til
                                 */
                            }
                        }
                        else
                        {
                            if (isItemsLended == true && lendedObject.UserObject.UserMifare != userInUse.UserMifare) //sikre sig at man ikke scanner udstyr der tilhøre én bruger og derefter scanner en anden bruger i samme omgang
                            {
                                MessageBox.Show("Du kan ikke scanne andre brugere end den udstyret tilhøre!");
                            }
                            else
                            {
                                isUserScanned = true;                //Vi sætter isUserScanned for at sikre os at han ikke kan aflevere uden selv at være tilstede

                                userInUse = lendedObject.UserObject; //Vi sætter userInUse for at sikre os at man ikke scanner forskellige brugere sammen

                                PrintUserData(lendedObject);         //Printer alle hans data og hans nuværende lån/arkiv

                                CommentCheck(lendedObject);          //tjekker om der er nogle noter skrevet om personen
                            }
                        }
                    }
                    else //On Items Scanned
                    {
                        string     userMifare        = LendController.Instance.CheckIfLended(scannedItem.ItemMifare);//Tjekker om det item der er scanned er udlånt til en person, hvis der er udlånt skal vi hante alle hans data g hans lån/arkiv
                        TimeSpan   timeSpanMonToThur = Settings.Default.TimeForReturnMonToThur; //Afleveringsdato for man-tors
                        TimeSpan   timeSpanFri       = Settings.Default.TimeForReturnFriday;    //Afleveringsdato for fradag
                        LendObject scannedLendObject = null;

                        if (DateTime.Now.DayOfWeek == DayOfWeek.Friday)//Hvis der er valgt at afleveringsdatoen er fredag
                        {
                            scannedLendObject = new LendObject(scannedItem, DateTime.Now, datePickerReturn.SelectedDate.Value.Date + timeSpanFri, null);
                        }
                        else
                        {
                            scannedLendObject = new LendObject(scannedItem, DateTime.Now, datePickerReturn.SelectedDate.Value.Date + timeSpanMonToThur, null);
                        }

                        if (userMifare != "")//Hvis userMifare indeholder noget, er itemmet udlånt
                        {
                            //ScannedItem Er Udlånt
                            if (isItemsLended != false)                                      //Tjekker at vi ikke scanne udlånt udstyr med ikk-udlånt udstyr
                            {
                                if (userInUse == null || userMifare == userInUse.UserMifare) //Tjekker at du ikke scanne udstyr der er udlånt til andre end den bruger der er i gang
                                {
                                    isItemsLended = true;
                                    if (!ScannedItemMifares.Contains(scannedItem.ItemMifare))                        //tjekker at vi ikke scanner det samme mifare mere end én gang
                                    {
                                        LendedObject lendedObject = LendController.Instance.GetUserData(userMifare); //henter brugeren som itemmet er udlånt til's date, lån/arkiv

                                        foreach (LendObject lendObject in lendedObject.LendObjects)                  //giver det scanned udtyr de rigtige datoer, istedet for de datoer som der er valgt
                                        {
                                            if (lendObject.ItemObject.ItemMifare == scannedLendObject.ItemObject.ItemMifare)
                                            {
                                                scannedLendObject.ReturnDate = lendObject.ReturnDate;
                                                scannedLendObject.LendDate   = lendObject.LendDate;
                                            }
                                        }

                                        PrintItemToList(scannedLendObject);  //printer itemmet til listen over scannet items

                                        userInUse = lendedObject.UserObject; //Vi sætter userInUse for at sikre os at man ikke scanner forskellige brugere sammen
                                        if (lendedObject.UserObject == null)
                                        {
                                            MessageBox.Show("Brugeren der har lånt dette produkt kan ikke findes i databasen. Der kan stadig afleveres men du kan ikke se hvem der har haft lånt dette.");
                                        }
                                        else
                                        {
                                            PrintUserData(lendedObject); //Printer alle hans data og hans nuværende lån/arkiv

                                            CommentCheck(lendedObject);  //tjekker om der er nogle noter skrevet om personen
                                        }
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Du kan kun scanne udstyr er udlånt til samme bruger!");
                                }
                            }
                            else
                            {
                                MessageBox.Show("Du må IKKE scanne udstyr der er udlånt med udstyr der ikke er udlånt!");
                            }
                        }
                        else
                        {
                            //ScannedItem Er IKKE Udlånt
                            if (isItemsLended != true)//tjekker at du ikke scanner udlånt udstyr med ikke-udlånt udstyr
                            {
                                isItemsLended = false;
                                try
                                {
                                    if (!ScannedItemMifares.Contains(scannedItem.ItemMifare))                                               //Tjekker at du ikke scanner det samme mifare mere end én gang
                                    {
                                        if (userInUse != null)                                                                              //Hvis vi har scannet en bruger
                                        {
                                            if (userInUse.HasPC && !userInUse.IsTeacher && scannedLendObject.ItemObject.Type == "Computer") //tjekker om han har en computer og om han er lærer
                                            {
                                                MessageBox.Show("Denne Bruger Har Allerede 1 Computer Og Er Ikke Lærer");
                                            }
                                            else
                                            {
                                                PrintItemToList(scannedLendObject);//printer itemmet til listen over scannet items
                                            }
                                        }
                                        else
                                        {
                                            PrintItemToList(scannedLendObject);//printer itemmet til listen over scannet items
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Du Har Allerede Scannet Dette Produkt");
                                    }
                                }
                                catch (Exception)
                                {
                                    MessageBox.Show("Noget Gik Galt Fejlkode: 10x5");
                                }
                            }
                            else
                            {
                                MessageBox.Show("Du må IKKE scanne udstyr der ikke er udlånt med udstyr der er udlånt!");
                            }
                        }
                    }
                    TextBoxMain.Text = "";     //clear Main TextBox
                    TextBoxMain.Focus();       //focuser Main TextBox
                    if (isItemsLended == true) //hvis vi har scannet et udstyr der er udlånt skal den disable ButtonLend
                    {
                        ButtonReturn.IsEnabled            = true;
                        ButtonReturnWIthoutCard.IsEnabled = true;
                        ButtonLend.IsEnabled = false;
                    }
                    else//hvis vi har scannet et udstyr der ikke er udlånt skal den disable ButtonReturn
                    {
                        ButtonLend.IsEnabled   = true;
                        ButtonReturn.IsEnabled = false;
                    }
                }
            }
        }
Example #14
0
 public MainWindow()
 {
     InitializeComponent();
     TextBoxMain.Focus();
     StartScanner();
 }
Example #15
0
        public void PrintUserData(LendedObject lendedObject)
        {
            LabelNameResult.Content    = ($"{lendedObject.UserObject.FName} {lendedObject.UserObject.LName}");
            LabelNameResult.Visibility = Visibility.Visible;

            LabelZbcNameResult.Content    = lendedObject.UserObject.ZbcName;
            LabelZbcNameResult.Visibility = Visibility.Visible;

            LabelPhoneResult.Content    = lendedObject.UserObject.PhoneNumber;
            LabelPhoneResult.Visibility = Visibility.Visible;

            LabelTeacherResult.Content = (lendedObject.UserObject.IsTeacher) ? "Ja" : "Nej";

            LabelIsDisabledResult.Content    = (userInUse.IsDisabled) ? "Ja" : "Nej";
            LabelIsDisabledResult.Foreground = (userInUse.IsDisabled) ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Green);

            LabelIsScannedResult.Content    = (isUserScanned) ? "Ja" : "Nej";
            LabelIsScannedResult.Foreground = (isUserScanned) ? new SolidColorBrush(Colors.Green) : new SolidColorBrush(Colors.Red);

            //if (userInUse.IsDisabled)
            //{
            //    LabelIsDisabledResult.Content = "Ja";
            //    LabelIsDisabledResult.Foreground = new SolidColorBrush(Colors.Red);
            //}
            //else
            //{
            //    LabelIsDisabledResult.Content = "Nej";
            //    LabelIsDisabledResult.Foreground = new SolidColorBrush(Colors.Green);
            //}

            //if (isUserScanned)
            //{
            //    LabelIsScannedResult.Content = "Ja";
            //    LabelIsScannedResult.Foreground = new SolidColorBrush(Colors.Green);
            //}
            //else
            //{
            //    LabelIsScannedResult.Content = "Nej";
            //    LabelIsScannedResult.Foreground = new SolidColorBrush(Colors.Red);
            //}

            LabelTeacherResult.Visibility    = Visibility.Visible;
            LabelIsDisabledResult.Visibility = Visibility.Visible;
            LabelIsScannedResult.Visibility  = Visibility.Visible;

            ButtonComment.IsEnabled = true;

            this.ListViewLend.Items.Clear();

            foreach (LendObject lendObject in lendedObject.LendObjects)
            {
                bool?isOverdue = null;

                if (lendObject.ReturnDate.Date < DateTime.Now.Date && lendObject.ReturnedDate == null)
                {
                    isOverdue = true;
                }
                else if (lendObject.ReturnDate.Date > DateTime.Now.Date && lendObject.ReturnedDate == null)
                {
                    isOverdue = false;
                }
                else if (lendObject.ReturnDate.Date == DateTime.Now.Date && lendObject.ReturnedDate == null)
                {
                    if (lendObject.ReturnDate.TimeOfDay < DateTime.Now.TimeOfDay && lendObject.ReturnedDate == null)
                    {
                        isOverdue = true;
                    }
                    else if (lendObject.ReturnDate.TimeOfDay >= DateTime.Now.TimeOfDay && lendObject.ReturnedDate == null)
                    {
                        isOverdue = false;
                    }
                }
                this.ListViewLend.Items.Add(new ListViewObject(lendObject.ItemObject.ItemMifare, lendObject.ItemObject.Type,
                                                               lendObject.ItemObject.Manufacturer, lendObject.ItemObject.Model, lendObject.ItemObject.Id, lendObject.ItemObject.SerialNumber,
                                                               lendObject.LendDate, lendObject.ReturnDate, lendObject.ReturnedDate, isOverdue, ""));
            }
            TextBoxMain.Focus();
        }
Example #16
0
        private void SendMessage()
        {
            Color tmpcolor = ColorPicker.Color;

            message.MessageContent = null;
            message.PictureLink    = null;
            message.Color          = null;

            string tmp = TextBoxMain.Text;

            if (CurrentLoginedUser == null)
            {
                this.ShowMessageAsync("Error", "You must login before sending message");
                return;
            }

            UsersFrom.SelectedItem = CurrentLoginedUser;

            message.Sender      = (UsersFrom.SelectedItem as Person);
            message.dateTime    = DateTime.Now;
            message.PictureLink = link;
            message.Color       = ColorPicker.Color.ToString();

            //      MessageBox.Show((RoomsFrom.SelectedItem as Rooms).Name, "within sendmessage");
            message.Room = RoomsFrom.SelectedItem as Rooms;



            CurrentLoginedUser.MessageCount++;

            //if (TextBoxMain.Text.ToLower().Contains("pink") {
            //  char.IsLetter(TextBoxMain.Text.IndexOf("!") + 1
            //}
            string res = "";

            foreach (var item in colors)
            {
                if (TextBoxMain.Text.Contains("!" + item.ToLower()))
                {
                    message.Color = item;
                }
                //if (char.IsLetter(TextBoxMain.Text[TextBoxMain.Text.IndexOf("!") + 1]) == true) { // kostil

                //}
            }

            try {
                for (int i = 0; i < tmp.Length; i++)
                {
                    if (tmp[i] == '!' && char.IsLetter(tmp[i + 1]))
                    {
                        continue;
                    }
                    else
                    {
                        res += tmp[i];
                    }
                }
            }
            catch (Exception) {
            }

            if (TextBoxMain.Text.Length <= 1 || TextBoxMain.Text == null)
            {
                this.ShowMessageAsync("Error", "You wrote nothing");
                return;
            }


            //foreach(char c in tmp) {
            //    if (c == '!')
            //        continue;
            //    else
            //        res += c;
            //}


            message.MessageContent = res;

            db.Messages.Add(message);
            db.SaveChanges();

            TextBoxMain.Clear();
            link = string.Empty;
            ButtonPhoto.Content = "🔗";
            ColorPicker.Color   = tmpcolor;

            UpdateContent();
        }
 private void ButtonClear_Click(object sender, RoutedEventArgs e)
 {
     TextBoxMain.Clear();
 }