Exemple #1
0
        public void TestMultSourCit()
        {
            var txt = "0 @M1@ OBJE\n1 SOUR out of bed\n2 TEXT fumbar ex\n2 CONC tended\n2 QUAY nope\n1 FILE reference\n2 FORM gif\n1 RIN rin_tin_tin\n1 SOUR inbed\n2 TEXT foebar \n2 CONC extended\n2 QUAY yup";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("gif", rec.Files[0].Form);

            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(0, rec.Unknowns.Count);
            Assert.AreEqual("rin_tin_tin", rec.RIN);
            Assert.AreEqual(2, rec.Cits.Count);

            Assert.AreEqual("out of bed", rec.Cits[0].Desc);
            Assert.AreEqual(1, rec.Cits[0].Text.Count);
            Assert.AreEqual("fumbar extended", rec.Cits[0].Text[0]);
            Assert.AreEqual("nope", rec.Cits[0].Quay);

            Assert.AreEqual("inbed", rec.Cits[1].Desc);
            Assert.AreEqual(1, rec.Cits[1].Text.Count);
            Assert.AreEqual("foebar extended", rec.Cits[1].Text[0]);
            Assert.AreEqual("yup", rec.Cits[1].Quay);
        }
Exemple #2
0
        public async Task UploadFilesInObject(object data)
        {
            Dictionary <string, Property <FileWrapper> > fileWrapperMap = Helpers.ExtractFileWrappers(data);

            if (fileWrapperMap.Count == 0)
            {
                return;
            }


            List <FileWrapper> fileList = new List <FileWrapper>(fileWrapperMap.Count);

            foreach (Property <FileWrapper> fileProperty in fileWrapperMap.Values)
            {
                fileList.Add(fileProperty.Value);
            }

            MediaRecord[] mediaRecords = await this.client.UploadFiles(fileList);

            List <Property <FileRecord> > fileRecordList = new List <Property <FileRecord> >(fileWrapperMap.Count);

            for (int i = 0; i < mediaRecords.Length; i++)
            {
                MediaRecord mediaRecord = mediaRecords[i];
                //get the fileWrapper property by index of file in the list uploaded.
                Property <FileWrapper> fileWrapperProp = fileWrapperMap[fileList[i].GetId()];
                //build FileRecord property
                Property <FileRecord> fileRecordProp = fileWrapperProp.Transform((f) => new FileRecord(mediaRecord, f.Info()));
                fileRecordList.Add(fileRecordProp);
            }


            Helpers.AssignObjects(fileRecordList);
        }
Exemple #3
0
        public void NdefMultipleMessage()
        {
            // Arrange
            // Extract the data from the Mifare card dump
            var extract = ExtractAllBlocksFromCardDump(CardDumpExamples.Memory1KDumpMultipleEntries);
            // Get the NDEF section from the card dump
            var ndef = ExtractAllMessage(extract);
            // Act
            // Get the NDEF Message
            NdefMessage message       = new NdefMessage(ndef);
            var         firstRecord   = message.Records.First();
            var         recordTestUri = message.Records[2];
            var         uriRecord     = new UriRecord(recordTestUri);
            var         mediaTest     = message.Records[5];
            var         media         = new MediaRecord(mediaTest);
            var         ret           = media.TryGetPayloadAsText(out string payloadAsText);
            var         lastRecord    = message.Records.Last();

            // Assert
            // Check if all is ok
            Assert.Equal(10, message.Records.Count);
            Assert.True(firstRecord.Header.IsFirstMessage);
            Assert.True(UriRecord.IsUriRecord(recordTestUri));
            Assert.False(MediaRecord.IsMediaRecord(recordTestUri));
            Assert.Equal("bing.com/search?q=.net%20core%20iot", uriRecord.Uri);
            Assert.Equal(UriType.HttpsWww, uriRecord.UriType);
            Assert.Equal(new Uri("https://www.bing.com/search?q=.net%20core%20iot"), uriRecord.FullUri);
            Assert.True(MediaRecord.IsMediaRecord(mediaTest));
            Assert.Equal("text/vcard", media.PayloadType);
            Assert.True(media.IsTextType);
            Assert.True(ret);
            Assert.Contains("VCARD", payloadAsText);
            Assert.True(lastRecord.Header.IsLastMessage);
        }
