public void editTravel(Reise reise, string country, DateTime start, DateTime end, decimal price, bool staffed,
                        string nameofstaff = "")
 {
     Reise = M120Entities.Reises.Find(reise);
     SetAttributes(country, start, end, price, staffed, nameofstaff);
     M120Entities.SaveChanges();
 }
 public void addTravel(string country, DateTime start, DateTime end, decimal price, bool staffed,
                       string nameofstaff = "")
 {
     Reise = new Reise();
     SetAttributes(country, start, end, price, staffed, nameofstaff);
     M120Entities.SaveChanges();
 }
Esempio n. 3
0
        public void TestRefresh()
        {
            m.Hinzufuegen(r);
            pm.MakePersistent(m);
            pm.Save();
            pm.MakeHollow(r);
            pm.Refresh(r);
            Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "Wrong state #1");
            pm.Refresh(r);
            Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "Wrong state #2");
            ObjectId id = r.NDOObjectId;

            PersistenceManager pm2 = PmFactory.NewPersistenceManager();
            Reise m2 = (Reise)pm2.FindObject(id);

            Assert.NotNull(m2, "Cannot load object");
            m2.Zweck = "Test";
            pm2.Save();
            pm2.Close();

            Assert.AreEqual("ADC", r.Zweck, "Wrong name #1");
            Assert.AreEqual("Test", m2.Zweck, "Wrong name #2");
            pm.Refresh(r);
            Assert.AreEqual("Test", r.Zweck, "Wrong name #3");
        }
Esempio n. 4
0
        public void TestIList()
        {
            int i = 0;

            // Leseoperationen
            Reise r = (Reise)dieReisen[i];

            foreach (Reise r2 in dieReisen)
            {
                Console.WriteLine(r2.Zweck);
            }
            Reise[] arr = new Reise[] {};
            dieReisen.CopyTo(arr, 0);
            IEnumerator ie = dieReisen.GetEnumerator();


            // Schreiboperationen
            dieReisen.Add(r);
            dieReisen.Clear();
            dieReisen.Insert(0, r);
            dieReisen.Remove(r);
            dieReisen.RemoveAt(0);

            // Kann mit der bloöen Oid implementiert werden.
            bool b = dieReisen.Contains(r);

            dieReisen.IndexOf(r);
        }
Esempio n. 5
0
        public async Task EndreLoggetInnFeilModel()
        {
            // Arrange

            var reise1 = new Reise
            {
                Rid       = 1,
                reiserFra = "Oslo",
                reiserTil = "Bergen",
                pris      = 299,
                dag       = "Mandag",
                tidspunkt = "13:00"
            };

            mockRep.Setup(k => k.Endre(reise1)).ReturnsAsync(true);

            var bussController = new BussController(mockRep.Object, mockLog.Object);

            bussController.ModelState.AddModelError("Fornavn", "Feil i inputvalidering på server");

            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            bussController.ControllerContext.HttpContext = mockHttpContext.Object;

            // Act

            var resultat = await bussController.Endre(reise1) as BadRequestObjectResult;

            // Assert

            Assert.Equal((int)HttpStatusCode.BadRequest, resultat.StatusCode);
            Assert.Equal("Feil i inputvalidering på server", resultat.Value);
        }
Esempio n. 6
0
        public ActionResult KjopBillett(FormCollection innListe)
        {
            DB db = new DB();

            if (innListe["fra"] == "fra")//møl
            {
                System.Diagnostics.Debug.WriteLine("Inn i første If " + innListe["Dato"]);

                if (innListe["Dato"] == "2019-10-15")
                {
                    System.Diagnostics.Debug.WriteLine("Inn i andre If " + innListe["Tid"]);

                    if (innListe["Tid"] == "08:00")
                    {
                        System.Diagnostics.Debug.WriteLine("Inn i tredje If");

                        Reise   enreise   = db.Reise.FirstOrDefault(p => p.Avgang == "Oslo");
                        Billett nyBillett = new Billett
                        {
                            ReiseId = enreise.Id
                        };
                        db.Billetter.Add(nyBillett);
                        db.SaveChanges();
                    }
                }
            }


            var alleBilletter = db.Billetter.ToList();

            return(View(alleBilletter));
        }
Esempio n. 7
0
        public void PrefetchOccurs()
        {
            Reise r = new Reise()
            {
                Zweck = "NDO"
            };
            Mitarbeiter m = new Mitarbeiter()
            {
                Vorname = "Mirko", Nachname = "Matytschak"
            };

            pm.MakePersistent(m);
            m.Hinzufuegen(r);
            pm.Save();

            NDOQuery <Mitarbeiter> q = new NDOQuery <Mitarbeiter>(pm);

            q.AddPrefetch(nameof(Mitarbeiter.Reisen));

            var m2 = q.ExecuteSingle();

            var oc = pm.GetObjectContainer();

            Assert.AreEqual(2, oc.RootObjects.Count);
        }
Esempio n. 8
0
        public void TestAssignRelatedObjectsAbort()
        {
            for (int i = 0; i < 3; i++)
            {
                m.Hinzufuegen(CreateReise(i.ToString()));
            }
            pm.MakePersistent(m);
            pm.Save();
            IList neueReisen = new ArrayList();
            Reise nr         = CreateReise("Test");

            neueReisen.Add(nr);

            IList rr = new ArrayList(m.Reisen);

            m.ErsetzeReisen(neueReisen);
            Assert.AreEqual(1, m.Reisen.Count, "1. Wrong number of objects");
            for (int i = 0; i < 3; i++)
            {
                Assert.AreEqual(NDOObjectState.Deleted, ((Reise)rr[i]).NDOObjectState, "2. Wrong state");
            }
            Assert.AreEqual(NDOObjectState.Created, nr.NDOObjectState, "3. Wrong state");

            pm.Abort();
            Assert.AreEqual(3, m.Reisen.Count, "4. Wrong number of objects");
            for (int i = 0; i < 3; i++)
            {
                Assert.AreEqual(NDOObjectState.Persistent, ((Reise)rr[i]).NDOObjectState, "5. Wrong state");
            }
            Assert.AreEqual(NDOObjectState.Transient, nr.NDOObjectState, "6. Wrong state");
        }
Esempio n. 9
0
        public void TestExtentRelatedObjects()
        {
            r.AddKostenpunkt(kp);
            pm.MakePersistent(r);
            pm.Save();
            Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "0: Reise should be persistent");
            IList liste = pm.GetClassExtent(typeof(Reise));

            r = (Reise)liste[0];
            Assert.AreEqual(1, liste.Count, "1: Number of Reise objects is wrong");
            Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "1: Reise should be persistent");
            Assert.NotNull(r.Kostenpunkte, "2. Relation is missing");
            Assert.AreEqual(1, r.Kostenpunkte.Count, "3. Wrong number of objects");
            Assert.AreEqual(NDOObjectState.Persistent, ((Kostenpunkt)r.Kostenpunkte[0]).NDOObjectState, "4.: Kostenpunkt should be hollow");

            pm.UnloadCache();
            liste = pm.GetClassExtent(typeof(Reise));
            r     = (Reise)liste[0];
            Assert.AreEqual(NDOObjectState.Hollow, r.NDOObjectState, "5: Reise should be hollow");
            Assert.NotNull(r.Kostenpunkte, "6. Relation is missing");
            Assert.AreEqual(1, r.Kostenpunkte.Count, "7. Wrong number of objects");
            Assert.AreEqual(NDOObjectState.Hollow, ((Kostenpunkt)r.Kostenpunkte[0]).NDOObjectState, "8.: Kostenpunkt should be hollow");

            pm.UnloadCache();
            liste = pm.GetClassExtent(typeof(Reise), false);
            r     = (Reise)liste[0];
            Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "9: Reise should be persistent");
            Assert.NotNull(r.Kostenpunkte, "10. Relation is missing");
            Assert.AreEqual(1, r.Kostenpunkte.Count, "11. Wrong number of objects");
            Assert.AreEqual(NDOObjectState.Hollow, ((Kostenpunkt)r.Kostenpunkte[0]).NDOObjectState, "12.: Kostenpunkt should be hollow");
        }