Exemple #4
0
        public async Task <IActionResult> Edit(int id, [Bind("Name,Data,WebinarMeetingId,ExpireDate,Id,Modified")] MediaRecord mediaRecord)
        {
            if (id != mediaRecord.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(mediaRecord);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!MediaRecordExists(mediaRecord.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["WebinarMeetingId"] = new SelectList(_context.WebinarMeeting, "Id", "Description", mediaRecord.WebinarMeetingId);
            return(View(mediaRecord));
        }
Exemple #5
0
        public override void PostCheck(GEDCommon rec)
        {
            MediaRecord me = rec as MediaRecord;

            if (string.IsNullOrWhiteSpace(me.Ident))
            {
                UnkRec err = new UnkRec();
                err.Error = UnkRec.ErrorCode.MissIdent; // TODO "Missing identifier"; // TODO assign one?
                err.Beg   = err.End = me.BegLine;
                me.Errors.Add(err);
            }

            // A FILE record is required
            if (me.Files.Count < 1)
            {
                UnkRec err = new UnkRec();
                err.Error = UnkRec.ErrorCode.MissFile; // "Missing FILE";
                err.Beg   = err.End = me.BegLine;
                me.Errors.Add(err);
            }

            // Each FILE record must have a FORM
            foreach (var mediaFile in me.Files)
            {
                if (string.IsNullOrWhiteSpace(mediaFile.Form))
                {
                    UnkRec err = new UnkRec();
                    err.Error = UnkRec.ErrorCode.MissForm; // "Missing FORM";
                    err.Beg   = err.End = me.BegLine;
                    me.Errors.Add(err);
                }
            }
        }
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var responseObject = await HttpClientHelper.GetFromLMARApi <MediaRecord>($"https://localhost:44300/api/v1/archives/9/mediarecords/{id}");

            MediaRecord mediaRecord = responseObject.ResponseData;

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

            CheckoutDetails checkoutDetails = new CheckoutDetails()
            {
                SelectedSizeId = "1",
                Sizes          = _orderRepository.GetSizes()
            };

            mediaRecord.ImageLink = mediaRecord.Links.FirstOrDefault(l => l.Rel == "Thumbnail").Href;

            DetailsViewModel detailsViewModel = new DetailsViewModel()
            {
                MediaRecord     = mediaRecord,
                CheckoutDetails = checkoutDetails
            };

            return(View(detailsViewModel));
        }
Exemple #7
0
 public FileRecord(MediaRecord media, FileInfo info)
 {
     this.Name     = media.Name;
     this.Digest   = media.Digest;
     this.Mimetype = info.Mimetype;
     this.Size     = info.Size;
     this.Key      = info.Key;
 }
        public async Task <ActionResult> DeleteConfirmed(Guid id)
        {
            MediaRecord mediaRecord = await db.MediaRecords.FindAsync(id);

            db.MediaRecords.Remove(mediaRecord);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Exemple #9
0
 public FileRecord(MediaRecord media, FileInfo info)
 {
     this.Name      = media.Name;
     this.Digest    = media.Digest;
     this.Mimetype  = info.Mimetype;
     this.Size      = info.Size;
     this.Key       = info.Key;
     this.CreatedAt = info.CreatedAt.ToString("o");;
 }
        public async Task <ActionResult> Edit([Bind(Include = "Id,Title,IsPublic,IsAvailable")] MediaRecord mediaRecord)
        {
            if (ModelState.IsValid)
            {
                db.Entry(mediaRecord).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(mediaRecord));
        }
Exemple #11
0
        public void TestMissingFile()
        {
            var txt = "0 @M1@ OBJE\n";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Errors.Count, "Missing FILE");
        }
Exemple #12
0
        public async Task <IActionResult> Create([Bind("Name,Data,WebinarMeetingId,ExpireDate,Id,Modified")] MediaRecord mediaRecord)
        {
            if (ModelState.IsValid)
            {
                _context.Add(mediaRecord);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["WebinarMeetingId"] = new SelectList(_context.WebinarMeeting, "Id", "Description", mediaRecord.WebinarMeetingId);
            return(View(mediaRecord));
        }
        public async Task<IActionResult> GuidedTour(int? id, string collectionTitle, int displayOrder = 42)
        {
            ViewData["CollectionTitle"] = collectionTitle;

            //Just get media record for now
            //When set up with link between guided tours and media records will use mrc id and display order
            //Will need to sort by displayorder
            var responseObjectMR = await HttpClientHelper.GetFromLMARApi<MediaRecord>($"https://localhost:44300/api/v1/archives/9/mediarecords/{displayOrder}");
            MediaRecord mediaRecord = responseObjectMR.ResponseData;
            mediaRecord.ImageLink = mediaRecord.Links.FirstOrDefault(l => l.Rel == "Thumbnail").Href;

            return View(mediaRecord);
        }
        public async Task <ActionResult> Create([Bind(Include = "Id,Title,IsPublic,IsAvailable")] MediaRecord mediaRecord)
        {
            if (ModelState.IsValid)
            {
                mediaRecord.Id = Guid.NewGuid();
                db.MediaRecords.Add(mediaRecord);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(mediaRecord));
        }
Exemple #15
0
        public void TestMissingForm()
        {
            var txt = "0 @M1@ OBJE\n1 FILE reference";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual(1, rec.Errors.Count, "Missing FORM");
        }
Exemple #16
0
        public void TestNoteOther()
        {
            // exercise other lines
            var indi = "0 @M1@ OBJE\n1 NOTE\n2 OTHR gibber";
            var res  = ReadIt(indi);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("", rec.Notes[0].Text);
            Assert.AreEqual(1, rec.Notes[0].OtherLines.Count);
        }
        // GET: MediaRecords/Delete/5
        public async Task <ActionResult> Delete(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MediaRecord mediaRecord = await db.MediaRecords.FindAsync(id);

            if (mediaRecord == null)
            {
                return(HttpNotFound());
            }
            return(View(mediaRecord));
        }
Exemple #18
0
        public void TestSimple2()
        {
            var txt = "0 @M1@ OBJE\n1 FORM gif\n1 OBJE @xref@";
            var res = ReadIt(txt);
            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;
            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("gif", rec.Files[0].Form);

            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(1, rec.Unknowns.Count); // treat BLOB as unknown
        }
Exemple #19
0
        public void TestNote()
        {
            var indi = "0 @M1@ OBJE\n1 NOTE";
            var res  = ReadIt(indi);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("", rec.Notes[0].Text);

            indi = "0 @M1@ OBJE\n1 NOTE notes\n2 CONT more detail";
            res  = ReadIt(indi);
            Assert.AreEqual(1, res.Count);
            rec = res[0] as MediaRecord;
            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("notes\nmore detail", rec.Notes[0].Text);

            indi = "0 @M1@ OBJE\n1 NOTE notes\n2 CONT more detail\n1 FILE foo\n2 FORM bar\n1 NOTE notes2";
            res  = ReadIt(indi);
            Assert.AreEqual(1, res.Count);
            rec = res[0] as MediaRecord;
            Assert.IsNotNull(rec);
            Assert.AreEqual(2, rec.Notes.Count);
            Assert.AreEqual("notes\nmore detail", rec.Notes[0].Text);
            Assert.AreEqual("notes2", rec.Notes[1].Text);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("foo", rec.Files[0].FileRefn);
            Assert.AreEqual("bar", rec.Files[0].Form);

            // trailing space must be preserved
            indi = "0 @M1@ OBJE\n1 NOTE notes\n2 CONC more detail \n2 CONC yet more detail";
            res  = ReadIt(indi);
            Assert.AreEqual(1, res.Count);
            rec = res[0] as MediaRecord;
            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("notesmore detail yet more detail", rec.Notes[0].Text);

            indi = "0 @M1@ OBJE\n1 NOTE notes \n2 CONC more detail \n2 CONC yet more detail ";
            res  = ReadIt(indi);
            Assert.AreEqual(1, res.Count);
            rec = res[0] as MediaRecord;
            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("notes more detail yet more detail ", rec.Notes[0].Text);
        }
Exemple #20
0
        public void TestRin()
        {
            var txt = "0 @M1@ OBJE\n1 RIN foobar\n1 FILE reference\n2 FORM blah";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("blah", rec.Files[0].Form);
            Assert.AreEqual("foobar", rec.RIN);
        }
Exemple #21
0
        public void ExtraText()
        {
            var txt = "0 @M1@ OBJE blah blah blah\n1 FILE reference\n2 FORM gif";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual(1, rec.Errors.Count);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("gif", rec.Files[0].Form);
        }
Exemple #22
0
        private static void WriteOneObje(StreamWriter file, MediaRecord mediaRecord)
        {
            file.WriteLine("0 @{0}@ OBJE", mediaRecord.Ident);

            // TODO were 5.5 OBJE records converted to 5.5.1 ? kinda - don't have a REFN (error?)
            foreach (var mediaFile in mediaRecord.Files)
            {
                file.WriteLine("1 FILE {0}", mediaFile.FileRefn);
                WriteCommon.writeIfNotEmpty(file, "TITL", mediaFile.Title, 2);
                file.WriteLine("2 FORM {0}", mediaFile.Form);
                WriteCommon.writeIfNotEmpty(file, "TYPE", mediaFile.Type, 3);
            }
            WriteCommon.writeRecordTrailer(file, mediaRecord, 1);

            // TODO other lines /unknowns : don't have access to original text
        }
Exemple #23
0
        public void TestFileCust()
        {
            var txt = "0 @M1@ OBJE\n1 FILE reference\n2 _CUST foobar\n2 FORM gif";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("gif", rec.Files[0].Form);
            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(1, rec.Unknowns.Count);
            Assert.AreEqual(1, rec.Unknowns[0].LineCount);
        }
Exemple #24
0
        public void TestSimple1()
        {
            var txt = "0 @M1@ OBJE\n1 FILE reference\n2 FORM gif";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("OBJE", rec.Tag);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("gif", rec.Files[0].Form);

            Assert.AreEqual(0, rec.Errors.Count);
        }
Exemple #25
0
        public void TestBasic1()
        {
            // file, form, title
            var txt = "0 @M1@ OBJE\n1 FILE reference\n2 FORM wav\n2 TITL this is sparta";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("wav", rec.Files[0].Form);
            Assert.AreEqual("this is sparta", rec.Files[0].Title);

            Assert.AreEqual(0, rec.Errors.Count);
        }
Exemple #26
0
        public void OBJE2()
        {
            var txt = "0 @M1@ OBJE\n1 FORM gif\n1 BLOB\n2 CONT not real\n1 UID blah";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("gif", rec.Files[0].Form);

            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(1, rec.Unknowns.Count); // treat BLOB as unknown

            Assert.IsNotNull(rec.UID);
            Assert.AreEqual("blah", rec.UID);
        }
Exemple #27
0
        public void TestNote2()
        {
            // simple note
            var txt = "0 @M1@ OBJE\n1 NOTE blah blah blah\n1 REFN 001\n1 FILE reference\n2 FORM bmp";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(0, rec.Unknowns.Count);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("bmp", rec.Files[0].Form);
            Assert.AreEqual(1, rec.REFNs.Count);
            Assert.AreEqual("001", rec.REFNs[0].Value);
            Assert.AreEqual(1, rec.Notes.Count);
            Assert.AreEqual("blah blah blah", rec.Notes[0].Text);
        }
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var responseObject = await HttpClientHelper.GetFromLMARApi <MediaRecord>($"https://localhost:44300/api/v1/archives/10/mediarecords/{id}");

            MediaRecord mediaRecord = responseObject.ResponseData;

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

            mediaRecord.ImageLink = mediaRecord.Links.FirstOrDefault(l => l.Rel == "Thumbnail").Href;

            return(View(mediaRecord));
        }
Exemple #29
0
        public void TestREFN()
        {
            // single REFN
            var txt = "0 @M1@ OBJE\n1 REFN 001\n1 FILE reference\n2 FORM wav";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);

            Assert.AreEqual("M1", rec.Ident);
            Assert.AreEqual(1, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("wav", rec.Files[0].Form);

            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(0, rec.Unknowns.Count);
            Assert.AreEqual(1, rec.REFNs.Count);
            Assert.AreEqual("001", rec.REFNs[0].Value);
        }
Exemple #30
0
        public void TestMulti1()
        {
            // 3 files, form, title; interspersed with other tags
            var txt = "0 @M1@ OBJE\n1 FILE reference\n2 FORM jpg\n3 TYPE photo\n2 TITL this is sparta\n1 RIN foobar\n1 FILE file2\n2 TITL title2\n2 FORM bmp\n3 TYPE photo\n1 CHAN\n2 DATE 01 APR 2001\n1 FILE file number 3\n2 FORM wav\n2 TITL title3\n1 REFN 007";
            var res = ReadIt(txt);

            Assert.AreEqual(1, res.Count);
            MediaRecord rec = res[0] as MediaRecord;

            Assert.IsNotNull(rec);
            Assert.AreEqual("M1", rec.Ident);

            Assert.AreEqual(0, rec.Errors.Count);
            Assert.AreEqual(0, rec.Unknowns.Count);
            Assert.AreEqual(1, rec.REFNs.Count);
            Assert.AreEqual("007", rec.REFNs[0].Value);

            var res2 = rec.CHAN;

            Assert.IsTrue(Equals(new DateTime(2001, 4, 1), res2.Date));

            Assert.AreEqual("foobar", rec.RIN);

            Assert.AreEqual(3, rec.Files.Count);
            Assert.AreEqual("reference", rec.Files[0].FileRefn);
            Assert.AreEqual("jpg", rec.Files[0].Form);
            Assert.AreEqual("this is sparta", rec.Files[0].Title);

            Assert.AreEqual("file2", rec.Files[1].FileRefn);
            Assert.AreEqual("bmp", rec.Files[1].Form);
            Assert.AreEqual("title2", rec.Files[1].Title);
            Assert.AreEqual("photo", rec.Files[1].Type);

            Assert.AreEqual("file number 3", rec.Files[2].FileRefn);
            Assert.AreEqual("wav", rec.Files[2].Form);
            Assert.AreEqual("title3", rec.Files[2].Title);
        }