Esempio n. 10
0
        public Reise ErzeugeReise()
        {
            Reise r = new Reise();

            dieReisen.Add(r);
            return(r);
        }
Esempio n. 11
0
        private Reise CreateReise(string zweck)
        {
            Reise r = new Reise();

            r.Zweck = zweck;
            return(r);
        }
Esempio n. 12
0
        public IHttpActionResult PutReise(int id, Reise reise)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != reise.Id)
            {
                return(BadRequest());
            }

            db.Entry(reise).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ReiseExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Esempio n. 13
0
 public void TestLockingPolyBi()
 {
     if (t != null)
     {
         Reise reise = new Reise();
         reise.Zweck = "ADC";
         Kostenpunkt kp = new PKWFahrt(100);
         reise.AddKostenpunkt(kp);
         pm.MakePersistent(reise);
         Relation rel  = pm.NDOMapping.FindClass(typeof(Reise)).FindRelation("belege");
         Relation rel2 = pm.NDOMapping.FindClass(typeof(Beleg)).FindRelation("reise");
         Assert.AreEqual(rel, rel2, "Relation should be considered the same");
         bool b = GetLock(reise, rel, kp);
         Assert.AreEqual(true, b, "There shouldn't be a lock");
         Assert.AreEqual(true, IsLocked(reise, rel, kp), "Objects should be locked #1");
         Assert.AreEqual(true, IsLocked(kp, rel, reise), "Objects should be locked #2");
         Assert.AreEqual(false, GetLock(kp, rel.ForeignRelation, reise), "Objects should be locked #3");
         Assert.AreEqual(false, GetLock(reise, rel.ForeignRelation, kp), "Objects should be locked #4");
         Assert.AreEqual(false, GetLock(kp, rel2, reise), "Objects should be locked #5");
         Assert.AreEqual(false, GetLock(reise, rel2, kp), "Objects should be locked #6");
         Assert.AreEqual(false, GetLock(kp, rel2.ForeignRelation, reise), "Objects should be locked #7");
         Assert.AreEqual(false, GetLock(reise, rel2.ForeignRelation, kp), "Objects should be locked #8");
         Unlock(reise, rel, kp);
         Assert.AreEqual(false, IsLocked(reise, rel, kp), "Objects should be locked #1");
         Assert.AreEqual(false, IsLocked(kp, rel, reise), "Objects should be locked #2");
         Assert.AreEqual(false, IsLocked(kp, rel.ForeignRelation, reise), "Objects should be locked #3");
         Assert.AreEqual(false, IsLocked(reise, rel.ForeignRelation, kp), "Objects should be locked #4");
         Assert.AreEqual(false, IsLocked(kp, rel2, reise), "Objects should be locked #5");
         Assert.AreEqual(false, IsLocked(reise, rel2, kp), "Objects should be locked #6");
         Assert.AreEqual(false, IsLocked(kp, rel2.ForeignRelation, reise), "Objects should be locked #7");
         Assert.AreEqual(false, IsLocked(reise, rel2.ForeignRelation, kp), "Objects should be locked #8");
     }
 }
Esempio n. 14
0
        public async Task HentEnReiseLoggetInnOK()
        {
            // Arrange

            var reise1 = new Reise
            {
                Rid       = 3,
                reiserFra = "Trondheim",
                reiserTil = "Oslo",
                pris      = 599,
                dag       = "Onsdag",
                tidspunkt = "14:00"
            };

            mockRep.Setup(k => k.HentEnReise(It.IsAny <int>())).ReturnsAsync(reise1);

            var bussController = new BussController(mockRep.Object, mockLog.Object);

            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            bussController.ControllerContext.HttpContext = mockHttpContext.Object;

            // Act

            var resultat = await bussController.HentEnReise(It.IsAny <int>()) as OkObjectResult;

            // Assert

            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal <Reise>(reise1, (Reise)resultat.Value);
        }
Esempio n. 15
0
        public void ChangeRelationWithExistingObject(Type formatterType)
        {
            // Create object and serialize it
            IFormatter formatter = (IFormatter)Activator.CreateInstance(formatterType);

            var r = new Reise {
                Zweck = "NDO"
            };

            pm.MakePersistent(r);
            var l = new Land("Germany");

            pm.MakePersistent(l);
            pm.Save();
            var oc = pm.GetObjectContainer();

            oc.Formatter = formatter;
            string serialized = oc.MarshalingString;

            pm.UnloadCache();

            // Merge object in to an OfflinePersistenceManager and change it
            OfflinePersistenceManager opm = new OfflinePersistenceManager(pm.NDOMapping.FileName);

            oc = new ObjectContainer();
            oc.Deserialize(serialized, formatter);

            opm.MergeObjectContainer(oc);

            var newOc = oc.RootObjects.Cast <IPersistenceCapable>();
            var r2    = (Reise)newOc.FirstOrDefault(pc => pc is Reise);
            var l2    = (Land)newOc.FirstOrDefault(pc => pc is Land);;

            Assert.AreEqual(NDOObjectState.Persistent, r2.NDOObjectState);
            Assert.AreEqual(NDOObjectState.Persistent, l2.NDOObjectState);
            r2.LandHinzufügen(l2);
            Assert.AreEqual(NDOObjectState.PersistentDirty, r2.NDOObjectState);

            // Create a ChangeSetContainer and serialize it
            var csc = opm.GetChangeSet();

            csc.Formatter = formatter;
            string serializedChanges = csc.MarshalingString;

            // Merge the changes back to pm
            csc = new ChangeSetContainer();
            csc.Deserialize(serializedChanges, formatter);
            r = (Reise)csc.ChangedObjects.Cast <IPersistenceCapable>().FirstOrDefault(pc => pc is Reise);
            pm.MergeObjectContainer(csc);
            r2 = (Reise)pm.FindObject(r.NDOObjectId);
            Assert.AreEqual(NDOObjectState.PersistentDirty, r2.NDOObjectState);
            Assert.AreEqual(1, r2.Länder.Count);

            // Save and Reload
            pm.Save();
            pm.UnloadCache();
            r = pm.Objects <Reise>().Single();
            Assert.AreEqual(1, r2.Länder.Count);
        }
Esempio n. 16
0
 public void Setup()
 {
     pm = PmFactory.NewPersistenceManager();
     m  = CreateMitarbeiter("Hartmut", "Kocher");
     pm.MakePersistent(m);
     r  = CreateReise("ADC");
     r2 = CreateReise("ADW");
 }
Esempio n. 17
0
 public void Setup()
 {
     pm = PmFactory.NewPersistenceManager();
     r  = CreateReise("ADC");
     m  = CreateMitarbeiter();
     m.Hinzufuegen(r);
     pm.MakePersistent(m);
 }
Esempio n. 18
0
 public void TestCreateObjects()
 {
     pm.MakePersistent(m);
     pm.MakePersistent(r);
     Assert.That(!m.NDOObjectId.Equals(r.NDOObjectId), "Ids should be different");
     m = (Mitarbeiter)pm.FindObject(m.NDOObjectId);
     r = (Reise)pm.FindObject(r.NDOObjectId);
 }
Esempio n. 19
0
        public async Task HentReiserLoggetInnOK()
        {
            // Arrange

            var reise1 = new Reise
            {
                Rid       = 1,
                reiserFra = "Oslo",
                reiserTil = "Bergen",
                pris      = 299,
                dag       = "Mandag",
                tidspunkt = "13:00"
            };
            var reise2 = new Reise
            {
                Rid       = 2,
                reiserFra = "Bergen",
                reiserTil = "Oslo",
                pris      = 399,
                dag       = "Tirsdag",
                tidspunkt = "12:00"
            };
            var reise3 = new Reise
            {
                Rid       = 3,
                reiserFra = "Trondheim",
                reiserTil = "Oslo",
                pris      = 599,
                dag       = "Onsdag",
                tidspunkt = "14:00"
            };

            var reiseListe = new List <Reise>();

            reiseListe.Add(reise1);
            reiseListe.Add(reise2);
            reiseListe.Add(reise3);

            mockRep.Setup(k => k.HentReiser()).ReturnsAsync(reiseListe);

            var bussController = new BussController(mockRep.Object, mockLog.Object);

            mockSession[_loggetInn] = _loggetInn;
            mockHttpContext.Setup(s => s.Session).Returns(mockSession);
            bussController.ControllerContext.HttpContext = mockHttpContext.Object;

            // Act

            var resultat = await bussController.HentReiser() as OkObjectResult;

            // Assert

            Assert.Equal((int)HttpStatusCode.OK, resultat.StatusCode);
            Assert.Equal <List <Reise> >((List <Reise>)resultat.Value, reiseListe);
        }
Esempio n. 20
0
        public void TestLoadRelatedObjects()
        {
            NDOQuery <Mitarbeiter> q = new NDOQuery <Mitarbeiter>(pm, null);
            IList dellist            = q.Execute();

            pm.Delete(dellist);
            pm.Save();
            pm.UnloadCache();

            for (int i = 0; i < 10; i++)
            {
                m.Hinzufuegen(CreateReise(i.ToString()));
            }
            pm.MakePersistent(m);
            pm.Save();
            pm.MakeHollow(m, true);

            IList reisen = new ArrayList(m.Reisen);

            Assert.AreEqual(10, reisen.Count, "Array size should be 10");

            for (int i = 0; i < 10; i++)
            {
                Reise rr = (Reise)reisen[i];
                Assert.AreEqual(NDOObjectState.Hollow, rr.NDOObjectState, "1: Reise should be hollow");
//				if (i.ToString()!= rr.Zweck)
//				{
//					for (int j = 0; j < 10; j++)
//						System.Diagnostics.Debug.WriteLine("Reise: " + ((Reise)reisen[j]).Zweck);
//				}
#if !ORACLE && !MYSQL && !FIREBIRD
                if (rr.NDOObjectId.Id[0] is Int32)
                {
                    Assert.AreEqual(i.ToString(), rr.Zweck, "2: Reise should be in right order");
                }
#endif
            }


            pm.MakeAllHollow();
            pm.UnloadCache();
            IList reisen2 = m.Reisen;
            for (int i = 0; i < 10; i++)
            {
                Reise r1 = (Reise)reisen[i];
                Reise r2 = (Reise)reisen2[i];
#if !ORACLE && !MYSQL && !FIREBIRD
                if (r1.NDOObjectId.Id[0] is Int32)
                {
                    Assert.AreEqual(i.ToString(), r1.Zweck, "3: Reise should be in right order");
                }
#endif
                Assert.That(r1 != r2, "Objects should be different");
            }
        }
Esempio n. 21
0
        public IHttpActionResult GetReise(int id)
        {
            Reise reise = db.Reiser.Find(id);

            if (reise == null)
            {
                return(NotFound());
            }

            return(Ok(reise));
        }
Esempio n. 22
0
        public IHttpActionResult PostReise(Reise reise)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.Reiser.Add(reise);
            db.SaveChanges();
            db.Entry(reise).GetDatabaseValues();
            return(CreatedAtRoute("DefaultApi", new { id = reise.Id }, reise));
        }
Esempio n. 23
0
        public void TestCreateObjectsSave()
        {
            r.AddKostenpunkt(kp);
            pm.MakePersistent(r);
            pm.Save();

            pm.UnloadCache();
            r = (Reise)pm.FindObject(r.NDOObjectId);
            Assert.NotNull(r, "Reise not found");
            Assert.AreEqual(1, r.Kostenpunkte.Count);
            Assert.NotNull(r.Kostenpunkte[0], "Beleg not found");
        }
Esempio n. 24
0
        public ActionResult ReiseInfo(KundeReise info)
        {
            if (info.kunde == null)
            {
                var    fra     = Session["Fra"].ToString();
                var    til     = Session["Til"].ToString();
                var    dato    = Session["Dato"].ToString();
                var    tid     = Request["Tid"];
                double pris    = Double.Parse(Request["Pris"]);
                var    spor    = Request["Spor"];
                var    tog     = Request["Tog"];
                int    bytter  = int.Parse(Request["Bytter"]);
                var    avgang  = Request["Avgang"];
                var    ankomst = Request["Ankomst"];

                reise = new Reise
                {
                    Fra     = fra,
                    Til     = til,
                    Dato    = dato,
                    Tid     = tid,
                    Pris    = pris,
                    Spor    = spor,
                    Tog     = tog,
                    Bytter  = bytter,
                    Avgang  = avgang,
                    Ankomst = ankomst
                };

                KundeReise reisen = new KundeReise
                {
                    kunde = null,
                    reise = reise
                };
                Session["Reisen"] = reisen;

                return(View(Session["Reisen"]));
            }

            Billett billet = new Billett();

            info.reise   = ((KundeReise)Session["Reisen"]).reise;
            billet.Reise = info.reise;
            billet.Kunde = info.kunde;
            db.Billett.Add(billet);
            db.Reise.Add(info.reise);
            db.Kunde.Add(info.kunde);
            db.SaveChanges();
            Session["ID"] = billet.ID;

            return(RedirectToAction("Billett", Session["ID"]));
        }
Esempio n. 25
0
        //Henter ut kun en reise
        public async Task <Reise> HentEnReise(int id)
        {
            try
            {
                Reise hentetReise = await _db.Reiser.FindAsync(id);

                return(hentetReise);
            }
            catch
            {
                return(null);
            }
        }
Esempio n. 26
0
 public void TestAddObjectSave()
 {
     pm.MakePersistent(m);
     pm.Save();
     m.Hinzufuegen(r);
     Assert.AreEqual(NDOObjectState.Created, r.NDOObjectState, "1. Wrong state");
     pm.Save();
     m = (Mitarbeiter)pm.FindObject(m.NDOObjectId);
     r = (Reise)pm.FindObject(r.NDOObjectId);
     Assert.NotNull(m, "1. Mitarbeiter not found");
     Assert.NotNull(r, "1. Reise not found");
     Assert.AreEqual(NDOObjectState.Persistent, r.NDOObjectState, "2. Wrong state");
 }
Esempio n. 27
0
        public async Task <Avgang> HentReise(Reise reise)
        {
            try
            {
                List <Avgang> avgangList = await HentAlleAvganger();

                return(reise.besteAvgang(avgangList));
            }
            catch (Exception e)
            {
                _log.LogInformation(e.Message);
                return(null);
            }
        }
Esempio n. 28
0
        public void TestUnloadCache()
        {
            m.Hinzufuegen(r);
            pm.MakePersistent(m);
            Assert.AreSame(r, pm.FindObject(r.NDOObjectId), "Getting same object twice should return same object");
            pm.Save();
            pm.UnloadCache();
            Assert.That(r != pm.FindObject(r.NDOObjectId), "Getting same object twice should return different objects");
            ObjectId id = r.NDOObjectId;

            r = null;
            pm.UnloadCache();
            Assert.NotNull(pm.FindObject(id), "Should find object");
        }
Esempio n. 29
0
        public IHttpActionResult DeleteReise(int id)
        {
            Reise reise = db.Reiser.Find(id);

            if (reise == null)
            {
                return(NotFound());
            }

            db.Reiser.Remove(reise);
            db.SaveChanges();

            return(Ok(reise));
        }
Esempio n. 30
0
 public void TestAddObjectSave()
 {
     pm.MakePersistent(r);
     pm.Save();
     r.AddKostenpunkt(kp);
     Assert.AreEqual(NDOObjectState.Created, kp.NDOObjectState, "1. Wrong state");
     pm.Save();
     r  = (Reise)pm.FindObject(r.NDOObjectId);
     kp = (Kostenpunkt)pm.FindObject(kp.NDOObjectId);
     Assert.NotNull(r, "1. Reise not found");
     Assert.NotNull(kp, "2. Beleg not found");
     Assert.AreEqual(NDOObjectState.Persistent, kp.NDOObjectState, "3. Wrong state");
     Assert.AreEqual(DateTime.Now.Date, kp.Datum, "Wrong data");
 }