Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.46.0-wmf.26 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Event Event talk Topic Newsletter Newsletter talk Wikipedia:Requests/Permissions 4 32559 740247 740055 2026-05-03T08:12:14Z Valcio 46860 /* Requests for user rights */ + 740247 wikitext text/x-wiki <noinclude>{{Shortcut|WP:R/P|WP:RfP|WP:RfA|WP:PERM|WP:RFR|WP:RFPERM}}</noinclude> {{Wikipedia:Requests/Top}} == Requests for user rights == * Subpages: [[Wikipedia:Requests/Permissions/All|All (current and archived)]] * Request: <inputbox> type=create prefix=Wikipedia:Requests/Permissions/ preload=Template:PA2 buttonlabel=Requests for user rights placeholder=Enter your username </inputbox> After creating the subpage, come back here and transclude the page below (<code><nowiki>{{Wikipedia:Requests/Permissions/Example}}</nowiki></code>). <!-- Please transclude your requests below this line, LATEST AT THE TOP, in the form {{Wikipedia:Requests/Permissions/USERNAME}} --> {{Wikipedia:Requests/Permissions/Valcio}} {{Wikipedia:Requests/Permissions/Namoroka}} <!-- NEW ENTRIES AT THE TOP, NOT HERE --> tns9dy32yip2vikh1cmqg2g4y3aerwk 740251 740247 2026-05-03T08:28:40Z TheresNoTime 9999 740251 wikitext text/x-wiki <noinclude>{{Shortcut|WP:R/P|WP:RfP|WP:RfA|WP:PERM|WP:RFR|WP:RFPERM}}</noinclude> {{Wikipedia:Requests/Top}} == Requests for user rights == * Subpages: [[Wikipedia:Requests/Permissions/All|All (current and archived)]] * Request: <inputbox> type=create prefix=Wikipedia:Requests/Permissions/ preload=Template:PA2 buttonlabel=Requests for user rights placeholder=Enter your username </inputbox> After creating the subpage, come back here and transclude the page below (<code><nowiki>{{Wikipedia:Requests/Permissions/Example}}</nowiki></code>). <!-- Please transclude your requests below this line, LATEST AT THE TOP, in the form {{Wikipedia:Requests/Permissions/USERNAME}} --> {{Wikipedia:Requests/Permissions/Namoroka}} <!-- NEW ENTRIES AT THE TOP, NOT HERE --> r0wiqrmlkx4dl7otrxevuds2qk1c7gf ZCZC ENTITY entity-list CZCZ — BEACON 0 44436 740218 690859 2026-05-03T00:03:29Z InternetArchiveBot 34092 Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5 740218 wikitext text/x-wiki {{DISPLAYTITLE::ZCZC::ENTITY:entity-list::CZCZ — BE�CON}} [[Category:Authority control|� {{PAGENAME}}]]<!-- &rarr; --><sup>[[ZCZC ENTITY entity-list CZCZ — BEACON/sandbox|/sandbox]]</sup><br /> [[ZCZC ENTITY entity-list CZCZ — BEACON|:ZCZC::ENTITY:entity-list::CZCZ — BE�CON]] — "''the w�rld beyond our perception''"<br /> "'''''shortestlinks:'''''" <s>http://test.wikipedia.org/?curid=41080{{Dead link|date=September 2022 |bot=InternetArchiveBot |fix-attempted=yes }}</s> http://test.wikipedia.org/?curid=44436 __TOC__ === special thanks === Special thanks to all involved in this process. Beside the people starting the VIAF inter project linking, helping continuing it ([[:de:user:Magnus Manske]]), many thanks to Matthias Reinert, to [[:de:user:D]], to [[:de:user:GFHund]] and many other friends from various wikis and sites. == preliminary == preliminary examples: # http://de.wikipedia.org/?curid=6905850#BEACON — for [[:de:Jevgēņijs Svešņikovs]] while the German National Library is using [http://d-nb.info/gnd/132053446 Svešnikov, Evgenij Ė.] (not listed at [http://toolserver.org/~apper/pd/person/viaf/62698419 toolserver.org .../viaf/62698419]) # http://test.wikipedia.org/?curid=39616#links_derived_from_email_html_syntax (draft)<br /> How can unskilled people participate in a world wide data exchange process as the work about "''authority control''" data which is driven by librarians from various national libraries and optimized by computer technology specialists?<br /> "'':ZCZC::ENTITY:entity-list::CZCZ — BE�CON''" should be a syntax to list various authority control entities and open this world to new web sites. Major entities are: # (draft) the list below was written very fast and naive; it does '''not''' cover differences as ## <s>"''Legal''" names</s> ## pseudonyms for authors with unknown identity as for [http://www.google.com/search?ie=utf-8&oe=utf-8&num=100&q=Stella+Bl%C3%B3mkvist&lt=1 Stella Blómkvist], "''artist names''" as [[:en:Marilyn Monroe|Marilyn Monroe]], [[:en:Karl Valentin|Karl Valentin]], [[:de:Hans Kehrer|Hans Kehrer]] etc.ss ## community names as [[:en:Jimbo Wales|Jimbo Wales]] ## religious names as [[:pl:Eliezer Lewi Samenhof|Eliezer Lewi Samenhof]] ## publishers name(s) as [[:de:Arnaldur Indridason|Arnaldur Indridason]] used on some editions of [[:is:Arnaldur Indriðason|Arnaldur Indriðason]] (a patrimonial name) — used probably for technical or marketing reasons ## main national spellings / transliterations as in French, Hungarian etc. for [http://www.yivoencyclopedia.org/article.aspx/Sholem_Aleichem YIVO:Sholem Aleichem] ## catalog names might be publishers name(s) # names, their descriptors and their usage ## "'''LN'''" last name ## "'''FN'''" first name ## "'''MN'''" middle name, as common in former SSSR, Russia etc. ## "'''PSEUD'''" pseudonym as "''Paul Antschel''" for [[:en:Paul Celan|Paul Celan]] born [[:en:Paul Antschel|Paul Antschel]] ## name "''descriptors''" ### "'''LN.SORT'''" ### "'''FN.UTF-8'''" ### "'''LN.CDM'''" (Combined diacritical marcs) used at LCCN and VIAF ### "'''65chess.LN:'''" ### "'''YIVO.FN:Mordkhe'''" used at [http://www.yivoencyclopedia.org/ YIVO Encyclopedia] ## "'''PN'''" patimonial name ## "'''ASSIGNED'''" (draft) (Beinamen) as Blutaxt, hinn hepni, Erikur roedur, Ivan grozny ## "'''OTHER.NAME'''", "'''.LN'''", "'''.FN'''" "''other''" names as "''007''", "''Tito''", "''Carlos''" etc. may be combat name, underground / subversion names ## "'''BORN'''" ## "'''LEGAL'''" (There are laws for obtaining Icelandic citizenship.) ## "'''''HISTORICAL'''''" Many persons lived in various countries and adapted and / or transliterated / translated their names ("''Shvarcz''" / "''Soros''" etc.) ## "'''XN'''" names as [[:en:Aristotle|Aristotle]] ## "'''DISAMBIG'''" determinators as used in [[:en:Polykleitos the Younger|Polykleitos the Younger]] ## TBD "''Acronym''" and / or "''abbreviation''" as used for [[:en:Besht|Besht]] and various famous rabbies ## TBD "''More'" and / or "''Many''" as for [http://de.wikipedia.org/?curid=1025695 Karl Theodor Maria Nikolaus Johann Jacob Philipp Franz Joseph Sylvester Freiherr von und zu Guttenberg] # [[:en:ISO 15924|ISO 15924]] determinatiors # authentity control identifiers, academic or community sites, participating web sites<br />the entity is not limited to one value only but is a list of "''combined''" identifiers with the "'''main''" identifier listed first; it could have variants as candidates for combination and improvement as done at Wikipedia in German for Tn and Tp record types in the GND database.ssdf # "'''VIAF'''" — http://viaf/7524651/#Aristotle{{Dead link|date=September 2022 |bot=InternetArchiveBot |fix-attempted=yes }} # "'''BNE'''" — [http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=XX4874856 http://catalogo.bne.es/ ... authority_id=XX4874856] — "''aliases:''" VIAF.BNE # "'''LCCN'''" — [http://www.worldcat.org/identities/lccn-n79-4182 worldcat.org ... lccn-n79-4182] but '''also''' http://orlabs.oclc.org/identities/lccn-n79-4182 {{Webarchive|url=https://web.archive.org/web/20120507213852/http://orlabs.oclc.org/identities/lccn-n79-4182 |date=2012-05-07 }} — "''aliases:''" # "'''PND'''" — http://d-nb.info/gnd/118650130 — "''aliases:''" VIAF.PND, VIAF.GND.PND, DNB.GND.PND # "'''SELIBR'''" — http://libris.kb.se/auth/174754 — "''aliases:''" VIAF.SELIBR # "'''SUDOC'''" — http://www.idref.fr/026690276 — "''aliases:''" VIAF.SUDOC # "'''FIDE'''" # "'''YIVO'''" # "'''Эеэ'''" — [http://www.eleven.co.il/ Электронная еврейская энциклопедия - ЭЕЭ ® - "Эеэ"] # "'''IMDb'''" # "'''LT'''" — [http://librarything.com/zeitgeist/language Zeitgeist by language] # "'''WP.&lt;language_code&gt;'''" # "'''WMF.commons'''" # authority control "''descriptors''" ## "'''.corporate'''" ## "'''.work'''" # "''site spepciffic''" "''descriptors''" ## "'''DNB.GND.PND'''", "'''DNB.GND.GKD'''", "'''DNB.GND.SWD'''" (to clarrify Tn / Tp syntax) With each entity are associated various methods: # [http://librarything.com/author/sveshnikovevgeny&norefer=2 "'''LT.URL.author:sveshnikovevgeny'''"] and [http://librarything.com/author/sveshnikovevgeny/names /names], [http://librarything.com/author/sveshnikovevgeny/issues /issues] etc. # [http://librarything.com//commonknowledge/changelog.php?type=2&item=1014156 "'''LT.CK:1014156'''"] # "''pear to peer''" connections as [http://www.librarything.com/commonknowledge/search.php?exact=1type=2&f=13&&q=VIAF%3A51768730 LT VIAF search VIAF:51768730] for [[:en:Paul Erdős|Paul Erdős]] # "''miscellaneous''" ## "'''''TIMESTAMP'''''" — wikis using "''<nowiki>::TIMESTAMP:{{SUBST:CURRENTTIMESTAMP}}::</nowiki>''" might be very useful. ## "'''''SOURCE'''''" — should be visible from the context or included ## "'''''NEW-LINE'''''" — might be used as a dummy entity to generate line wrap arrounds<br />example: http://de.wikipedia.org/?curid=6905850#BEACON "'''COMMENT''' and "''TICKET'''" can be used for notifications and tracing.<br /> "''bey�nd''" our world is also beyond MediaWiki character normalization because many sites contain records prior to this standard. The Unicode replacement character "''�''" used here stands for a non determinated ideas and methods. You may have never asked yourself about what you are "'''not''" thinking.<br /> "''learning systems''" and "''fuzzy''" knowledge. If you ever tried to find articles in particular and datas in general about not common names you may have searched for names ending with "''*wsky''", "''*vsky''", "''*ski''", "''*skij''", "''*skii''", with the Dutch precombined character "''ij''" /UTF-8 UXXXX (to be added later). In modern databases one can group and prioritize occurrences for Sergey, Gennady, Aleksey etc. for names with double consonants as in Anna, etc.<br /> Prioritizing Latin characters: The only WP using Latin script known to me using another article name then "''[[:en:Albert Einstein|Albert Einstein]]''" and "''[[:en:Selma Lagerlöf|Selma Lagerlöf]]'' is the Wikipedia in Latvian. This is normal. The other (using) the legal person names are exceptions. However many sites can not identify persons using character from The Unicode Latin supplement blocks. This is why a "'''A2Z.LN'''", "'''A2Z.FN'''" etc. can improve search. FIDE is using these characters only.<br /> === grammar === One should parse anything starting at "'':ZCZC''" until "''::CZCZ''". This is fine for text visible in browsers. However the end might be truncated because of url lenght overflow etc. In the last case the processing by any tool is optional; a warning might be useful.<br /> # "''nested''" and / or "''concatenated''" syntax — TBD # "'':ZCZC''" ... "''::ZCZC''" ... ("''::CZCZ''") — TBD # "''sort order''" of entities is not important (for computers); for better readability one will see which order would be wider accepted; humans would like to see names first, but which script? — TBD leter === updates and correlation === http://de.wikipedia.org/?curid=6905850#BEACON basically contains now also * '''update:''' (via / using "''<nowiki>::TIMESTAMP:{{SUBST:CURRENTTIMESTAMP}}::</nowiki>''"): #:ZCZC::VIAF:62698419::DNB.LN.UTF-8:Sve%C5%A1nikov::DNB.FN.UTF-8:Evgenij::DNB.MN.UTF-8:%C4%96.::WP.de.LN.UTF-8:Sve%C5%A1%C5%86ikovs::WP.de.FN.UTF-8:Jevg%C4%93%C5%86ijs::TIMESTAMP:20120425081722::CZCZ<br > The original post was "''reformated''" using a "''dummy''" entity "::'''''NEW-LINE'''''::"<br /> The correlation criteria between is the [[VIAF:62698419]] number. (Did not know, that this is an interwiki prefix. — One can link [[VIAF:Hall� w�rld!]].) === Semantic Web === The existing (and future) entities should be described vwith [http://www.w3.org/standards/semanticweb/ Semantic Web] techniques / methods / syntax. We need some specialists here. ==== who is ==== In order to avoid the maintenance of a directory there are probably "''who is''" equivalent strategies. Descriptions should be both available in a data exchange format as well as in a human readable format.<br /> If the site is using internally other formats then the official ones (as WMF wikis use reformated variants of the "'''LCCN'''" parameters in their authority control templates "'''LCCN: n50030508'''" and at the "''toolserver.org''" (where SPACE(s) are used at "'''LCCN: n 5030508''') some hints should be available. "''official ones''" [http://viaf.org/viaf/40169930/ VIAF:40169930] {{Webarchive|url=https://web.archive.org/web/20190630191205/http://viaf.org/viaf/40169930/ |date=2019-06-30 }} is using "'''n50-30508'''" in the url. Please see also [http://commons.wikimedia.org/wiki/Template_talk:Authority_control#Anybody_knows_why_LCCN_is_split_into_3_parts.3F "''Anybody knows why LCCN is split into 3 parts?''"].<br /> syntax: TBD <span id="specialists" /> === MediaWiki, JavaScript, css, xhtml, gadgets, bot, etc. specialists === There are many things to do. It would be great to scan, analize, validate, update the values of the different templates and provide custom summaries. === traveling s�nglines === Each person can participate according to his interest ans skills. The most important issue is to bring people together and to combine their knowledge. Beside highly technical automated data exchange one can benefit from different approaches as sharing JavaSctipt, xhtml as proposed by Matthias, sharing servers and more useful ideas from the days to come. === annotations, shortestlinks, dreams etc. === One and a half month ago I noticed that I can '''not''' "''annotate''" urls to YIVO Encyclopedia by adding "''dummy / descriptive''" parameters as "''? | &''" plus "''VIAF=&lt;value&gt;''". Google will reject serach links with "''dummy / descriptive''" anchors; une may use "''&oq=''" as preliminary / temporary workaround. Never the less many sites accept them. They can be processed with JavaScript as to future version of the "'viaf.user.js Greasemonkey-Skript''". Today it can process browser text as: # http://viaf/7524651/#Aristotle:ZCZC::LATN.XN:Aristotle:Aristoteles:Aristote::ARAB.XN:foobarXXXX::CYRL.XN:%D0%90%D1%80%D0%B8%D1%81%D1%82%D0%BE%D1%82%D0%B5%D0%BB%D1%8C::GREK.XN:%CE%91%CF%81%CE%B9%CF%83%CF%84%CE%BF%CF%84%CE%B5%CC%81%CE%BB%CE%B7%CF%82::HEBR.XN:%D7%90%D7%A8%D7%99%D7%A1%D7%98%D7%95::VIAF:7524651::LCCCN:n79-4182::VIAF.BNE:XX4874856::VIAF.PND:118650130::VIAF.SELIBR:174754::VIAF.SUDOC:026690276::COMMENT:::CZCZ{{Dead link|date=September 2022 |bot=InternetArchiveBot |fix-attempted=yes }} However it is very hard to update any posted link in the past. A "''smart''" search could look at sites where the correlation tables are most often updated. What is important is to have a stable and open syntax.<br /> "'''''shortestlinks'''''" are links as http://test.wikipedia.org/?curid=41080{{Dead link|date=September 2022 |bot=InternetArchiveBot |fix-attempted=yes }} where "''41080''" is the value of the MediaWiki "'''''wgArticleId'''''" variable; see source code of any Mediawiki page "''mw.config.set({..."wgArticleId":41080 ...))''". To my understanding it is preserved during renaming until page or complete content deletion. The url is both short, stable and script independent. I wish that in near future authority control values are # stored the same way # are shared / propagte between language versions without the action of bots # are accessible at JavaScript level and using Magic wors. === universality and efficiency === The usage of other methods as used by Mediawiki may have different reasons. Some are historical as the usage of CDM's, of other code sets (or no specified code set). This is relity bote CDM's and ARAB, HEBR etc punctuation, the usage of precombined characters, BiDirectional characters are "''reality''". We should look for a clean UTF-8 encoding, should detect encoding variants by maintaining character correspondence tables (and allow site specific correspondence variants).<br > "'''''Meta characters:'''''" Each site may use its own "''Meta characters:''". The most important is "'''''SPACE'''''" which is commonly encoded as "''+''" in search parameter values but (probable) escape odd in "''anchors''". (TBD)<br /> "''double names''" using "'''''MINUS'''''" are quite common in some countries. example: [[:en:Selma Meerbaum-Eisinger|Selma Meerbaum-Eisinger]]. Sites should support search for "''partial names''" for "''Meerbaum'' and / or "''Eisinger'' only and list spellings as "''Selma Meerbaum-Eisinger''" for appropriate indexing. They should support "''wildchar''" search and provide a usefull documentation. The "''Meta character''" "''MINUS''" may be used to "'exclude''" records from search.<br /> Last but not least one should detect abuse with whitespace characters, BIDirectional characters (etc.?). One should detect syntax and or implementation errors. === to be continued === (to be continued) ‫·‏[[user:לערי ריינהארט|לערי ריינהארט]]‏·‏[[user talk:לערי ריינהארט|T]]‏·‏[[m:user:לערי ריינהארט|m]]‏:‏[//meta.wikimedia.org/wiki/user_talk:%D7%9C%D7%A2%D7%A8%D7%99_%D7%A8%D7%99%D7%99%D7%A0%D7%94%D7%90%D7%A8%D7%98?action=history Th]‏·‏[[m:user talk:לערי ריינהארט|T]]‏·‏[[m:special:Emailuser/לערי ריינהארט|email me]]‏·‏‬ 04:04, 25 April 2012 (UTC) == participants == == reference links == * http://jsfiddle.net/aK45A/ {{Webarchive|url=https://web.archive.org/web/20160304125615/http://jsfiddle.net/aK45A/ |date=2016-03-04 }} first parising steps; writtemn after http://de.wikipedia.org/?curid=6905850#BEACON was posted but '''befre''' this page was created; Many thanks for the support! * Russian variants for: [http://www.kakzovut.ru/names/fridrih.html Фридрих] (please add whatever is appropriate) == discussion == o0k0ozntfku2nd9gsv9jwiequs60f7z Lorem ipsum 0 58668 740207 732501 2026-05-02T22:37:18Z User97104 72884 740207 wikitext text/x-wiki {{Infobox|Title=Lorem Ipsum|Image=[[File:Example.png]]|Caption=Lorem ipsum dolor sit amet}} '''Lorem ipsum''' dolor sit amet, consectetur adipiscing elit. Cras at enim sed erat fermentum hendrerit vel vel diam. Sed luctus risus et odio lobortis tincidunt. Donec dictum neque vitae elit bibendum, dictum porttitor turpis dapibus. Morbi posuere sapien eu vulputate elementum. Donec rutrum non nibh a vulputate. Nunc et ipsum diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer ultricies velit ligula, et euismod leo mattis et. Curabitur ut porttitor lacus, sit amet scelerisque arcu. In vitae tellus quis augue faucibus consectetur. Ut dui nisl, posuere sit amet augue nec, interdum luctus nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus bibendum, turpis id fringilla lacinia, magna nisi ullamcorper ligula, sed gravida purus elit in turpis. == Vestibulum praesent etiam == Vestibulum eu ullamcorper neque. Nullam facilisis dui mauris, vitae euismod odio tempor vel. Nullam luctus eget est eget vehicula. Aenean fringilla ligula eget felis porttitor, eu maximus arcu laoreet. Etiam ornare nisi sed orci congue, lacinia feugiat diam feugiat. Suspendisse nisi enim, tempus at rutrum quis, interdum et erat. Quisque facilisis ante rutrum pharetra consectetur. Etiam ultricies quam orci, vitae eleifend erat imperdiet eu. In hac habitasse platea dictumst. Nulla at interdum nibh, et congue dolor. Donec ut aliquet mauris, quis volutpat purus. Vestibulum nisi nisl, sagittis eu neque sed, hendrerit placerat mauris. Suspendisse pretium, turpis sed pharetra pulvinar, enim leo tempor purus, vel euismod justo mauris id est. Aenean tristique est eget semper scelerisque. === Mollis nec === Praesent mollis ultrices mauris, et sagittis mi mollis ut. In ac pretium nunc. Fusce ullamcorper elit nunc, in pretium orci pretium imperdiet. Mauris a sapien eget nibh sodales tincidunt. Nulla feugiat feugiat rutrum. Donec laoreet feugiat porttitor. Suspendisse potenti. Vivamus scelerisque tristique tellus eu accumsan. Donec euismod maximus dui at malesuada. Etiam eu vehicula turpis. Cras sit amet sapien sed diam fermentum placerat. Cras ut sagittis velit. Etiam nec blandit neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse potenti. Cras volutpat id turpis sed tempor. Integer leo dolor, accumsan ut scelerisque at, aliquam non elit. Nullam egestas facilisis urna, sit amet commodo nunc laoreet eget. Duis aliquam auctor augue, sit amet efficitur ante lacinia vel. Praesent posuere, velit hendrerit viverra consectetur, justo nulla finibus turpis, sit amet posuere nisl metus non mauris. Maecenas at enim pharetra, tristique erat sed, ultricies leo. Nunc vel sem sit amet massa auctor commodo. Pellentesque feugiat nunc vitae magna fermentum mollis. Nullam id diam et leo ultrices aliquet vel nec felis. Quisque in ornare justo, eu tincidunt nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis lorem enim, sed mattis est gravida in. == Etiam integer in vivamus == === Maximus gravida === Etiam maximus tellus eros, quis congue sapien pellentesque sed. Nam imperdiet gravida volutpat. Donec vitae sodales nunc. Vestibulum augue sapien, aliquet in sem a, fermentum mattis sem. Maecenas id dolor felis. Quisque rhoncus orci et elit porttitor, vitae lacinia tellus scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer gravida vestibulum aliquet. Pellentesque leo purus, laoreet sit amet dolor ut, pretium porttitor nulla. Etiam pretium porta ante, a convallis diam elementum nec. Vestibulum et odio ac elit aliquet fringilla ac eu lectus. Sed vitae turpis magna. Nam tristique libero neque, nec pellentesque lectus rutrum ut. In porta, diam id porttitor hendrerit, velit quam lobortis sem, in tempor nibh dolor consectetur ipsum. Vivamus et mattis nisl. Etiam sapien nulla, cursus quis posuere non, feugiat in justo. Phasellus sagittis, ligula vitae condimentum auctor, purus velit dignissim risus, a eleifend leo eros eu tortor. === Mollia finibus === In mollis mauris ante, ac tincidunt neque faucibus eu. Nullam faucibus risus ut magna rhoncus venenatis. Duis ullamcorper nec risus at pulvinar. In elementum at tortor tincidunt maximus. Nullam vitae gravida dui. Morbi rutrum diam eu nulla porttitor cursus. Fusce vel urna sit amet risus facilisis volutpat vitae non purus. Integer mattis nec nisi eu placerat. Quisque commodo suscipit dui a blandit. Donec sagittis leo arcu, vitae cursus neque sollicitudin eget. Maecenas id sem aliquet, molestie elit bibendum, lobortis felis. Vivamus finibus est ac hendrerit auctor. Phasellus dictum consectetur ex pellentesque dapibus. Aliquam volutpat arcu vitae nibh pretium, sed sodales enim ornare. Sed a erat enim. Aliquam quam elit, rutrum et neque euismod, fermentum faucibus risus. Morbi tincidunt sed mi nec tempor. Integer ullamcorper quam id mauris vulputate vulputate. Pellentesque id auctor sem. == Aenean vivamus pellentesque morbi == === Non luctus === Aenean non purus maximus risus imperdiet mollis. Aenean non dui erat. Morbi aliquet velit quam, quis semper lacus posuere venenatis. Integer id nulla nibh. Donec felis ex, faucibus at sem at, commodo dignissim lorem. Pellentesque ipsum urna, eleifend et felis vitae, viverra tincidunt urna. Ut ex felis, vestibulum et sapien sed, finibus rutrum justo. Donec viverra pellentesque nisl at elementum. Quisque blandit, ipsum placerat scelerisque tincidunt, nibh lacus euismod metus, sed eleifend ipsum libero non enim. Vivamus luctus vestibulum faucibus. Cras tempus felis id odio sodales consectetur. Cras orci nisi, viverra quis mi vitae, pretium consectetur dui. Phasellus euismod felis eu sem ultricies sodales. Integer eget mollis velit, eget pretium purus. Morbi laoreet, dolor ut fringilla egestas, ipsum orci tincidunt tellus, a egestas neque tellus sed purus. Nulla sagittis vitae nibh quis dictum. Aliquam sagittis dolor nibh, eu euismod odio gravida nec. Donec varius efficitur justo. Integer sit amet arcu sollicitudin, scelerisque est sed, accumsan est. === Vel est === Pellentesque vel euismod leo. Nulla mauris sem, vehicula fermentum nibh vel, hendrerit vestibulum tellus. Cras dignissim at lacus in porta. Nunc a vulputate quam, eu pulvinar ex. Sed vitae leo sit amet justo varius varius vel sed elit. Sed viverra orci non erat ultricies, vel tristique magna tincidunt. Aenean viverra ligula ligula. Vestibulum malesuada, eros sed varius aliquam, magna purus laoreet tortor, non tempus dui erat sit amet nunc. Proin accumsan nulla mattis lorem congue dignissim. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Ex ==== Morbi est ex, dictum ac neque nec, iaculis lobortis lacus. Cras sit amet consectetur est, vitae condimentum eros. Maecenas non sapien ligula. Nam laoreet eget eros in blandit. Quisque hendrerit velit at nisl tincidunt volutpat. Phasellus ac felis nisi. Proin mattis ante ac magna porta placerat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. == In nullam == In leo velit, lacinia in ligula quis, semper maximus dui. Pellentesque cursus congue dolor ut tristique. Fusce accumsan placerat facilisis. Vivamus pellentesque purus ut nisl laoreet accumsan. Nunc in mi vehicula leo ultrices sodales id ac dui. Fusce gravida at ante sed tincidunt. Maecenas at dui bibendum, condimentum tellus at, faucibus est. Donec molestie in est posuere aliquet. Donec id aliquam arcu, in cursus sem. === Nec === Nullam nec vulputate enim, quis efficitur libero. Mauris sit amet cursus sem, at ultrices metus. Duis sit amet aliquet diam, eget faucibus neque. Duis consequat rutrum auctor. Proin ullamcorper vehicula ex sed finibus. Nulla efficitur sem non eros varius dapibus. Maecenas posuere tortor at tempus dignissim. Nunc varius in dolor ut interdum. Morbi imperdiet urna in felis congue pellentesque. Donec dictum a quam nec venenatis. Nam id vestibulum ipsum, nec elementum orci. Quisque dignissim tincidunt dolor, et maximus augue bibendum eget. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam interdum placerat scelerisque. Nam tristique varius tempus. == Maecenas aliquam vivamus quisque aenean == === Id erat et === Maecenas id elit felis. Maecenas felis velit, aliquam volutpat felis non, efficitur elementum purus. Donec lobortis ultricies vehicula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget nisl viverra, dapibus nisl consectetur, venenatis nisi. Sed et turpis gravida, dignissim mauris ut, faucibus elit. Sed viverra quam id magna lacinia, id congue tellus luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque sodales ac leo sed iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras hendrerit, magna mattis tempus laoreet, augue nunc vehicula odio, vitae dapibus erat leo nec enim. Phasellus vel ex arcu. Sed ut fringilla augue. Aliquam erat volutpat. Nulla suscipit lectus metus, nec aliquet diam lobortis id. Aenean et mattis diam, in molestie lectus. Curabitur faucibus enim semper lectus molestie, a tincidunt nisl efficitur. Vestibulum tortor sem, mattis sit amet semper at, cursus ut arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam ut mi ut neque egestas varius. Nam sollicitudin finibus dapibus. Sed cursus iaculis mi in sagittis. Vestibulum cursus eros a blandit hendrerit. Cras vitae efficitur nisi. Suspendisse eu odio vel sapien consectetur condimentum. Integer rutrum ullamcorper ligula tincidunt varius. Praesent nec pellentesque massa. Phasellus nec fringilla nunc. Mauris finibus purus non vulputate tempus. ==== Tellus ==== Vivamus et tellus massa. Morbi fringilla sapien eu felis luctus vehicula. Duis arcu dolor, fermentum quis gravida et, imperdiet id urna. Maecenas turpis elit, ultricies nec purus eu, egestas ornare nunc. Pellentesque sagittis, lectus a semper dignissim, mi ipsum pulvinar eros, in viverra urna sapien ac nibh. Fusce ex ipsum, pulvinar eu purus nec, viverra pellentesque lectus. In sodales varius lectus, ut faucibus massa suscipit sed. Integer dictum, leo tempus sagittis varius, augue quam feugiat elit, sit amet iaculis turpis quam eget neque. Cras elit arcu, volutpat eget tempus vitae, ultricies sit amet sem. Nullam eu molestie quam. Nullam non velit vel dolor ultrices elementum quis id velit. Sed et ligula mauris. Ut libero lacus, viverra vel faucibus sit amet, varius sit amet mauris. Morbi ultrices facilisis pulvinar. Donec dictum risus sit amet leo tristique porta ut sed nisl. === At posuere === Quisque at tellus posuere, posuere orci vitae, consequat velit. Ut nisl nisl, consequat at posuere in, pulvinar id ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi nisi justo, posuere vitae mi a, feugiat faucibus ex. Aenean eu odio felis. Vestibulum eros metus, accumsan nec risus ut, facilisis finibus nibh. Pellentesque bibendum id urna sed tempus. Sed in ornare orci. Aliquam cursus condimentum mollis. Aenean tempor venenatis quam in condimentum. Pellentesque id elit in eros eleifend malesuada vitae ac magna. Sed vel est sit amet mi porttitor consequat quis id purus. Maecenas sit amet eros tristique, pellentesque tortor ac, fringilla dolor. Aenean posuere nunc ac ipsum blandit venenatis. Ut vestibulum felis non lectus vestibulum, et tincidunt lacus vehicula. Vestibulum aliquet quis justo et fermentum. Sed sed enim lobortis lacus fermentum pretium. Proin consequat velit non dolor eleifend, nec maximus dui mattis. Donec pellentesque leo arcu, eget vestibulum velit varius in. Aenean et viverra urna, feugiat faucibus ligula. Suspendisse efficitur commodo mi, tristique bibendum velit vehicula nec. Duis iaculis non risus ut ornare. == Vivamus nunc nulla nunc == === Dictum commodo === Vivamus dictum nisi ac quam fringilla sagittis. Vestibulum augue felis, gravida ac blandit ac, faucibus congue turpis. Integer fringilla lacus lectus, nec egestas sapien vestibulum vitae. Curabitur eu nibh malesuada, dapibus est vitae, sagittis mi. In est tortor, pulvinar at aliquet in, suscipit dignissim ipsum. Suspendisse dignissim ligula vel bibendum aliquam. Nam quis rutrum odio. Quisque sagittis nibh vitae lorem accumsan consequat. Morbi congue malesuada suscipit. Curabitur in luctus diam. Duis tempor et leo sed euismod. Etiam lacinia vehicula ligula sit amet pulvinar. ==== Sit ==== Nunc commodo sit amet mauris sit amet pretium. Nam venenatis eu dui sit amet hendrerit. Vivamus ac enim porta, tempor arcu at, venenatis neque. Donec quis urna in nisl molestie tincidunt. Morbi finibus vitae ex a posuere. Proin condimentum dignissim tempus. Suspendisse rutrum diam massa, non aliquet lacus maximus non. Nulla lorem neque, scelerisque eget velit non, consequat condimentum sem. Aenean vel odio erat. Cras aliquam in quam vehicula tristique. Phasellus aliquam lacinia fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc vestibulum congue magna, ac congue diam suscipit in. === Cursus porttitor === Nulla cursus ornare tempus. Duis tempor ligula risus, a placerat dolor bibendum eleifend. Duis id rutrum eros, eget ultricies mi. Duis vitae quam magna. Aliquam sollicitudin, felis sit amet viverra condimentum, odio libero commodo mi, id accumsan neque lacus sit amet tellus. Nunc facilisis eget sem sed pharetra. Pellentesque tempus tincidunt libero quis mattis. Vivamus consectetur finibus libero eget malesuada. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Varius ==== Nunc porttitor varius nisi molestie tristique. Vivamus accumsan mi eu metus consectetur, id gravida risus luctus. Donec ullamcorper malesuada placerat. Mauris varius ante scelerisque, laoreet lacus vitae, ullamcorper ipsum. Integer non sodales massa. Aliquam ac fermentum massa. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum vitae risus ultrices, volutpat urna eget, semper urna. Sed faucibus turpis in turpis congue, id laoreet ante tincidunt. Nulla sit amet ante blandit, pellentesque ante quis, feugiat enim. Sed tristique venenatis vehicula. Sed vel tellus et orci facilisis cursus vel nec quam. Ut vitae ipsum ante. Aliquam sit amet molestie mi, ut vestibulum risus. Donec ac lacus mauris. Maecenas pharetra auctor sem a aliquet. Donec fringilla eleifend quam vitae euismod. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas luctus nisi quis lectus vestibulum tempor. Donec dapibus sem mauris, non rhoncus neque rutrum id. Nunc sollicitudin sollicitudin enim. Aliquam vitae massa velit. Cras nibh est, rhoncus euismod faucibus sit amet, finibus vel tortor. Morbi scelerisque urna mi, ut suscipit sem iaculis eu. Quisque in lorem diam. Sed eget leo condimentum, ultrices ex eget, iaculis tortor. Cras convallis erat at leo lacinia laoreet. Praesent mattis accumsan pharetra. Aliquam nec diam risus. Pellentesque eu dui eros. Donec faucibus maximus egestas. Nam pulvinar suscipit nisi sit amet luctus. Proin gravida eleifend ex id placerat. Maecenas iaculis felis ipsum, ac rutrum nulla cursus nec. Vestibulum laoreet arcu in nibh vehicula congue. Suspendisse ac porttitor nisi. Sed fermentum nibh lacus, sit amet tincidunt orci mattis nec. Aliquam auctor turpis quis malesuada lacinia. Nam tempor tortor sem, sit amet semper nisi molestie at. Praesent at rhoncus dolor. Vestibulum a lacus eu dolor malesuada hendrerit a vitae elit. In vel pellentesque mauris. Cras ac quam et sem ultricies tincidunt. Nulla sollicitudin at sapien nec tempor. Sed mollis quis augue id faucibus. Integer eget pharetra metus. Donec vel ullamcorper purus. Cras elit est, porta quis tincidunt vestibulum, facilisis at est. Ut semper porttitor erat, vitae lacinia tellus scelerisque eu. Fusce massa tellus, consectetur quis neque vitae, viverra eleifend ipsum. Nam sed congue neque. Nulla imperdiet justo eget lacus elementum malesuada. Proin vitae metus enim. Cras feugiat ornare erat, sed efficitur leo sodales in. Quisque dictum et leo at tincidunt. Curabitur non lacus ut turpis suscipit interdum sit amet eget metus. Donec quis ante justo. Mauris faucibus, lorem ornare porttitor posuere, ante nibh ullamcorper arcu, vel finibus orci elit vel erat. Nunc leo erat, sagittis et tincidunt id, dapibus nec risus. Ut et nunc scelerisque, varius quam eget, auctor nisl. Ut quis augue in diam dapibus malesuada nec vitae elit. Cras viverra fermentum quam non auctor. Vestibulum laoreet dui sit amet rutrum posuere. Aliquam aliquam elementum turpis, sit amet tincidunt leo efficitur non. Sed nec mauris aliquam massa congue tempus tempus non quam. Quisque tincidunt tellus at augue suscipit vulputate. Nam augue nisi, consectetur ac tempor et, ultrices sit amet est. Fusce eu urna eget nisl rhoncus vulputate. Nulla facilisis augue sit amet augue fermentum finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. In volutpat enim quis nisi interdum, in semper nulla luctus. Suspendisse interdum ut odio nec rhoncus. Curabitur quis enim sodales, iaculis quam vitae, iaculis magna. Suspendisse potenti. Sed feugiat pulvinar facilisis. Praesent lorem nibh, mattis eu felis id, rutrum condimentum sapien. Phasellus ac ultricies turpis, sed vulputate erat. Curabitur sed lorem eget sem ultricies sodales quis a mi. Aenean justo nibh, varius eu magna non, vehicula porttitor lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla egestas nisi tellus, et consequat velit molestie non. Sed convallis augue ut lectus venenatis rutrum. Vivamus ultricies auctor nulla, faucibus ultricies lacus sodales ac. In vel erat porttitor, cursus leo ut, bibendum diam. Nam vel augue a elit sodales euismod. Aenean vel scelerisque nisl. Donec sed orci nec nibh porttitor tempus ut ut velit. Fusce iaculis fringilla diam, id condimentum ante tincidunt sed. Nunc sollicitudin vitae nibh et venenatis. Integer in ex sit amet dolor volutpat vehicula sit amet at augue. Curabitur efficitur pharetra interdum. Nunc euismod volutpat magna, et elementum sem lacinia ac. Sed eu magna feugiat justo vulputate posuere ac ac mi. Pellentesque eu dictum leo, facilisis ultrices ligula. Maecenas tincidunt laoreet odio. Donec maximus risus eget risus malesuada, id tincidunt lacus malesuada. Curabitur non imperdiet leo. Duis vel convallis enim. Pellentesque tristique sem at nibh pharetra, vel aliquet neque suscipit. Aliquam dolor mauris, placerat a bibendum a, sollicitudin sollicitudin erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur nec est in erat ultricies facilisis. Curabitur eget vestibulum leo. In vitae sodales neque, in commodo neque. Sed sollicitudin auctor metus et iaculis. Nam ultricies sagittis vehicula. Nulla iaculis fringilla elit at interdum. Donec at tortor faucibus, imperdiet nulla vitae, vestibulum purus. Mauris sed ullamcorper ante, eget imperdiet nibh. Duis sit amet urna leo. Curabitur egestas nibh ut laoreet elementum. Mauris tincidunt leo arcu, eu pharetra felis mollis at. Donec lacus erat, egestas et egestas lobortis, lobortis sed leo. Nunc viverra libero elementum ligula maximus, ut congue enim sagittis. Fusce et est diam. Sed facilisis odio eget sem mattis sagittis. Integer tincidunt orci vitae libero porta ullamcorper. Nunc mauris lorem, lacinia in mollis sit amet, malesuada nec elit. Proin aliquam sapien in dolor tristique, pulvinar volutpat lectus aliquam. Phasellus consequat ullamcorper massa at porta. Integer et pellentesque ante. Duis ac dolor ipsum. Donec sagittis magna eget ex lobortis consequat. Phasellus consectetur tortor volutpat diam cursus vehicula. In in efficitur ligula. Nunc aliquam vitae est quis bibendum. Phasellus porttitor lectus vitae egestas rutrum. In vel imperdiet libero. Ut eget mattis ante, eget ultricies mauris. Nulla vestibulum faucibus metus sed bibendum. Integer facilisis dapibus elit ut cursus. Nullam iaculis tempus ante non commodo. Nullam placerat feugiat elit. Proin cursus nisi turpis. Etiam sit amet urna nec ligula commodo tempus. Fusce venenatis velit vitae arcu porta, sed eleifend neque egestas. Morbi sit amet nunc a lacus mattis luctus. Proin eget dolor sodales risus lobortis tempor. Etiam vulputate finibus neque. Phasellus non felis eget ligula auctor varius. Fusce enim mauris, vestibulum eu cursus id, suscipit id nisi. Sed magna leo, eleifend sed ultrices nec, efficitur eu ex. Ut sit amet egestas sapien, a viverra velit. Duis sit amet neque nec odio commodo sollicitudin. Nam elementum tincidunt varius. Quisque imperdiet finibus quam a sagittis. Duis vel enim sed ligula accumsan ullamcorper. Proin sit amet augue ac risus vestibulum porttitor. Vestibulum et lorem dictum, eleifend sapien a, elementum sem. Pellentesque vel odio hendrerit, congue enim at, tincidunt quam. Suspendisse at bibendum nunc, a malesuada risus. Donec tempor felis quam, sit amet interdum odio dignissim at. Pellentesque nec semper odio, in condimentum libero. Quisque sed tellus facilisis, fringilla turpis vel, pulvinar mi. Sed feugiat pretium orci, sit amet dignissim lorem cursus sit amet. In hac habitasse platea dictumst. Nullam maximus ex sit amet erat mattis, at sodales turpis molestie. Nam maximus eros est, sed mollis libero ullamcorper eu. Vivamus porttitor at orci vel scelerisque. Nullam finibus purus quis ex pharetra, vitae porta nisi scelerisque. Aliquam posuere ullamcorper dui sed luctus. Praesent vulputate eget enim eu feugiat. Curabitur suscipit diam erat, in facilisis nisi scelerisque at. Cras nec libero ut sem condimentum iaculis. Integer vitae imperdiet metus. Nulla aliquet felis vitae pulvinar egestas. Quisque mattis nunc augue, ut dignissim elit luctus vel. Pellentesque consequat blandit euismod. Fusce rutrum accumsan lacinia. Nunc efficitur, nibh eu porttitor vehicula, tortor est luctus augue, a sollicitudin elit sem vel ante. Nullam dapibus nisl odio, ut molestie eros vestibulum quis. Donec hendrerit, urna vel accumsan imperdiet, odio neque aliquam velit, et dictum magna nisi a risus. Proin iaculis tortor sagittis arcu placerat, sed tempor enim pulvinar. Morbi vitae vulputate nulla, id condimentum nibh. Suspendisse mollis tortor felis, vel bibendum elit malesuada vitae. Aliquam consequat, velit nec ornare gravida, nisl justo bibendum tellus, ut cursus urna lacus quis nulla. Sed gravida vestibulum elit nec sollicitudin. Sed vitae vestibulum ex, a malesuada massa. Vestibulum lacinia lacinia fringilla. Pellentesque nec ultricies enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sit amet lectus elit. Phasellus neque risus, blandit id finibus vel, ullamcorper vitae nibh. Phasellus sem odio, volutpat et sapien at, viverra scelerisque lorem. Integer nec maximus ipsum. Suspendisse a magna bibendum, molestie turpis non, placerat tellus. Nunc ut purus non tellus ultricies finibus in vel ipsum. Sed at aliquet arcu. Etiam tincidunt ullamcorper turpis vitae pellentesque. Quisque quis nisl tortor. Curabitur sed dictum metus. Ut iaculis magna sodales velit malesuada, eget auctor ipsum fermentum. Aenean molestie tortor sit amet orci molestie convallis. Sed eleifend est nec felis vestibulum, vitae cursus enim ultrices. Morbi sagittis sed nisi sed accumsan. Donec at faucibus libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pretium dui ut risus mollis, a molestie ligula euismod. Curabitur eu erat pharetra, rutrum tortor vitae, dignissim dui. Maecenas viverra egestas turpis ut faucibus. Pellentesque aliquam fermentum tortor eu hendrerit. Sed metus mauris, dictum ac aliquet aliquam, malesuada at tortor. Donec venenatis libero sed mauris mollis suscipit. Maecenas consectetur eleifend rhoncus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Duis hendrerit commodo velit id varius. Aenean ut tincidunt tortor. Phasellus ut laoreet turpis. Nulla scelerisque est a tincidunt eleifend. Praesent nec fermentum nisi. Donec suscipit lacus at sagittis aliquam. Ut elit magna, interdum at commodo a, sagittis vel leo. Vestibulum aliquet est efficitur ligula pellentesque posuere. Sed vel aliquam libero, a tempor ligula. Praesent commodo, diam non ullamcorper gravida, ligula magna placerat velit, ut condimentum lorem nunc at tellus. Nunc cursus lorem sed ipsum dapibus sodales. Donec venenatis efficitur est nec lacinia. Etiam semper, lacus elementum aliquam sagittis, dui mauris mattis turpis, vitae mattis augue erat ut est. Fusce a tortor lectus. Morbi sed dui a arcu mattis finibus rutrum vel odio. Aenean eleifend faucibus leo, at condimentum nisi euismod at. Fusce pulvinar ante in odio aliquam, at lacinia nisi viverra. Fusce urna leo, pharetra eu malesuada quis, sollicitudin at lectus. Donec at neque rutrum, volutpat leo dictum, hendrerit tellus. Ut aliquam, quam nec malesuada imperdiet, tortor sem pharetra massa, quis tempus eros tortor vel libero. Phasellus in erat enim. Nunc at dapibus leo, id auctor massa. Proin et augue ante. Phasellus semper fringilla tortor nec cursus. Sed vehicula ex dignissim, blandit nibh at, tristique mauris. Nulla eu nisl vel elit mattis imperdiet. Nam euismod viverra condimentum. Duis et scelerisque diam. Curabitur imperdiet enim arcu, at elementum arcu venenatis ac. Vivamus venenatis arcu eu orci consectetur, a suscipit lacus tristique. Fusce vel lorem elementum, sollicitudin ipsum ut, interdum augue. Sed convallis varius velit, pretium volutpat odio venenatis eu. Sed id euismod augue. Duis volutpat, elit sed auctor eleifend, orci lectus iaculis mi, vel porttitor erat quam a augue. Etiam in mi consectetur, vehicula nunc sed, aliquam justo. Phasellus suscipit bibendum tellus nec pulvinar. Nulla vulputate in libero in rutrum. Sed egestas eros nec ex aliquam, eget porta ligula euismod. Duis vitae erat non erat ornare facilisis quis eu justo. Nunc et mi a magna pretium eleifend eget pretium est. Nulla vel consectetur ante. Integer non dui a nisl tincidunt auctor. Phasellus quis ex magna. Phasellus sollicitudin tellus et aliquet facilisis. Aliquam arcu orci, lobortis in turpis vel, pulvinar vehicula ligula. Praesent tortor purus, faucibus quis tortor ut, luctus consectetur neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam sed turpis ac mi vestibulum finibus. Maecenas ullamcorper accumsan velit, sed porta neque tempor ornare. Praesent blandit ultrices lorem vel imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras feugiat luctus felis eu aliquet. Ut quis pellentesque diam, eget facilisis augue. Curabitur a est eu ipsum lobortis ultrices eget at erat. Curabitur venenatis convallis velit sed mollis. Morbi congue luctus quam, non semper nisi dignissim quis. Aenean eleifend enim ultrices nunc ullamcorper porta. Integer magna felis, vestibulum a suscipit a, pharetra ut leo. Sed eget magna non purus gravida feugiat. Morbi feugiat lorem orci, ac commodo orci viverra ut. Vivamus euismod felis at dolor accumsan fringilla. Nullam ut massa sed turpis imperdiet tempus et non quam. Sed ut urna vel risus tempus finibus. Nulla ut metus iaculis, molestie arcu id, tempor libero. Nam laoreet non nisl ut iaculis. Praesent aliquam mauris velit. Maecenas fermentum vulputate tincidunt. Suspendisse vitae ante a turpis hendrerit pellentesque vel eget tortor. Mauris fermentum nibh leo, ac tristique tellus ultricies a. Integer venenatis, ligula iaculis efficitur eleifend, justo turpis finibus tortor, eget accumsan nulla orci non eros. Etiam dictum ipsum ac dui commodo vehicula. Vivamus vel ultrices leo, quis tempus urna. Aenean finibus felis lacus, at iaculis erat tempor a. Etiam nec cursus diam, nec tincidunt dolor. Sed hendrerit faucibus turpis eget blandit. Donec a nunc id quam faucibus semper. In non blandit urna. Vivamus consectetur quis nunc eu lobortis. Aliquam consequat mauris at lorem venenatis, a rhoncus sapien facilisis. Cras nisl nulla, tincidunt consectetur elit eget, pretium vestibulum massa. Integer vitae nisi sit amet purus aliquam ultricies sit amet sit amet elit. Proin vel lorem ipsum. Praesent a dui dolor. Nullam eu blandit felis. Maecenas massa quam, venenatis sed lorem vel, accumsan sollicitudin nisl. In accumsan dapibus quam non gravida. Praesent pellentesque est libero, nec accumsan erat venenatis id. Morbi sagittis posuere tortor, sit amet fringilla sapien iaculis in. Nulla facilisi. Morbi urna purus, sollicitudin ut bibendum vitae, congue non nibh. Aliquam orci quam, tincidunt in bibendum ut, congue quis tortor. Proin varius, dolor id semper tincidunt, leo tortor ullamcorper dui, et pharetra mi nisl id nulla. Quisque eu egestas elit. Integer elementum condimentum lacus, id venenatis sem dictum quis. Phasellus sed posuere ante, at vehicula dui. Sed nec semper tortor, vitae mollis ante. Quisque turpis eros, tempus vel egestas a, dapibus vitae justo. Praesent magna augue, pharetra eu velit et, sagittis pellentesque sapien. Duis suscipit egestas risus a sagittis. Proin mattis lacus eu lorem fringilla congue. Proin aliquam gravida enim, sed feugiat metus malesuada id. Pellentesque rhoncus quam sem. Fusce et quam cursus, sodales dui ac, commodo tortor. Cras quis urna at sapien vehicula vulputate vel at ex. Ut iaculis mauris nec rutrum rhoncus. Suspendisse dapibus, erat in bibendum fermentum, nunc diam rutrum lacus, non varius tellus libero et tortor. Nullam vel lacus non neque condimentum commodo convallis at sapien. Aenean ornare pellentesque nibh ut pellentesque. Cras ligula massa, rhoncus nec accumsan vitae, fringilla pretium ante. Quisque sit amet velit dignissim, ullamcorper justo quis, euismod neque. Vivamus ac finibus neque, vel volutpat eros. Duis luctus at tortor sed fringilla. Donec vitae ante non nibh tristique viverra non id odio. Morbi tincidunt bibendum vestibulum. Aliquam erat massa, lacinia et bibendum in, aliquam quis elit. Pellentesque ut purus leo. Aenean fermentum ipsum ut neque varius interdum. Sed vitae malesuada nisl. Pellentesque volutpat, neque eget mattis pellentesque, quam justo viverra nulla, vel gravida felis tortor vel dui. Phasellus sit amet eros id arcu eleifend fringilla. Nam rhoncus erat lacinia magna iaculis placerat. Suspendisse convallis consectetur ante ac finibus. Duis ultricies commodo diam, et tempus metus aliquam non. Vestibulum et aliquet arcu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque suscipit mauris id elementum eleifend. Praesent consectetur est eu metus porta scelerisque. Donec tincidunt tellus ut condimentum ornare. Sed interdum arcu eget tristique sollicitudin. Nam sit amet orci id sapien condimentum bibendum at euismod magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus tincidunt lacus a gravida mattis. Nam commodo sem ut justo porttitor tristique. Sed tincidunt lacinia mauris sed dapibus. Suspendisse vel nunc vitae odio ultricies interdum. Nulla id lobortis sapien, vel lacinia augue. In et aliquet ligula, nec dignissim nisl. Fusce eget semper ipsum, a venenatis sapien. Aenean nec commodo nibh. Suspendisse commodo lectus iaculis justo vehicula, vitae imperdiet purus lacinia. Integer tincidunt neque id enim sollicitudin tempor. Sed viverra volutpat velit id sodales. Fusce eget fermentum tellus, eget malesuada tortor. Quisque dolor tortor, vestibulum in lectus eget, elementum egestas ex. Quisque malesuada commodo orci, sit amet dapibus nisi lobortis nec. Curabitur eleifend, metus a mattis eleifend, arcu lacus ornare metus, a finibus enim nisl et libero. Fusce vehicula vitae sapien sed rutrum. Proin magna magna, volutpat ac lectus eget, tempus posuere magna. Nulla condimentum volutpat orci, placerat aliquam metus porttitor quis. Nullam quam orci, feugiat id purus sed, suscipit bibendum nibh. Sed nisl urna, cursus in finibus bibendum, sodales ac urna. Sed vitae bibendum justo. In cursus et est vel cursus. Integer viverra massa sed hendrerit tincidunt. Donec et dolor sed augue eleifend mattis sed in nulla. Ut laoreet enim augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec at mi molestie, aliquam ex eget, interdum orci. Proin porta leo vitae est tristique, eget rutrum est aliquam. Proin porta pulvinar nunc, sit amet pellentesque libero pulvinar eget. Vivamus et tincidunt ex. Donec a eros placerat tellus ultricies dignissim vitae non tellus. Proin dapibus ornare libero, eu blandit mi blandit et. Praesent rhoncus et eros in suscipit. Proin id efficitur lectus. Nullam mollis odio semper, bibendum lectus quis, venenatis erat. Phasellus sed ultrices purus. Integer ultricies iaculis lorem id interdum. Proin sed nisl quis neque ultricies facilisis sit amet non lectus. Donec mattis risus lectus, ac elementum erat scelerisque non. Nulla ac leo malesuada, sodales eros pellentesque, pulvinar leo. Nulla at nunc nibh. Vestibulum consectetur lectus eu ultricies porttitor. Donec consectetur vestibulum malesuada. Phasellus a erat non elit egestas aliquet. Phasellus a nibh id dui rhoncus aliquam. Etiam aliquam magna tellus. Cras sit amet vulputate risus. Maecenas enim urna, blandit nec augue vitae, congue dapibus turpis. Fusce porttitor mauris at efficitur sodales. Donec ex felis, vehicula a sapien a, viverra pellentesque felis. Nunc iaculis suscipit sem, a auctor sapien aliquet vel. Quisque lobortis augue sed malesuada lacinia. Aenean venenatis feugiat vestibulum. Vivamus posuere dui urna, vel scelerisque ex pretium sed. Duis quam mauris, congue vitae tellus in, malesuada posuere ipsum. Praesent consequat orci eget velit tristique, non ultrices nisi lobortis. Aliquam massa felis, interdum pulvinar leo ut, eleifend vestibulum magna. Nam lacinia pharetra ultrices. Maecenas pulvinar malesuada consectetur. Etiam venenatis tempus lectus. Nulla a tincidunt tortor. Donec pretium pellentesque tincidunt. Cras nec neque eu arcu convallis porttitor. Phasellus dolor metus, egestas convallis lacus eu, mollis posuere nulla. Aliquam a eleifend tellus, eget congue metus. Donec libero enim, pellentesque sed enim at, tristique euismod nunc. Donec fringilla lectus a efficitur scelerisque. Suspendisse pretium nulla imperdiet ex faucibus, a viverra velit euismod. Nam eget eros non purus volutpat egestas. Nullam consectetur ac nunc in feugiat. Vivamus a imperdiet ante. Aliquam tempus, felis ut auctor efficitur, turpis mauris egestas arcu, feugiat malesuada velit felis a magna. Nulla in turpis sit amet dui dignissim sagittis. Pellentesque eget urna lectus. Maecenas eu fringilla libero. Ut hendrerit libero faucibus tellus dapibus, non semper neque varius. Sed eget venenatis sapien, quis finibus orci. Sed tincidunt pellentesque placerat. Cras vel est ornare, ultrices lacus nec, pharetra ex. Mauris sit amet nulla vitae nisl tristique dignissim rutrum at tellus. Nam molestie vestibulum nisl sit amet euismod. Sed cursus pellentesque varius. Sed bibendum libero sit amet elit placerat, id commodo mauris facilisis. Nunc tincidunt, libero sed accumsan condimentum, lorem ligula pellentesque ex, vitae pretium mauris nibh non libero. Vestibulum non elementum lacus, sed fermentum lorem. Sed molestie pharetra neque. In euismod sit amet tellus sit amet viverra. Nullam ornare bibendum mollis. Ut eget fermentum mauris, eu efficitur metus. Sed varius euismod nulla. Proin pulvinar justo mauris, nec auctor lorem tincidunt non. Quisque sit amet aliquet nunc. Duis quis nisl ut nibh semper aliquet non vitae neque. Ut faucibus nibh ut arcu condimentum, eu suscipit nulla mollis. Morbi nec neque egestas, egestas sem et, fringilla augue. Etiam pharetra, magna et lobortis scelerisque, lacus nisi gravida metus, volutpat dignissim lorem elit ac metus. Fusce nec enim in nunc blandit fermentum eu eu mauris. In quis aliquet leo. Duis risus felis, mattis vitae lobortis a, lobortis et erat. Donec semper turpis metus, sit amet vestibulum tortor dictum vitae. Sed pretium cursus nulla. Nullam pellentesque vitae est et vulputate. Aliquam lorem est, congue elementum maximus a, lobortis a nibh. Sed ac porta velit. Curabitur rhoncus scelerisque risus nec viverra. Duis condimentum quam ac tortor dictum posuere. Mauris ullamcorper elementum efficitur. Fusce dapibus consectetur velit, vitae eleifend dolor elementum nec. Duis pulvinar interdum posuere. Nunc augue magna, fringilla eu odio in, consequat laoreet augue. Vestibulum ut sem condimentum, tempus metus vitae, ullamcorper est. Vestibulum nunc nulla, faucibus placerat mi sed, congue posuere felis. Curabitur nec ornare felis, quis vehicula risus. Praesent tristique urna ut malesuada semper. Donec quam tellus, fringilla nec efficitur ac, mattis nec nisl. Aliquam convallis, dui sit amet consectetur tempor, magna ante lobortis elit, nec cursus ex arcu eu dolor. Nullam sagittis leo nec purus auctor imperdiet. Nam maximus tempor sem vel lobortis. Pellentesque feugiat purus venenatis neque tincidunt, eget imperdiet risus condimentum. Cras sed tempor est. In augue mauris, consectetur vel erat at, tempus scelerisque lacus. Sed gravida urna eget enim laoreet tempus. Vestibulum pellentesque cursus tellus, semper fermentum arcu sollicitudin quis. Nulla non placerat ex, interdum tincidunt turpis. Integer eu lorem at nunc sollicitudin finibus eget id sapien. Donec aliquam dolor augue, eget maximus eros auctor id. Pellentesque et est ac odio dignissim dapibus. Vestibulum nec tellus facilisis, dictum turpis vel, cursus ante. Vivamus bibendum tortor semper, consequat mauris ut, ullamcorper arcu. Vivamus non dui in augue rhoncus aliquam. Quisque eget quam velit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus vitae pretium magna, facilisis mollis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus dictum diam, lobortis aliquam mi pulvinar et. Nunc ornare, odio a blandit aliquet, dolor massa blandit dui, vitae lobortis odio ligula bibendum mauris. Sed molestie, ante vitae fringilla vulputate, felis metus euismod nulla, nec ultrices arcu lectus ac nibh. Etiam ac nisi a nisl consequat vestibulum quis ut eros. Donec elit ligula, lacinia in maximus non, aliquam ut massa. Sed vitae diam hendrerit, commodo dui et, facilisis sapien. Maecenas erat urna, consequat a tempor vitae, gravida in lectus. Ut maximus sollicitudin sem id dapibus. Nullam id dolor tortor. Aliquam erat volutpat. Proin nec tristique ante. Ut finibus felis ac dapibus malesuada. Nunc egestas molestie urna ac placerat. Vestibulum tempor nec urna sit amet finibus. Quisque consequat convallis sem, quis consectetur lectus blandit non. Etiam risus metus, feugiat at eleifend eu, mattis quis quam. Integer sit amet tempus orci. Cras in lacus non enim rhoncus consectetur. Pellentesque rhoncus in metus id dictum. Nulla sed lectus felis. Morbi est quam, vestibulum ut fermentum vel, aliquam eget tortor. Praesent ut finibus enim, nec congue risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris dictum velit at massa sagittis, a vulputate arcu lobortis. Etiam felis elit, tempor id lacinia sit amet, malesuada in sapien. Donec lacus augue, pulvinar eget augue quis, finibus convallis mauris. Phasellus lorem augue, ultricies sit amet auctor a, maximus eu urna. Cras vel felis quis neque fringilla accumsan. Curabitur magna tortor, varius nec nisl at, sagittis aliquam magna. Aliquam id nunc semper, efficitur lorem eu, pharetra purus. Nulla sed vulputate massa. Nam blandit purus quis lectus molestie, venenatis bibendum velit cursus. Suspendisse varius orci et nunc mollis, vitae vestibulum leo lacinia. Ut imperdiet ut odio vel tempor. Nulla ante nunc, vulputate nec interdum nec, interdum id ligula. Duis ullamcorper est eu velit bibendum egestas. Proin lacinia metus dolor, id imperdiet nulla scelerisque et. Fusce varius augue tristique mauris congue, sit amet feugiat nibh ultricies. Proin ornare, felis a vehicula elementum, sem nunc porta ante, at pretium libero massa cursus mi. Morbi sem sem, pellentesque ut quam nec, mattis consectetur quam. Fusce sit amet lobortis felis. Suspendisse est ante, dictum vel malesuada vel, vulputate et purus. Suspendisse vitae ultricies enim. Nunc mollis blandit eleifend. Donec dapibus congue aliquam. Duis purus sem, porta vel purus ut, rhoncus eleifend ante. Morbi finibus faucibus augue vel laoreet. Vestibulum quis pellentesque turpis, eget molestie ex. Pellentesque sed lorem non augue congue placerat. Nullam finibus egestas quam, quis maximus est pulvinar sed. Praesent nec orci sem. Vivamus ullamcorper tincidunt molestie. Nunc sit amet ornare libero, et blandit ante. Vestibulum tempor ac ligula ut venenatis. Nunc enim sem, rutrum id elementum gravida, dapibus in massa. Nunc risus est, dictum eget mattis ac, faucibus vel ipsum. Cras vulputate porta lobortis. Praesent consequat consectetur libero, et hendrerit dolor cursus id. Nulla felis nunc, lacinia non pellentesque eu, dictum maximus ligula. Donec vel elit id quam lobortis ornare. Vivamus a augue vitae ex vulputate dignissim. Nam tempus magna et purus porttitor fermentum. Sed in finibus eros. Nam quis tortor ac tortor vehicula elementum vel a orci. In hac habitasse platea dictumst. In dictum orci commodo nunc gravida, eget porta neque tempus. Ut laoreet risus non ullamcorper semper. In euismod id diam ac tristique. Cras nec risus aliquet, fringilla tellus ut, imperdiet dolor. Pellentesque at lobortis turpis, convallis pretium risus. Curabitur non nisl ante. Curabitur at ex eget nulla eleifend gravida sed id libero. Quisque feugiat semper lacus, in dapibus lacus fringilla ac. Aliquam feugiat, nulla aliquet euismod pellentesque, erat libero sodales arcu, ut commodo nulla nibh egestas augue. Aliquam bibendum pellentesque diam eu luctus. Vivamus blandit urna magna, sit amet ullamcorper mi interdum vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla non nisi eget turpis consectetur fringilla. Donec mattis, nunc nec viverra varius, neque arcu pellentesque est, vitae egestas risus urna ac metus. Pellentesque ornare volutpat facilisis. Maecenas congue dignissim neque, ut bibendum orci hendrerit in. Etiam efficitur nisi mattis nibh faucibus mattis. Duis vel diam at tellus semper eleifend. Vivamus nec nibh facilisis, cursus nisl eget, hendrerit enim. Nam ullamcorper lobortis metus nec auctor. Vivamus eget tortor nisi. Integer laoreet suscipit nisl id porta. Mauris quis vestibulum elit. Praesent tellus justo, volutpat eu porta at, hendrerit eget nisi. Curabitur nec nulla ac metus posuere aliquam vitae at felis. Donec a pretium purus. Phasellus ligula enim, ullamcorper at velit vitae, porta congue nisi. Etiam ac est eu metus sagittis ultrices. Ut facilisis congue lorem eget bibendum. Maecenas vestibulum suscipit dolor, non lacinia tellus blandit aliquet. Maecenas id posuere nibh. Donec sed tristique metus. Nullam elementum sollicitudin tellus, a volutpat est feugiat faucibus. Fusce consectetur nulla metus, id elementum ligula iaculis ut. Sed ac lectus elit. Nam sed leo porta, pellentesque dui sit amet, dapibus metus. Morbi facilisis egestas euismod. Sed sollicitudin, enim et feugiat ultricies, lectus nulla scelerisque risus, quis volutpat ante dolor condimentum felis. Curabitur vitae augue vehicula, malesuada lorem vel, hendrerit enim. Pellentesque dapibus interdum accumsan. In hac habitasse platea dictumst. Nullam dictum sodales volutpat. Nullam euismod nibh sit amet tortor interdum euismod. Nulla quis magna mollis, lacinia dui ut, pulvinar nisi. Aenean fermentum pellentesque nulla, in imperdiet quam egestas et. Ut consequat purus nisl. Praesent semper ac est non fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque tortor justo, semper sed est ut, pulvinar sagittis leo. Suspendisse consectetur rutrum pretium. Donec eu ligula purus. Ut elit nisi, pretium et vestibulum a, iaculis et nulla. Donec ullamcorper feugiat urna, accumsan pulvinar lorem. Aenean a vestibulum tortor. Cras facilisis sit amet arcu sed varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis congue feugiat tincidunt. Fusce et lacinia lorem, at elementum risus. Morbi faucibus scelerisque euismod. Proin ac sagittis ipsum. Vestibulum euismod auctor nisl et faucibus. Nulla aliquam, enim a mattis tristique, ipsum ligula efficitur enim, feugiat euismod justo tellus quis nibh. Phasellus ut tincidunt lorem. Praesent at tempus eros. Pellentesque hendrerit mauris at libero ultricies, maximus dapibus nibh porttitor. Vivamus ornare et mauris nec volutpat. Sed nibh lorem, tempor vitae pulvinar non, placerat id ipsum. Cras et ex ex. Proin suscipit nibh gravida sagittis fermentum. Sed tincidunt elementum convallis. Etiam tempor dictum ex, quis fringilla dui faucibus sit amet. Fusce maximus ultrices dui nec laoreet. Praesent vel sem in tortor ultrices pellentesque in et est. Quisque sagittis magna et velit suscipit pellentesque. Aenean nec mattis eros, et luctus libero. Phasellus quis tortor tincidunt, pellentesque mauris vehicula, tempor magna. Etiam quis commodo sem. Nullam id mauris magna. Pellentesque quis turpis a metus lobortis dignissim. Donec a neque semper, rhoncus erat nec, vestibulum justo. Proin laoreet erat sit amet augue pretium, sed auctor nisl consectetur. Proin feugiat, nulla eu pellentesque ullamcorper, urna orci aliquam eros, id consequat ex purus vel leo. Proin gravida nibh purus. Suspendisse augue nisl, bibendum eget mauris ut, hendrerit tempus sem. Nullam eget imperdiet metus, sit amet lacinia odio. Aenean congue suscipit libero suscipit efficitur. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed nec accumsan nibh, vitae convallis ligula. Etiam vehicula leo quis fermentum condimentum. Maecenas vehicula ultrices magna nec porttitor. Integer non tortor vel sapien efficitur volutpat quis in metus. In feugiat a lacus tempus gravida. Cras interdum sit amet odio sit amet sodales. Vivamus non mauris ligula. Pellentesque cursus sit amet libero sed consequat. Duis quis molestie nunc. Nullam eleifend arcu vitae rutrum hendrerit. Cras sit amet odio congue, lacinia justo vitae, efficitur nisi. Suspendisse pretium sodales mauris sed sollicitudin. Nulla sit amet facilisis erat, nec auctor diam. Donec eu ullamcorper diam. Integer laoreet urna varius vestibulum accumsan. Duis congue elit in vulputate consectetur. Quisque iaculis risus nisi, nec viverra est consectetur id. Sed bibendum et orci quis cursus. Quisque a euismod justo. In venenatis leo a bibendum tristique. Quisque a ex justo. In sagittis lorem sed massa mattis, non ultricies dui venenatis. Maecenas accumsan hendrerit quam ut imperdiet. Aenean ultrices finibus lorem ac posuere. Sed viverra pretium arcu. Nam eu turpis vel metus venenatis pharetra a a metus. Curabitur non elit lorem. Sed vestibulum sit amet tortor non venenatis. Phasellus suscipit dolor nunc, sed elementum nisl mattis in. Nullam dignissim interdum volutpat. Quisque luctus hendrerit nibh non posuere. Ut convallis quis justo rutrum cursus. Etiam semper interdum nisl eget efficitur. Quisque laoreet urna quis lacus mollis, quis ultricies urna volutpat. Cras a congue leo. Integer mattis, arcu quis ornare convallis, risus ante accumsan erat, id volutpat orci ligula in nulla. Aliquam nec mollis massa. Etiam et nulla quis augue facilisis viverra. Mauris in leo auctor, feugiat purus sed, ultricies lacus. Suspendisse imperdiet augue ut ligula pretium, in accumsan augue lobortis. Phasellus molestie convallis lobortis. Aliquam erat volutpat. Aenean ultricies leo nec justo semper laoreet. Sed vitae lorem fermentum turpis elementum sodales eu eget lectus. Aenean placerat, nibh non malesuada sagittis, diam sem dignissim tortor, lacinia tempus sem mauris sit amet urna. Cras hendrerit odio augue, quis dapibus turpis interdum ut. Vivamus in posuere lorem, sed consectetur augue. Integer blandit neque viverra, commodo nisi sit amet, placerat lorem. Praesent aliquam enim in pellentesque lobortis. Pellentesque non posuere enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eget orci lobortis, faucibus est ut, congue eros. Aliquam et ex in elit molestie eleifend a at odio. Quisque sit amet aliquam metus. Suspendisse potenti. Maecenas convallis ornare odio, a fermentum neque porttitor vitae. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec lacus diam, rhoncus at scelerisque nec, ornare in tellus. Fusce orci nibh, tempor at turpis quis, convallis malesuada felis. Praesent congue mattis tortor. Mauris malesuada, dolor in ultricies aliquet, velit dolor tempor dolor, quis commodo nisi enim eu nulla. Praesent auctor at nisl eget congue. Integer condimentum magna a magna facilisis, id pretium arcu varius. Pellentesque bibendum tellus in leo scelerisque, sollicitudin eleifend metus condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum mattis tellus vestibulum tempor ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu dictum metus. Quisque ipsum mi, sodales sit amet scelerisque eu, ultrices sed nunc. Mauris bibendum lacus ut blandit ornare. Suspendisse a arcu gravida, maximus ante quis, fermentum dolor. Ut ut lorem commodo, aliquet erat sit amet, placerat dolor. Phasellus id sapien eros. In condimentum efficitur nibh vitae ultrices. Fusce congue sed nibh iaculis luctus. Mauris lobortis lectus orci, sed efficitur enim convallis ullamcorper. Sed sed arcu id elit interdum porta. Praesent dignissim auctor consectetur. Phasellus leo ipsum, facilisis non ex eget, sodales tristique mauris. Fusce ac luctus felis. Integer ac metus mi. Nam facilisis, eros quis dapibus vestibulum, nibh orci luctus dolor, eget lobortis ligula turpis nec urna. Curabitur convallis, lectus eleifend imperdiet interdum, felis sem cursus velit, non scelerisque tortor libero quis tortor. Fusce neque ipsum, bibendum et mauris vel, dignissim sagittis mi. Aliquam vel pulvinar risus. In eget efficitur tellus, non auctor elit. Nullam eu lectus urna. Pellentesque congue nisi vel semper imperdiet. Duis a sagittis dolor. Proin bibendum magna a felis feugiat placerat. Proin et bibendum magna. Mauris sagittis est quam, sed elementum urna lobortis a. Etiam in augue venenatis, elementum mauris ac, scelerisque arcu. Nunc sit amet mi nisl. Fusce blandit felis a justo ultrices varius. Vestibulum hendrerit facilisis leo, sit amet vestibulum tortor malesuada ut. Etiam nibh arcu, pellentesque sit amet leo sit amet, suscipit pretium erat. Praesent scelerisque quam libero, ut tristique metus tristique a. Integer venenatis ligula cursus, sodales velit eu, tempor lorem. Sed ante ex, porttitor sit amet dui mattis, aliquet tristique diam. Pellentesque molestie varius iaculis. Phasellus viverra pellentesque ipsum in mollis. Morbi tempus odio magna, ut ornare risus congue id. Etiam luctus elementum enim eu tempor. Sed mattis metus ac aliquam pretium. In sit amet eleifend erat. Maecenas lacinia eu nunc non scelerisque. Aliquam finibus sapien non enim efficitur, sit amet aliquet ex aliquam. Integer pulvinar, dui a interdum ultrices, justo orci venenatis orci, vel condimentum nulla dolor vitae mauris. Vivamus posuere faucibus purus at consectetur. Nulla dignissim libero in ex semper, at aliquet magna tincidunt. Nam facilisis sit amet libero a porta. Aenean laoreet, orci quis egestas scelerisque, erat nibh efficitur libero, vitae ultricies ipsum massa ut velit. Phasellus pharetra egestas diam at aliquam. Nulla ac tellus non tellus molestie euismod sit amet sed libero. Praesent quis interdum nunc, at rhoncus lacus. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur pharetra, nulla non lacinia consequat, orci est interdum nisi, eu aliquet urna velit eu sapien. Nunc sodales condimentum purus ut sagittis. Sed orci metus, eleifend et finibus ac, laoreet et sapien. Pellentesque erat arcu, tristique sit amet odio a, lobortis vehicula ligula. Quisque rutrum lectus non lectus sodales suscipit. Suspendisse et mauris et mi imperdiet scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim ligula vel nisi varius finibus. Suspendisse tempor nibh vel finibus mollis. Nam pulvinar rutrum sagittis. Aenean ligula ex, feugiat a odio non, tempor condimentum erat. Praesent cursus leo quis justo blandit, ut aliquam sapien tempus. Aliquam tempor porta turpis, vehicula lobortis risus lacinia quis. Quisque et purus in risus mattis rhoncus. Sed in condimentum mauris. Nulla sed velit eu magna euismod pulvinar. In ullamcorper libero dui, vel ultricies sem fringilla et. Donec eget sagittis enim. Ut ut nisl laoreet, congue nibh nec, volutpat nibh. Aenean eget feugiat urna. Ut hendrerit justo quis mi mattis, vel sodales neque hendrerit. Quisque rhoncus ex non augue venenatis placerat. Mauris at magna tempor, lacinia erat eget, egestas quam. Phasellus viverra dolor ac ligula semper porta. Quisque egestas ligula mattis pulvinar ullamcorper. Duis placerat vehicula ex, quis dictum purus vehicula quis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Curabitur ultrices ut orci vel tempus. Aliquam ultrices molestie sapien, ut condimentum enim consequat vel. Curabitur bibendum ornare orci, et egestas nisi euismod at. Proin ut mi a sapien pharetra dignissim non ac erat. In augue ligula, ullamcorper id semper vitae, rutrum non tellus. Donec libero odio, condimentum malesuada ullamcorper eu, aliquam non urna. Proin lobortis, odio sed pellentesque mattis, quam libero volutpat risus, ullamcorper mattis erat orci eget lorem. Pellentesque imperdiet erat cursus consequat imperdiet. Curabitur congue vel orci ut fringilla. Duis quis ante in turpis vulputate sodales. Duis blandit ante justo, et sodales magna laoreet id. Phasellus blandit vehicula ipsum, non suscipit eros dictum sed. Integer malesuada sed ante sed feugiat. Praesent porta volutpat elit, non rutrum orci cursus vel. Fusce et lacus eget magna consectetur tempor quis et augue. Proin et rutrum purus. In bibendum hendrerit viverra. Morbi sed volutpat odio. Donec eget justo sit amet metus mollis efficitur. Suspendisse bibendum ac ipsum id iaculis. Sed ut sagittis orci, in blandit mauris. Quisque interdum commodo volutpat. Nullam vel est eget sapien tempus ullamcorper. Nullam sed dictum dolor, non eleifend sapien. Morbi vulputate lectus lorem, vitae semper ex dapibus ut. Proin vulputate, dui eu eleifend congue, lorem velit eleifend justo, ac mollis nibh mi vel risus. Quisque suscipit tristique ipsum pharetra dictum. Vestibulum blandit neque orci, a vulputate elit feugiat eu. Fusce fermentum magna lectus, nec semper nisi tristique vitae. Cras efficitur pharetra lectus. Proin sit amet risus velit. Fusce quis lectus sodales nibh feugiat varius. Sed varius, leo eget iaculis sagittis, urna quam tempor tellus, id tempor erat diam euismod leo. Suspendisse ipsum nisi, semper in aliquet et, interdum non tortor. Phasellus vehicula, sapien non tempor maximus, metus erat porta risus, suscipit gravida mauris dolor ac enim. Praesent sit amet tellus neque. Donec venenatis dictum bibendum. Praesent mattis orci massa, eget varius nisl aliquam nec. Nulla commodo et mauris ut pellentesque. Proin commodo, tellus vel vestibulum interdum, enim diam vulputate sapien, eget lacinia ipsum lectus vel diam. Aenean eleifend ligula et orci efficitur, sed scelerisque nisi lacinia. Mauris venenatis, elit in tristique gravida, odio velit lobortis augue, ut pretium diam ipsum vitae justo. Cras sit amet pellentesque turpis. Donec ac pretium sapien. Mauris neque arcu, iaculis a sagittis quis, elementum vitae tellus. Aenean sit amet interdum diam. Phasellus nibh ligula, interdum in nisl nec, ultricies luctus sapien. Integer eu eleifend urna, sit amet euismod neque. Aliquam id sagittis tortor. Curabitur in sagittis enim, quis lobortis diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dignissim purus eu auctor ultricies. Proin laoreet diam et magna tempor, in congue ex tincidunt. Nunc vel cursus tellus, eget blandit odio. Cras metus magna, pulvinar eu tristique finibus, pellentesque id tortor. Vestibulum cursus ut odio vitae ultricies. Integer at tellus varius, dapibus augue quis, mattis elit. Nullam malesuada in lectus nec finibus. Praesent sed massa metus. Etiam gravida tristique feugiat. Curabitur blandit erat ac scelerisque placerat. Nam bibendum dapibus ex nec sagittis. Nullam malesuada fringilla lorem, id posuere metus varius aliquam. Aliquam porttitor a velit ut auctor. Vivamus tincidunt tempor pretium. Pellentesque ac faucibus felis. Nunc vulputate ut urna quis mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris in purus et mauris efficitur lobortis semper at mi. Praesent sollicitudin est a nibh facilisis pellentesque. Pellentesque vitae accumsan nisl. Ut porttitor tellus non mi tempor porta. Phasellus magna orci, bibendum quis sollicitudin nec, iaculis ac ipsum. Donec tellus ipsum, egestas quis ante vitae, dictum suscipit risus. Sed turpis orci, elementum et tellus et, iaculis tincidunt lacus. Nullam gravida vulputate enim, at semper ligula. Maecenas efficitur molestie leo id malesuada. Ut eu sodales nunc. Nunc et leo non ligula dignissim laoreet. Phasellus id lorem quam. Sed porttitor quis lorem quis congue. Duis laoreet orci erat, sed sagittis ipsum egestas id. Duis volutpat dui ac urna consectetur dictum. Mauris ac purus faucibus, laoreet nunc a, bibendum purus. Pellentesque sagittis tempus nulla id faucibus. In urna velit, iaculis et nisl ac, mollis gravida leo. Sed dignissim elit rhoncus, maximus ex nec, tempor mi. Nulla id dui quis nulla blandit pretium. Duis vestibulum pellentesque accumsan. Sed dignissim dapibus risus at ultricies. Maecenas scelerisque lacus at arcu viverra faucibus. Phasellus at quam leo. Integer sit amet volutpat orci. Aliquam consectetur lorem vitae libero tristique, vel sollicitudin tortor mattis. Sed commodo mauris sed neque volutpat, id ultricies metus laoreet. Aliquam sed nibh sem. Quisque vehicula, massa et porta scelerisque, dolor urna elementum leo, at congue massa est a justo. Fusce vitae elementum tellus, vel condimentum erat. Quisque molestie, velit ac varius lacinia, enim tellus porttitor sapien, et laoreet dolor quam at erat. In vitae dapibus tortor. Mauris in libero luctus, gravida nisi in, porta velit. Vivamus venenatis turpis ut malesuada dictum. Pellentesque a dapibus leo. Phasellus auctor a lectus vitae porttitor. Donec pellentesque facilisis pretium. Sed placerat, ligula sit amet consectetur blandit, nisi leo semper lacus, vitae dictum est lacus nec velit. Morbi commodo molestie diam a sodales. Praesent sed aliquam mauris. Aliquam vitae nisi sed orci ullamcorper pharetra. Nunc at elementum ante, quis scelerisque quam. Praesent auctor cursus pretium. Ut dignissim massa eget nulla volutpat aliquam. Etiam maximus lacinia ultricies. Integer non aliquam risus. Curabitur at accumsan nulla. Nullam varius varius metus eu vestibulum. Suspendisse ac ligula velit. Curabitur placerat, ante sed dapibus congue, odio neque varius purus, et varius metus enim nec odio. Vestibulum aliquet laoreet purus a posuere. Sed eget vehicula nibh, ac lobortis tellus. Phasellus eleifend fermentum ornare. In libero tellus, dapibus sed interdum sed, aliquam in purus. Nam interdum quis neque et tincidunt. Aenean odio ante, iaculis sed leo nec, venenatis molestie velit. Sed ipsum nisl, mollis eget aliquam sed, semper vitae lectus. Nam placerat nisl sed pulvinar ultrices. In id nisl ac felis mollis dapibus. Sed condimentum feugiat malesuada. Nam a felis ac dui pretium fringilla gravida at leo. Pellentesque aliquet porta turpis, ac mollis dolor pulvinar in. Duis vitae nunc a neque dignissim euismod ac non erat. Quisque non mauris ac massa malesuada dictum eget ac ipsum. Curabitur maximus dui id dolor ornare facilisis quis porttitor augue. Nunc pellentesque tellus et risus malesuada, ut bibendum diam gravida. Suspendisse placerat ultricies dictum. Sed pulvinar sapien a tellus dignissim venenatis nec id metus. Ut porta lacus sodales, semper diam maximus, efficitur sapien. Curabitur sollicitudin posuere leo, et molestie leo consectetur vitae. Pellentesque vel porta leo. Sed odio velit, porta eu mattis sed, dapibus a purus. Duis auctor, dui in blandit semper, leo eros dignissim nibh, eu convallis ex massa at odio. Proin sodales nisi mauris, et lacinia metus lobortis ac. Donec eget ullamcorper ligula, sed posuere nibh. Nullam finibus metus vel tellus blandit, et semper enim consectetur. Nunc ac auctor tellus. Phasellus in ex id tellus hendrerit ultricies. Aliquam odio quam, ultricies sit amet quam in, rutrum commodo mi. Praesent facilisis rhoncus bibendum. Donec non nisi sit amet erat tristique pretium at in erat. Nulla facilisi. Sed luctus quam et lacus accumsan, varius vestibulum ipsum ultricies. Curabitur fermentum faucibus nunc et feugiat. In vitae lectus rutrum, sollicitudin odio in, semper enim. Vivamus ac sodales felis. Pellentesque turpis purus, feugiat sit amet turpis nec, posuere mollis urna. Aenean sed mi eleifend, fringilla urna eu, ultrices nulla. Phasellus non lacus ut nulla condimentum gravida. Nulla purus risus, lobortis vitae dui at, fringilla suscipit tortor. Maecenas maximus, nibh et hendrerit congue, odio nibh consequat ipsum, vel ullamcorper lorem ante nec diam. Donec rutrum massa id tortor pretium, vel imperdiet tortor accumsan. Nullam sit amet vehicula urna. In consectetur justo ac magna suscipit, at varius velit pharetra. Fusce convallis enim eu cursus tincidunt. Nam non neque ac leo viverra fringilla sed varius turpis. Sed finibus nibh quis purus tempor laoreet. Maecenas faucibus pellentesque ex quis eleifend. Vestibulum ultrices justo mi, sit amet varius urna gravida vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean fermentum facilisis orci id tincidunt. Donec vehicula metus vitae volutpat rutrum. Sed et hendrerit erat, sit amet lobortis mauris. Maecenas pellentesque dui risus, a placerat dui cursus ut. Aliquam ullamcorper egestas justo, a varius dolor. Etiam elementum aliquam sapien quis sagittis. Maecenas at convallis magna, vitae pellentesque urna. Vestibulum malesuada, nisi in efficitur laoreet, massa ex tristique turpis, in varius arcu mi id purus. Duis rutrum egestas facilisis. Donec et mi ut tortor cursus semper. Suspendisse potenti. Ut faucibus tortor nunc. Fusce sodales quam sit amet purus maximus, id hendrerit purus volutpat. Integer iaculis, justo id dapibus dignissim, tortor ante hendrerit felis, imperdiet vulputate lectus quam sed nibh. In eu hendrerit ex. Nam ligula nisi, viverra vitae facilisis sit amet, facilisis eu augue. Nullam auctor est nec eros laoreet, vel tristique libero rhoncus. Nullam a odio sit amet nulla egestas pulvinar eu eu sem. In placerat ac est ut scelerisque. Morbi nec hendrerit neque. Vivamus velit odio, interdum et finibus scelerisque, fringilla at lacus. Mauris sit amet tortor malesuada, mollis ipsum faucibus, euismod lorem. Ut id aliquam magna. Cras vel commodo neque, rutrum rutrum erat. Nunc in orci bibendum, laoreet enim quis, placerat metus. Mauris accumsan tempor velit vel sodales. Maecenas ornare purus sem, vel consequat dui faucibus sed. Cras rutrum ac tellus sed varius. Pellentesque facilisis libero nisi, in tincidunt felis gravida sit amet. Phasellus a interdum purus, eu sodales ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis ex ut metus blandit aliquet. Proin vitae consectetur nulla. Praesent mattis, urna sit amet lacinia aliquet, sapien mauris pellentesque libero, egestas scelerisque sem quam ut massa. Nunc vitae porta sapien. Aenean fringilla placerat lacinia. Ut egestas ligula quis velit elementum congue. Praesent tincidunt consectetur nisl eget maximus. Praesent in aliquet libero, at tempor elit. Vestibulum tellus est, ornare nec est tempus, sodales varius turpis. In dignissim quis odio ut pharetra. Sed pulvinar sollicitudin massa at bibendum. Aliquam vulputate justo id vehicula malesuada. Ut sapien lorem, iaculis vitae mauris ac, posuere eleifend diam. Sed aliquet ex quis odio scelerisque, sed consectetur elit tempus. Curabitur vitae ultrices risus. Praesent eu augue in risus ullamcorper porta. Maecenas vulputate nisl nibh, ut tincidunt lacus posuere in. Nunc ac arcu lacinia, ultrices quam sed, scelerisque dolor. Quisque aliquam, arcu eget efficitur vestibulum, nibh justo aliquam leo, in porta eros justo at sem. Quisque fringilla dictum mauris, nec consequat nulla cursus at. Vestibulum congue, nulla vitae dictum hendrerit, felis orci euismod arcu, nec laoreet enim nibh eu sapien. Cras fringilla purus nisi, vel consequat justo mollis ultrices. Donec gravida, massa quis varius dignissim, nisl quam lacinia purus, non porttitor massa urna vitae nibh. Sed sit amet euismod sem. Nam ut arcu nec diam porttitor congue ut ac felis. Praesent facilisis ultricies elementum. Duis a tincidunt mauris. Phasellus in dapibus tortor, dignissim placerat leo. Aenean volutpat facilisis enim, vel laoreet purus. Integer tincidunt mattis lectus quis vulputate. Maecenas maximus quam dui, sit amet dapibus justo suscipit quis. Donec ornare consectetur quam, ut tincidunt mi iaculis eu. Nam vitae urna at est faucibus accumsan in et elit. Morbi neque ligula, cursus in luctus nec, tempus mollis lorem. Aliquam a mi orci. Ut id ante iaculis, tristique lorem eget, molestie ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis luctus libero eget lacus commodo ultrices. Integer vitae auctor libero. Proin et magna lobortis, pharetra arcu tincidunt, luctus est. Quisque eget vehicula lectus, eu malesuada dolor. Maecenas luctus malesuada dolor, vitae sollicitudin elit pellentesque sit amet. Nunc feugiat tincidunt aliquet. Pellentesque sed pulvinar lorem, sed egestas nisi. Mauris viverra, nunc vitae varius vulputate, felis augue bibendum nibh, eget fringilla ipsum tellus nec enim. Maecenas sed elit a diam congue tempus. Duis ac erat diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In molestie arcu et fringilla scelerisque. Suspendisse finibus turpis ex, in laoreet nibh malesuada nec. Donec elementum consequat nisi vulputate consequat. Proin id pulvinar risus. Proin ullamcorper ipsum eros, porttitor feugiat turpis tempus in. Aliquam blandit ante eget purus sollicitudin eleifend. Nulla vel quam erat. Maecenas pretium vel arcu quis condimentum. Maecenas vitae magna viverra, finibus purus vitae, hendrerit orci. Nulla ut nisi vel magna accumsan rutrum. Quisque aliquet ligula eget lacus facilisis tincidunt. Fusce non leo dapibus, tincidunt nisl et, auctor justo. Morbi aliquet metus at libero auctor, molestie elementum quam sodales. Maecenas interdum aliquam mauris, non scelerisque leo feugiat et. Fusce porta quis ipsum non molestie. Mauris auctor diam luctus erat pellentesque, vel sodales nisl condimentum. Integer elit nisl, tincidunt a molestie id, sagittis sit amet nibh. Etiam et porta purus. Sed nec risus non sapien egestas congue eu sed lectus. Ut diam mauris, sollicitudin id turpis vel, pretium malesuada lorem. Cras pretium mi ut nisi sodales, eu consectetur metus suscipit. Donec condimentum nunc erat, a tristique nisi ullamcorper sit amet. Donec nec condimentum velit, nec fermentum justo. Phasellus ac sem vel nisi ornare tristique. Nullam gravida, tellus at malesuada ornare, ipsum orci laoreet nibh, nec fringilla sem nulla a lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse potenti. Curabitur luctus rutrum aliquet. Etiam condimentum velit nibh, ac efficitur ex dignissim eu. Integer iaculis augue purus, ac commodo enim viverra in. Cras erat justo, efficitur in metus ullamcorper, lacinia commodo quam. Curabitur sollicitudin ex ac dui congue aliquam. Fusce a arcu sem. Suspendisse elementum, dolor vel vestibulum venenatis, tellus risus dapibus elit, eget rutrum felis est et massa. Ut feugiat placerat sapien in feugiat. Praesent porta gravida lectus ut maximus. Sed mattis ex tincidunt, iaculis lacus vitae, luctus massa. Quisque condimentum fermentum turpis quis iaculis. Pellentesque fringilla urna pretium turpis efficitur, id lacinia orci condimentum. Duis tristique enim velit, nec imperdiet nisl euismod sit amet. Aliquam quis risus diam. Aenean aliquam luctus orci, nec laoreet velit malesuada sit amet. Maecenas vulputate est nec enim laoreet, in aliquet tortor auctor. Praesent nisl sem, malesuada ac odio vel, tincidunt consectetur leo. Nullam in neque libero. Fusce maximus nisl est, eget blandit leo condimentum sed. In maximus, est eget tincidunt semper, magna sapien ullamcorper tortor, sed mollis orci sapien in elit. Ut tincidunt accumsan orci, quis iaculis nibh blandit ac. Phasellus luctus auctor arcu, eu ultrices eros laoreet et. Vivamus velit lectus, iaculis et laoreet ac, pulvinar id tellus. Cras ac felis a nibh pharetra pellentesque eu rhoncus ipsum. Nulla vehicula risus dolor, id bibendum felis interdum sed. Nulla sed sem facilisis enim pellentesque ornare eu quis nulla. Sed arcu ipsum, ultrices at massa id, efficitur ultrices mauris. Fusce malesuada nisi eu nisl maximus, sit amet fermentum massa mollis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi et elit sem. Aliquam nec lorem eget nulla consectetur sagittis sit amet at diam. Phasellus erat justo, interdum ut vestibulum eget, semper sed ex. Sed sit amet orci ut enim tempor ultrices sit amet ac felis. Maecenas varius metus tincidunt ligula maximus, a accumsan lectus laoreet. Cras massa augue, congue sit amet mi non, consectetur semper enim. Proin pellentesque congue enim. Morbi cursus elit et dui placerat, id scelerisque lectus luctus. Donec non dui eget erat cursus egestas ac et lacus. Vestibulum facilisis diam et neque rhoncus, id consectetur ligula auctor. Suspendisse vitae dui sagittis, molestie leo rhoncus, faucibus eros. Vestibulum sed sem faucibus, volutpat ligula vitae, scelerisque augue. Nullam eget malesuada metus. Fusce quis purus nulla. Nullam ac gravida ipsum. Curabitur vel lacus ac diam fermentum porttitor. Sed a leo ac justo mollis scelerisque non id ligula. Nullam enim risus, tincidunt eget sollicitudin in, gravida nec elit. Fusce fringilla quis massa in sagittis. Cras sollicitudin tellus ac lacus pharetra rhoncus. Sed at fringilla diam. Suspendisse finibus lectus ac arcu pellentesque tincidunt. Nam congue pharetra quam. Nam sed porta justo. Nulla facilisis malesuada justo, non porta nisl elementum ut. Sed id lectus felis. Suspendisse potenti. Vestibulum in viverra lacus. Integer sollicitudin quam non nisi tincidunt, in gravida sapien venenatis. Nulla id tellus at lorem aliquet aliquam at nec lectus. Proin bibendum fringilla aliquam. Fusce ultrices, libero vel tincidunt pharetra, nulla arcu imperdiet libero, sit amet venenatis risus elit id ligula. Aliquam est nulla, mattis non dictum eget, hendrerit nec massa. Sed vulputate purus nec lectus sodales tempor. Aliquam erat volutpat. Phasellus porta justo mauris, quis laoreet felis gravida in. Nulla at varius erat. Suspendisse congue odio eros, at fermentum tellus posuere vel. Phasellus non odio odio. Phasellus non posuere ante. Aenean turpis massa, posuere non turpis at, placerat pulvinar quam. Aenean pharetra cursus elementum. Donec porta, lorem et facilisis tempus, augue nisl dictum lacus, vitae accumsan erat ipsum nec sapien. Phasellus eget vestibulum sem, quis dignissim enim. Sed vel dui dolor. Maecenas sed suscipit eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ac convallis dolor. Praesent condimentum metus iaculis lorem molestie, eget semper felis efficitur. Phasellus condimentum risus at nisi congue tempor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi dolor turpis, tempus in finibus nec, accumsan id arcu. Donec purus lacus, suscipit vitae justo sed, vestibulum dapibus eros. Aenean vehicula suscipit massa sit amet cursus. Sed tempor luctus pellentesque. Vestibulum venenatis eros nulla, a lobortis tortor efficitur in. Morbi consequat, justo eget consectetur accumsan, augue eros posuere elit, ac maximus libero eros et libero. Curabitur fermentum hendrerit nunc eu porttitor. Sed a velit vulputate, blandit arcu id, interdum sem. Sed tempor a tellus quis imperdiet. Proin interdum interdum laoreet. Nam maximus mi eleifend, vulputate velit id, vehicula lacus. Quisque nulla nisl, luctus vitae erat eu, rutrum varius urna. Praesent id odio vitae urna convallis aliquam nec nec purus. Duis venenatis vestibulum dui, ac feugiat sapien vestibulum in. Phasellus luctus accumsan nisl, eget venenatis lacus lacinia id. Morbi fringilla hendrerit ex, sed ultrices lectus mollis non. Donec bibendum molestie auctor. Cras consectetur sagittis sem, ut rhoncus mauris molestie quis. Phasellus magna sem, elementum egestas sollicitudin eu, posuere id ipsum. Nunc tempus metus diam, a lacinia neque tincidunt eget. In fermentum enim mi, accumsan porttitor libero accumsan vitae. Etiam sagittis dapibus elit, eu maximus eros ornare non. Donec ullamcorper arcu quis ex scelerisque interdum. Sed ac maximus arcu. Praesent faucibus est ullamcorper nulla maximus sodales. Curabitur pellentesque augue lectus, non iaculis neque dignissim in. Donec eget purus ut nunc condimentum consequat. Praesent gravida tempus semper. Aliquam pellentesque tempus tortor eu cursus. Proin a elementum sapien, blandit vestibulum dolor. Aliquam quam orci, sagittis quis lorem viverra, tincidunt semper ipsum. Nulla consectetur neque ac enim placerat venenatis. Pellentesque fermentum ultricies urna sed vehicula. Quisque aliquet blandit ipsum, et finibus nibh pharetra quis. Aenean ullamcorper tellus rutrum velit sodales, a eleifend mi maximus. Duis a enim nec felis tincidunt posuere. Donec vel nisl condimentum, scelerisque quam id, interdum urna. Phasellus eget bibendum nisi. Nullam posuere iaculis sapien, ac porttitor nisl condimentum a. Morbi lobortis quis mauris in rhoncus. Maecenas sed porttitor urna. Nulla gravida ante non velit venenatis, id egestas turpis commodo. Sed luctus consequat neque eget varius. Nullam sed dui pretium, ullamcorper libero eget, consectetur massa. Suspendisse et bibendum nisl. Nulla eros odio, venenatis eget lacinia ut, commodo vitae elit. Cras consectetur nisl ut placerat fringilla. Pellentesque id nisl non lorem congue auctor. Nam luctus massa augue, et volutpat quam dapibus ac. Aenean molestie lorem quis dolor fermentum, eu fermentum nisi auctor. Mauris maximus egestas libero id pellentesque. Integer mauris magna, congue sed efficitur sit amet, molestie vestibulum urna. Vivamus sit amet lorem mattis, mollis justo sit amet, congue risus. Morbi mattis lorem eu arcu elementum euismod. Nullam sollicitudin, dui vel lobortis molestie, neque lectus maximus elit, a lobortis urna lectus eu ipsum. Quisque tristique mollis tempus. Nunc pellentesque nunc a congue mollis. Nam finibus tellus eget venenatis ullamcorper. Etiam euismod pharetra lectus sed tincidunt. Integer tincidunt, erat ut eleifend ultrices, turpis elit placerat tortor, at rutrum justo enim sit amet nunc. Nulla tempor enim ex, eget venenatis magna egestas vitae. Praesent sed congue sem. Duis vulputate mi in odio tempor, et aliquam ipsum gravida. Donec ipsum arcu, interdum maximus risus eu, placerat interdum est. Proin pulvinar mauris velit, vel ultricies velit tristique ac. Sed vel velit eros. Mauris sagittis nisi ut mi volutpat, ac laoreet ex elementum. Pellentesque fringilla risus sit amet dui dapibus dapibus. Proin vitae metus sit amet risus dapibus auctor. Quisque non varius est. Nulla vestibulum sodales nulla aliquam sollicitudin. Vivamus posuere, metus eget auctor fringilla, nulla urna semper ex, in lacinia ligula ex id magna. Vestibulum fringilla sem in ex tempor tincidunt. Cras justo nulla, sollicitudin nec massa eget, laoreet gravida nibh. Donec sodales pharetra eros ut egestas. Mauris cursus in tellus ac faucibus. Duis at nisi quis justo pulvinar porttitor vitae et libero. Fusce rhoncus nulla nibh, eu cursus mauris rhoncus at. Quisque faucibus pellentesque leo, at blandit sapien euismod nec. Mauris bibendum lorem sed augue aliquet, sit amet lacinia lacus lacinia. Nulla accumsan erat non mauris dignissim, vel tempor ipsum tincidunt. Quisque consequat bibendum sollicitudin. In hac habitasse platea dictumst. Nam elit leo, tempor sit amet lorem at, ultrices consequat ex. Nullam elit sem, sagittis et orci eget, tristique luctus diam. Phasellus ultrices mi massa. Nam nisi eros, mollis at consectetur non, maximus vel nulla. Nunc at magna et orci tristique faucibus. Morbi fringilla mollis enim vitae auctor. Quisque sit amet vulputate mi, vitae vulputate eros. Aenean sem nulla, vehicula quis velit at, fringilla lobortis risus. Nulla non commodo purus. Fusce in odio ipsum. Proin leo nisl, pulvinar eu vulputate sed, porttitor sit amet justo. In at pulvinar quam. Phasellus tincidunt suscipit iaculis. Cras ut ex arcu. Integer elit nibh, sodales quis odio a, semper feugiat urna. Nulla interdum tellus neque, fringilla tristique odio ornare id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce vel purus ac turpis condimentum fringilla in pulvinar lacus. Donec ut placerat nisi. Maecenas ultricies, augue ultricies eleifend lacinia, nibh diam dapibus risus, sed imperdiet lacus enim in urna. Duis eu enim vitae justo auctor pellentesque sed volutpat nulla. Mauris iaculis quis velit quis iaculis. Aliquam posuere tellus lectus, nec finibus orci cursus quis. Duis nec massa at massa lobortis dignissim. Donec ornare, lectus a dictum lobortis, neque felis gravida libero, non ultrices justo lacus at dui. Integer eu nisi vel diam bibendum aliquam id fermentum metus. Suspendisse fermentum dolor enim, sit amet fermentum leo laoreet ut. Sed interdum a massa non tincidunt. Maecenas scelerisque varius justo, et dignissim turpis tincidunt in. In eu tortor eros. Donec congue tellus neque, non sodales mi finibus ultricies. Maecenas eget gravida ante. Vestibulum scelerisque commodo felis sit amet semper. Donec rhoncus aliquet nibh, at tincidunt massa eleifend sed. Sed quis diam posuere mauris molestie sodales. Quisque cursus semper purus, et lobortis est commodo sed. Sed faucibus quis tellus vitae rutrum. Etiam turpis lectus, rhoncus vel dapibus vel, luctus in magna. Fusce at dictum ante. Donec aliquam convallis risus, sed sodales lacus finibus pulvinar. Etiam accumsan ornare nisi, at elementum felis sagittis ac. Quisque ac vehicula diam. Aliquam sit amet tempus ipsum, quis ultrices metus. Sed sit amet libero volutpat, tempus massa quis, porttitor ante. Donec laoreet fermentum leo, non aliquet mi maximus at. Nullam auctor, ligula eu venenatis suscipit, tortor est eleifend lectus, vel efficitur risus arcu in mi. Maecenas vitae nunc vel mi tincidunt scelerisque. Nam in diam elit. Mauris mattis ornare libero, et tempor justo laoreet sed. Proin vitae dui sagittis, lacinia ex ut, consequat mi. Aenean quis consectetur urna, in fringilla felis. Mauris id dictum orci, nec mattis dui. Nam dictum imperdiet lorem sit amet consequat. Vestibulum consequat tristique ligula non cursus. Fusce efficitur nunc mattis faucibus laoreet. Nunc sollicitudin orci pretium diam venenatis, et lobortis libero porta. Aliquam eget laoreet tortor, quis luctus felis. Suspendisse rutrum mi at imperdiet placerat. Fusce nisl mauris, laoreet ac risus eu, suscipit luctus lorem. Donec malesuada lectus metus, at luctus risus pellentesque nec. Cras euismod sodales turpis, ac eleifend augue convallis at. Donec dolor orci, imperdiet sit amet ultricies id, laoreet nec arcu. Phasellus quis ligula quis magna fermentum vehicula. Suspendisse ultrices aliquam sem ut dignissim. Quisque porttitor est eget semper bibendum. Morbi suscipit iaculis dui, ac mattis ipsum dignissim a. Duis consectetur suscipit viverra. Donec lacus tellus, suscipit at viverra eget, imperdiet a risus. Proin eleifend, lacus sed feugiat condimentum, massa quam malesuada eros, et tincidunt velit enim cursus nunc. Ut vel tincidunt lectus, sit amet iaculis tortor. Sed laoreet diam non egestas finibus. Mauris interdum orci sit amet augue tempor, vel efficitur massa interdum. Morbi sagittis cursus risus, pharetra scelerisque risus luctus sit amet. Proin lacinia ex nec nulla suscipit, nec elementum erat finibus. Curabitur ut mi elit. Vestibulum laoreet ipsum vel augue tempor, vel pharetra metus lobortis. Donec vel justo est. Aenean convallis dui eget auctor iaculis. Mauris accumsan blandit turpis. Morbi interdum ipsum non dui accumsan placerat. Nam ornare arcu ac ante consequat, vel dignissim mauris facilisis. Etiam a eleifend arcu. Phasellus dolor enim, sollicitudin eu nisi vitae, auctor ultricies turpis. Donec tincidunt nisi vel sem lacinia, quis semper erat gravida. Nulla libero neque, ultrices in erat non, imperdiet blandit libero. Aenean commodo bibendum vulputate. Nulla at ante nulla. Praesent et efficitur elit. Morbi eget odio a sem tincidunt semper. Curabitur pulvinar tortor et nunc tristique consequat. In at eros libero. Phasellus quis accumsan massa. Sed vulputate dolor elit, blandit dictum mauris cursus et. Aliquam ex orci, ornare sed enim quis, ornare dictum nisl. Nunc in ligula vel diam sagittis bibendum. Proin sed tempor neque. Fusce mi purus, lacinia ac risus non, consequat tempus massa. Mauris eget vulputate eros, et gravida erat. Sed scelerisque magna ac lorem tempor, eu congue ante tempus. Suspendisse id rutrum lacus. Proin in velit sed turpis aliquet vehicula sed nec lectus. Duis eu lacinia ante. Sed sit amet dictum erat. Proin commodo tincidunt dui, rhoncus aliquet elit. Mauris quis nulla ut velit tincidunt dignissim in ut lacus. Mauris id volutpat eros. Maecenas felis tellus, aliquam a finibus dignissim, tristique at enim. In volutpat scelerisque dictum. Sed sagittis euismod ex, rhoncus interdum dui tincidunt quis. Pellentesque tempor urna eu eros scelerisque tristique. Duis iaculis vitae arcu non luctus. Mauris leo sapien, faucibus vel neque dignissim, sodales accumsan felis. Aenean in commodo nibh, ut finibus justo. Cras nisl odio, pretium vel ex in, semper efficitur augue. Nulla tortor est, tincidunt in imperdiet quis, gravida non nisi. Morbi posuere libero neque, nec facilisis nunc semper eu. Cras tincidunt mi id eros imperdiet, quis dapibus magna dictum. Maecenas lobortis arcu sit amet felis sodales, id lobortis sem rutrum. Suspendisse quam diam, accumsan ac accumsan id, pharetra et mi. Nunc at ante odio. Vivamus dignissim enim et risus scelerisque convallis at vitae dolor. Nunc aliquam sem vitae enim mattis tincidunt. Aenean nec hendrerit tellus. Sed a mollis nibh. Vivamus sollicitudin mi ut lorem porttitor, sed hendrerit urna laoreet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque blandit metus sed ipsum porta, sed convallis turpis sagittis. Pellentesque sapien lorem, sagittis id accumsan eget, imperdiet ut lacus. Maecenas sed tempus mauris. Phasellus sed dui id justo vehicula pulvinar. Donec quis justo neque. Vivamus at odio urna. Nulla accumsan tortor tempor justo mattis, ultricies lobortis turpis feugiat. Integer in mauris fermentum, accumsan ligula at, interdum nisl. Nullam scelerisque commodo varius. In sollicitudin, dui ut condimentum sagittis, lorem sem porta urna, at lacinia felis mi non metus. Duis quis lacinia odio. Nam at lacus enim. Sed in volutpat magna. In eget velit augue. Proin quam nunc, auctor sed facilisis eu, molestie ac lorem. Nullam rutrum tincidunt ex egestas facilisis. Proin et maximus dolor. Nam condimentum mi quis neque condimentum, non pretium lectus varius. Vestibulum feugiat sem at venenatis euismod. Nulla imperdiet sem in neque suscipit vestibulum. Nunc ac pellentesque ligula. In euismod tellus quis ipsum euismod molestie. Sed in purus malesuada, malesuada erat a, dapibus est. Mauris placerat gravida ipsum vel sodales. Ut quis aliquam diam. Fusce aliquet ac arcu sit amet ultrices. Aenean ac turpis eget nunc porta commodo ac et enim. Phasellus dignissim feugiat tristique. Nunc feugiat vel libero in iaculis. Quisque feugiat eleifend turpis, eu volutpat est. Vestibulum dictum ut metus in interdum. Donec placerat augue lectus, luctus facilisis lacus ultrices non. Curabitur sed aliquam felis. Aliquam sollicitudin in lectus quis pulvinar. Donec vel ligula mollis, condimentum lorem quis, lobortis nunc. Vivamus vitae turpis convallis, auctor dui sed, bibendum ante. Maecenas semper felis eget massa aliquet, eu commodo risus rhoncus. Ut efficitur id sem eu tristique. Morbi quis lorem at ipsum tempor viverra in non sapien. Nunc velit ex, porttitor id tempor sed, viverra vel felis. In lacinia blandit mauris, hendrerit consectetur turpis molestie commodo. Integer in ipsum sed enim tincidunt eleifend ac sit amet dolor. Aenean ornare ante dictum, maximus leo eu, feugiat urna. Praesent nisi sem, viverra eu orci ut, euismod bibendum mi. Mauris dui leo, euismod eu urna at, vehicula congue velit. Integer sollicitudin massa at mauris molestie condimentum. Cras vitae purus justo. Pellentesque semper magna sit amet sapien suscipit maximus. Nullam iaculis scelerisque massa vel tempor. Nam fermentum mauris eu mi bibendum semper. Suspendisse potenti. Donec ullamcorper turpis ut felis mollis, non porta felis porta. Ut sodales malesuada lorem ac pharetra. In blandit odio nibh, nec tempus ligula semper sit amet. Nam euismod tellus eu eros laoreet aliquam. Nullam at tellus urna. Quisque non lacus mi. Nullam gravida, metus porttitor consequat pulvinar, odio eros consequat ligula, egestas faucibus est odio vitae ipsum. Ut tempor vehicula interdum. Etiam interdum semper libero, a fringilla sem fringilla non. Proin at cursus erat. Phasellus at magna feugiat, dictum neque a, ullamcorper nisi. Proin et orci imperdiet, semper lectus eget, rutrum neque. Donec feugiat augue elit, a suscipit leo iaculis quis. Suspendisse ut nulla erat. Nulla justo magna, pulvinar at ante vehicula, elementum volutpat odio. Integer laoreet bibendum nulla in fringilla. Integer semper eu velit at ultricies. Etiam mollis turpis urna, id malesuada nulla faucibus in. Suspendisse vulputate efficitur nisl, eu tempus ipsum lobortis ac. Fusce ac pellentesque mi, ac porta nulla. Donec scelerisque velit ex, nec tristique erat commodo sed. Nullam id ipsum tincidunt, convallis dui auctor, elementum ligula. Pellentesque id tortor non orci iaculis ultrices. In malesuada mauris vel eleifend malesuada. In sit amet lacinia enim. Aliquam erat volutpat. Nam nec mattis lacus. Mauris lobortis justo auctor nibh malesuada pellentesque. Vivamus bibendum nulla at bibendum scelerisque. Phasellus dictum elit gravida semper dignissim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent dignissim enim eros, sit amet varius sapien tempor et. Aliquam erat volutpat. Sed feugiat, sem ut aliquam bibendum, erat purus aliquet urna, in vehicula velit lacus vel nisl. Fusce dictum id lectus quis porttitor. Etiam eu aliquet metus. Mauris vestibulum lorem in dapibus convallis. Integer id dolor sagittis arcu tincidunt tincidunt non et erat. Proin aliquam volutpat tempus. Ut id dignissim velit. Etiam purus massa, tristique nec ipsum eget, porttitor ultrices dolor. Sed tempus nisi ac aliquet interdum. Nunc eu tellus sit amet erat iaculis blandit. In at posuere metus, nec euismod metus. Morbi risus nunc, euismod non diam sit amet, elementum egestas dolor. Vivamus sed arcu ut arcu ultrices dictum a at eros. Suspendisse id felis et neque luctus tristique ac sed magna. Integer fermentum dictum tortor. Integer vitae metus pharetra, sollicitudin leo nec, facilisis dolor. Aenean laoreet ex velit, eget suscipit magna hendrerit vel. Integer nec ornare dolor. Etiam vitae quam sit amet mauris aliquet cursus rhoncus a metus. Donec sit amet bibendum eros. Nam hendrerit finibus nibh, eget pharetra lectus euismod ut. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi feugiat pretium elit, non suscipit sapien dapibus ac. Nam non porttitor ipsum, gravida iaculis dui. Vestibulum vehicula est eu neque ornare, eget semper est ornare. Aliquam erat volutpat. Maecenas et ligula vulputate, tincidunt nulla vel, pulvinar augue. Sed ac ante eu massa posuere auctor in quis leo. Maecenas a diam quam. Pellentesque metus felis, semper id mattis nec, ultricies sed dui. Vivamus ornare nisl ut ultricies imperdiet. Vestibulum congue lacus in metus convallis condimentum. Cras sodales arcu a malesuada semper. Nam rhoncus elit ligula, eu tristique ipsum suscipit non. Phasellus egestas posuere nunc, in dignissim nisl venenatis a. Pellentesque at arcu sed metus feugiat semper ut quis nisl. Maecenas accumsan blandit nisl eu posuere. Duis ac est blandit, vestibulum nunc consectetur, efficitur sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum molestie felis sapien, id vehicula orci rhoncus sit amet. Nulla eu ornare mauris. Proin ut ligula turpis. Ut nec sapien urna. Praesent lectus lorem, dignissim id sem sit amet, vehicula hendrerit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus sit amet vehicula neque, at eleifend risus. Maecenas in ante mollis, hendrerit est sed, pellentesque purus. Curabitur gravida augue lacus, hendrerit porta ligula porttitor a. Aenean euismod lacinia auctor. Maecenas eget sodales lorem, non ornare dui. Donec fermentum neque vitae massa porttitor, non rhoncus enim vestibulum. Suspendisse venenatis eget eros nec ultricies. Curabitur sit amet magna enim. Cras consequat neque eu diam laoreet consectetur. Nulla ante sapien, vestibulum in nibh a, mattis posuere lorem. Phasellus fermentum et erat vitae dictum. In hac habitasse platea dictumst. Vestibulum auctor dolor nulla, quis imperdiet ex tincidunt sit amet. Duis ullamcorper nulla sed neque luctus gravida. Aliquam odio velit, sagittis sed tortor vel, porta fringilla dolor. Sed neque arcu, sagittis vitae ante vitae, placerat imperdiet lacus. Pellentesque consequat tempus ex, nec rutrum odio dapibus vitae. Vestibulum suscipit, elit sed faucibus ultrices, ligula erat finibus odio, vitae bibendum eros arcu eu enim. Ut varius sapien erat, vel accumsan leo tincidunt quis. Mauris malesuada metus ac fermentum pretium. Mauris id lorem quam. Donec orci orci, condimentum eu pharetra ac, varius nec felis. Curabitur nec magna egestas, convallis lacus ultrices, dignissim turpis. Sed porttitor sagittis ligula, id accumsan odio ultricies quis. Integer sit amet quam eu sapien convallis consectetur. Aenean efficitur enim eget venenatis interdum. In suscipit ligula sit amet mauris commodo, eget venenatis lacus accumsan. Curabitur a luctus elit, vitae fringilla nibh. Nulla interdum, lorem maximus vestibulum commodo, odio quam pellentesque est, at placerat odio tortor nec eros. Mauris mollis imperdiet dui, quis vestibulum nisi molestie sed. Nam aliquet ante non egestas cursus. Nullam dapibus, nibh eget tincidunt tristique, mi turpis euismod velit, quis aliquet velit enim vel quam. Nam interdum vitae dui ac ultricies. Etiam maximus aliquam felis, sit amet commodo mi porttitor ac. Sed urna mauris, consectetur et fringilla ac, cursus eget magna. Integer nunc sapien, auctor id vehicula sit amet, molestie eget nunc. Fusce egestas sodales tellus tempor auctor. Praesent placerat egestas fringilla. Donec faucibus id nibh ac vestibulum. Fusce ac nisi mattis, venenatis dolor at, fringilla nibh. Pellentesque in tincidunt arcu, ac pretium nulla. Duis non efficitur mauris, ut tincidunt elit. Sed libero quam, eleifend posuere eleifend nec, interdum quis turpis. In quis vestibulum nibh. Praesent auctor pellentesque libero eget tempor. Morbi libero ipsum, consequat eget quam eget, commodo bibendum est. Praesent arcu eros, egestas in vulputate at, vestibulum vitae sapien. Duis laoreet ante quis nisl tristique lobortis sit amet ut turpis. Cras orci eros, fermentum nec pretium vitae, convallis ut tortor. Sed gravida dolor sapien, accumsan tincidunt tellus eleifend ut. Nam sem justo, ornare non tempus in, fringilla a justo. Proin a tellus molestie, hendrerit ante eu, consequat nisi. Maecenas sagittis a metus id varius. Nulla malesuada, ante interdum placerat ornare, magna felis rhoncus nulla, et placerat justo arcu ullamcorper mauris. Phasellus scelerisque lacus leo, at tincidunt ligula ultricies sit amet. Etiam rutrum diam quis augue eleifend condimentum. Pellentesque ex nibh, finibus sed semper quis, accumsan at metus. Sed eget nisl ut magna lobortis consectetur id quis augue. Maecenas posuere justo purus, gravida facilisis tellus dapibus id. Quisque tortor arcu, varius eget tellus nec, euismod maximus erat. In hac habitasse platea dictumst. Morbi pulvinar hendrerit dignissim. Integer accumsan dui eget sapien blandit ultricies. Mauris a porta diam. Donec massa justo, efficitur vel vehicula sit amet, porta in enim. Nullam condimentum ipsum vestibulum egestas gravida. Mauris ut nisi ornare, eleifend nulla ut, elementum tortor. Aliquam vulputate sapien nec porttitor dignissim. Pellentesque elementum accumsan tellus, nec egestas turpis scelerisque a. Suspendisse lectus diam, dictum vitae sagittis et, cursus vitae eros. Pellentesque laoreet libero vitae fringilla vulputate. Cras vitae nisl ut turpis cursus vehicula. Nullam facilisis viverra tellus, ac convallis odio pharetra eu. Duis ut magna eleifend, commodo ex eu, auctor nibh. Aliquam erat volutpat. Etiam posuere arcu purus, suscipit vulputate leo dapibus vitae. Aliquam turpis turpis, suscipit vitae imperdiet vel, porta nec eros. Nulla aliquet turpis eu lorem euismod posuere. Vivamus tristique ligula in arcu aliquam, nec auctor quam tincidunt. Donec at tortor at augue pretium faucibus. Maecenas dui velit, mollis nec congue id, molestie et leo. Donec porttitor dignissim consectetur. Sed a porta eros, elementum semper risus. Mauris non tortor tellus. Aliquam sit amet massa lectus. Ut auctor rutrum nisl sit amet semper. Vivamus efficitur sem turpis, at bibendum orci semper varius. Sed ultricies ipsum lectus, ut ultrices ex finibus eget. Ut eget turpis sit amet ligula bibendum mollis. Proin ut interdum ex. In enim diam, sagittis eget nisi in, sollicitudin fringilla urna. Pellentesque at orci lacinia, aliquet risus in, lacinia turpis. Aliquam pulvinar faucibus nunc sit amet ullamcorper. Nullam tristique varius sapien id dapibus. Phasellus viverra augue sapien, ac laoreet eros dapibus sit amet. Nam hendrerit nisl nec dapibus pharetra. Donec iaculis neque in nisl accumsan, id semper ligula ultrices. Sed luctus tempus ligula, quis mattis augue luctus a. Curabitur id diam nec ipsum efficitur blandit a sit amet odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dignissim, lectus ac consectetur tempor, lectus eros vestibulum sapien, eget mattis metus lorem at neque. Curabitur sit amet ullamcorper tellus, vitae posuere odio. Integer in orci malesuada, condimentum metus id, luctus magna. Sed eu orci vitae diam tempus mollis. Donec venenatis neque non urna molestie, sed suscipit velit tristique. Nulla sed diam lorem. Aliquam massa magna, pretium non faucibus id, tristique ut tortor. Vivamus ut convallis nibh. Integer dictum elit ut ex sagittis, quis feugiat ipsum lacinia. Nulla purus leo, porta non bibendum id, condimentum sed urna. Donec varius sagittis tempus. Sed dapibus ligula vel purus ullamcorper scelerisque. Nunc egestas volutpat euismod. Aliquam dapibus egestas dolor nec posuere. Fusce rhoncus sem sed aliquet dignissim. In porta libero non nunc vehicula, vitae dictum dui dictum. Fusce vel tempor nunc. Aliquam posuere odio ut mi tempus, ac feugiat orci luctus. Integer facilisis ornare ante at suscipit. Praesent quis tortor urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque in tincidunt erat. Nam vel nulla euismod dui mattis dapibus sit amet nec nisi. Aliquam cursus laoreet facilisis. Praesent quis pulvinar urna. Vivamus semper massa massa, et mattis magna cursus tincidunt. Morbi interdum non lacus in vestibulum. Pellentesque lobortis tempor enim quis lacinia. Aliquam erat volutpat. Donec efficitur interdum ante, non elementum lectus euismod at. Nunc pharetra neque nec ex porta sodales. Duis at est sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis nunc eu venenatis viverra. Nulla sed elit id velit sodales feugiat. Donec in enim ac nisl laoreet tristique. Sed tincidunt pellentesque augue mattis vulputate. Fusce quam augue, lacinia vestibulum tempus blandit, vulputate non odio. Aenean pellentesque mauris vel urna dapibus placerat. Vestibulum molestie turpis eget odio iaculis, at facilisis metus consequat. Sed eget nisi nisi. Sed dui sapien, fermentum fermentum augue eu, varius commodo nisl. Suspendisse venenatis auctor est vitae posuere. Etiam aliquam ligula leo, vitae condimentum sem maximus vel. Sed tempor nulla justo, quis eleifend arcu pharetra at. Sed suscipit nunc tempor massa fermentum, sit amet aliquet elit finibus. Donec consectetur malesuada porttitor. Etiam tempor egestas diam et consectetur. Aenean quis lacinia ligula. In congue commodo dui, id aliquet velit dapibus non. Nunc mattis purus ipsum, vel egestas dolor finibus ac. In at ullamcorper eros, quis pellentesque dolor. Sed id feugiat risus. Aenean nec nibh in tellus euismod euismod. Suspendisse vestibulum nisl in nibh feugiat, vestibulum tristique turpis pretium. Sed commodo elit tincidunt risus sagittis fermentum. Morbi lobortis pulvinar euismod. Etiam scelerisque, sapien non scelerisque fringilla, lacus nulla scelerisque sapien, ac tempor turpis dui tincidunt dui. Sed pulvinar orci a orci sagittis commodo. Proin vehicula libero sed quam lacinia, ut euismod diam dictum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse porttitor gravida eros ut luctus. Integer quis ipsum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque id odio mi. Etiam sit amet blandit diam. Vestibulum lacus lacus, fermentum quis convallis nec, cursus vitae justo. Praesent laoreet ultricies eleifend. Sed nibh tortor, malesuada non purus fermentum, ornare accumsan nulla. Vivamus elementum dolor vitae euismod convallis. Morbi lectus lorem, faucibus ut elementum id, convallis in ligula. Donec a lacus a mauris interdum molestie at non lectus. Etiam faucibus in sapien a dignissim. Curabitur scelerisque finibus nulla. Aenean gravida consequat accumsan. Quisque id enim in est dictum feugiat. Morbi dolor orci, molestie vel leo et, tincidunt tristique dolor. Aenean venenatis lobortis nulla, a lobortis metus fringilla sit amet. Morbi ac finibus tellus. In neque massa, bibendum non pellentesque sed, imperdiet non dui. Mauris porttitor sagittis laoreet. Maecenas sed ornare quam, quis faucibus arcu. Sed sit amet auctor ipsum, at mollis libero. Praesent non faucibus odio, nec consequat quam. Integer eget enim sit amet nibh malesuada mollis. Sed faucibus condimentum congue. Aenean tortor libero, pharetra sed magna sed, fermentum imperdiet magna. Suspendisse dictum lacinia sodales. Aliquam luctus purus purus, ut ornare ipsum tincidunt quis. In sit amet justo non felis laoreet consectetur eget eu turpis. Nullam ornare magna quis quam suscipit, in euismod ligula eleifend. Etiam at libero pellentesque, lobortis neque in, tristique eros. Aliquam non nisi lectus. Phasellus eu nisl tortor. Proin a ultricies leo. Morbi at diam et nibh iaculis dictum sed a nunc. Donec euismod gravida lorem quis tincidunt. Nam tristique neque sagittis orci faucibus, ac gravida turpis aliquam. Donec bibendum imperdiet odio. In luctus quis dolor eu fringilla. Vivamus eleifend. asvv2xyfxnvdhf62xbo5faths2wrlys 740209 740207 2026-05-02T22:42:36Z User97104 72884 740209 wikitext text/x-wiki '''Lorem ipsum''' dolor sit amet, consectetur adipiscing elit. Cras at enim sed erat fermentum hendrerit vel vel diam. Sed luctus risus et odio lobortis tincidunt. Donec dictum neque vitae elit bibendum, dictum porttitor turpis dapibus. Morbi posuere sapien eu vulputate elementum. Donec rutrum non nibh a vulputate. Nunc et ipsum diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer ultricies velit ligula, et euismod leo mattis et. Curabitur ut porttitor lacus, sit amet scelerisque arcu. In vitae tellus quis augue faucibus consectetur. Ut dui nisl, posuere sit amet augue nec, interdum luctus nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus bibendum, turpis id fringilla lacinia, magna nisi ullamcorper ligula, sed gravida purus elit in turpis. == Vestibulum praesent etiam == Vestibulum eu ullamcorper neque. Nullam facilisis dui mauris, vitae euismod odio tempor vel. Nullam luctus eget est eget vehicula. Aenean fringilla ligula eget felis porttitor, eu maximus arcu laoreet. Etiam ornare nisi sed orci congue, lacinia feugiat diam feugiat. Suspendisse nisi enim, tempus at rutrum quis, interdum et erat. Quisque facilisis ante rutrum pharetra consectetur. Etiam ultricies quam orci, vitae eleifend erat imperdiet eu. In hac habitasse platea dictumst. Nulla at interdum nibh, et congue dolor. Donec ut aliquet mauris, quis volutpat purus. Vestibulum nisi nisl, sagittis eu neque sed, hendrerit placerat mauris. Suspendisse pretium, turpis sed pharetra pulvinar, enim leo tempor purus, vel euismod justo mauris id est. Aenean tristique est eget semper scelerisque. === Mollis nec === Praesent mollis ultrices mauris, et sagittis mi mollis ut. In ac pretium nunc. Fusce ullamcorper elit nunc, in pretium orci pretium imperdiet. Mauris a sapien eget nibh sodales tincidunt. Nulla feugiat feugiat rutrum. Donec laoreet feugiat porttitor. Suspendisse potenti. Vivamus scelerisque tristique tellus eu accumsan. Donec euismod maximus dui at malesuada. Etiam eu vehicula turpis. Cras sit amet sapien sed diam fermentum placerat. Cras ut sagittis velit. Etiam nec blandit neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse potenti. Cras volutpat id turpis sed tempor. Integer leo dolor, accumsan ut scelerisque at, aliquam non elit. Nullam egestas facilisis urna, sit amet commodo nunc laoreet eget. Duis aliquam auctor augue, sit amet efficitur ante lacinia vel. Praesent posuere, velit hendrerit viverra consectetur, justo nulla finibus turpis, sit amet posuere nisl metus non mauris. Maecenas at enim pharetra, tristique erat sed, ultricies leo. Nunc vel sem sit amet massa auctor commodo. Pellentesque feugiat nunc vitae magna fermentum mollis. Nullam id diam et leo ultrices aliquet vel nec felis. Quisque in ornare justo, eu tincidunt nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis lorem enim, sed mattis est gravida in. == Etiam integer in vivamus == === Maximus gravida === Etiam maximus tellus eros, quis congue sapien pellentesque sed. Nam imperdiet gravida volutpat. Donec vitae sodales nunc. Vestibulum augue sapien, aliquet in sem a, fermentum mattis sem. Maecenas id dolor felis. Quisque rhoncus orci et elit porttitor, vitae lacinia tellus scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer gravida vestibulum aliquet. Pellentesque leo purus, laoreet sit amet dolor ut, pretium porttitor nulla. Etiam pretium porta ante, a convallis diam elementum nec. Vestibulum et odio ac elit aliquet fringilla ac eu lectus. Sed vitae turpis magna. Nam tristique libero neque, nec pellentesque lectus rutrum ut. In porta, diam id porttitor hendrerit, velit quam lobortis sem, in tempor nibh dolor consectetur ipsum. Vivamus et mattis nisl. Etiam sapien nulla, cursus quis posuere non, feugiat in justo. Phasellus sagittis, ligula vitae condimentum auctor, purus velit dignissim risus, a eleifend leo eros eu tortor. === Mollia finibus === In mollis mauris ante, ac tincidunt neque faucibus eu. Nullam faucibus risus ut magna rhoncus venenatis. Duis ullamcorper nec risus at pulvinar. In elementum at tortor tincidunt maximus. Nullam vitae gravida dui. Morbi rutrum diam eu nulla porttitor cursus. Fusce vel urna sit amet risus facilisis volutpat vitae non purus. Integer mattis nec nisi eu placerat. Quisque commodo suscipit dui a blandit. Donec sagittis leo arcu, vitae cursus neque sollicitudin eget. Maecenas id sem aliquet, molestie elit bibendum, lobortis felis. Vivamus finibus est ac hendrerit auctor. Phasellus dictum consectetur ex pellentesque dapibus. Aliquam volutpat arcu vitae nibh pretium, sed sodales enim ornare. Sed a erat enim. Aliquam quam elit, rutrum et neque euismod, fermentum faucibus risus. Morbi tincidunt sed mi nec tempor. Integer ullamcorper quam id mauris vulputate vulputate. Pellentesque id auctor sem. == Aenean vivamus pellentesque morbi == === Non luctus === Aenean non purus maximus risus imperdiet mollis. Aenean non dui erat. Morbi aliquet velit quam, quis semper lacus posuere venenatis. Integer id nulla nibh. Donec felis ex, faucibus at sem at, commodo dignissim lorem. Pellentesque ipsum urna, eleifend et felis vitae, viverra tincidunt urna. Ut ex felis, vestibulum et sapien sed, finibus rutrum justo. Donec viverra pellentesque nisl at elementum. Quisque blandit, ipsum placerat scelerisque tincidunt, nibh lacus euismod metus, sed eleifend ipsum libero non enim. Vivamus luctus vestibulum faucibus. Cras tempus felis id odio sodales consectetur. Cras orci nisi, viverra quis mi vitae, pretium consectetur dui. Phasellus euismod felis eu sem ultricies sodales. Integer eget mollis velit, eget pretium purus. Morbi laoreet, dolor ut fringilla egestas, ipsum orci tincidunt tellus, a egestas neque tellus sed purus. Nulla sagittis vitae nibh quis dictum. Aliquam sagittis dolor nibh, eu euismod odio gravida nec. Donec varius efficitur justo. Integer sit amet arcu sollicitudin, scelerisque est sed, accumsan est. === Vel est === Pellentesque vel euismod leo. Nulla mauris sem, vehicula fermentum nibh vel, hendrerit vestibulum tellus. Cras dignissim at lacus in porta. Nunc a vulputate quam, eu pulvinar ex. Sed vitae leo sit amet justo varius varius vel sed elit. Sed viverra orci non erat ultricies, vel tristique magna tincidunt. Aenean viverra ligula ligula. Vestibulum malesuada, eros sed varius aliquam, magna purus laoreet tortor, non tempus dui erat sit amet nunc. Proin accumsan nulla mattis lorem congue dignissim. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Ex ==== Morbi est ex, dictum ac neque nec, iaculis lobortis lacus. Cras sit amet consectetur est, vitae condimentum eros. Maecenas non sapien ligula. Nam laoreet eget eros in blandit. Quisque hendrerit velit at nisl tincidunt volutpat. Phasellus ac felis nisi. Proin mattis ante ac magna porta placerat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. == In nullam == In leo velit, lacinia in ligula quis, semper maximus dui. Pellentesque cursus congue dolor ut tristique. Fusce accumsan placerat facilisis. Vivamus pellentesque purus ut nisl laoreet accumsan. Nunc in mi vehicula leo ultrices sodales id ac dui. Fusce gravida at ante sed tincidunt. Maecenas at dui bibendum, condimentum tellus at, faucibus est. Donec molestie in est posuere aliquet. Donec id aliquam arcu, in cursus sem. === Nec === Nullam nec vulputate enim, quis efficitur libero. Mauris sit amet cursus sem, at ultrices metus. Duis sit amet aliquet diam, eget faucibus neque. Duis consequat rutrum auctor. Proin ullamcorper vehicula ex sed finibus. Nulla efficitur sem non eros varius dapibus. Maecenas posuere tortor at tempus dignissim. Nunc varius in dolor ut interdum. Morbi imperdiet urna in felis congue pellentesque. Donec dictum a quam nec venenatis. Nam id vestibulum ipsum, nec elementum orci. Quisque dignissim tincidunt dolor, et maximus augue bibendum eget. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam interdum placerat scelerisque. Nam tristique varius tempus. == Maecenas aliquam vivamus quisque aenean == === Id erat et === Maecenas id elit felis. Maecenas felis velit, aliquam volutpat felis non, efficitur elementum purus. Donec lobortis ultricies vehicula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget nisl viverra, dapibus nisl consectetur, venenatis nisi. Sed et turpis gravida, dignissim mauris ut, faucibus elit. Sed viverra quam id magna lacinia, id congue tellus luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque sodales ac leo sed iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras hendrerit, magna mattis tempus laoreet, augue nunc vehicula odio, vitae dapibus erat leo nec enim. Phasellus vel ex arcu. Sed ut fringilla augue. Aliquam erat volutpat. Nulla suscipit lectus metus, nec aliquet diam lobortis id. Aenean et mattis diam, in molestie lectus. Curabitur faucibus enim semper lectus molestie, a tincidunt nisl efficitur. Vestibulum tortor sem, mattis sit amet semper at, cursus ut arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam ut mi ut neque egestas varius. Nam sollicitudin finibus dapibus. Sed cursus iaculis mi in sagittis. Vestibulum cursus eros a blandit hendrerit. Cras vitae efficitur nisi. Suspendisse eu odio vel sapien consectetur condimentum. Integer rutrum ullamcorper ligula tincidunt varius. Praesent nec pellentesque massa. Phasellus nec fringilla nunc. Mauris finibus purus non vulputate tempus. ==== Tellus ==== Vivamus et tellus massa. Morbi fringilla sapien eu felis luctus vehicula. Duis arcu dolor, fermentum quis gravida et, imperdiet id urna. Maecenas turpis elit, ultricies nec purus eu, egestas ornare nunc. Pellentesque sagittis, lectus a semper dignissim, mi ipsum pulvinar eros, in viverra urna sapien ac nibh. Fusce ex ipsum, pulvinar eu purus nec, viverra pellentesque lectus. In sodales varius lectus, ut faucibus massa suscipit sed. Integer dictum, leo tempus sagittis varius, augue quam feugiat elit, sit amet iaculis turpis quam eget neque. Cras elit arcu, volutpat eget tempus vitae, ultricies sit amet sem. Nullam eu molestie quam. Nullam non velit vel dolor ultrices elementum quis id velit. Sed et ligula mauris. Ut libero lacus, viverra vel faucibus sit amet, varius sit amet mauris. Morbi ultrices facilisis pulvinar. Donec dictum risus sit amet leo tristique porta ut sed nisl. === At posuere === Quisque at tellus posuere, posuere orci vitae, consequat velit. Ut nisl nisl, consequat at posuere in, pulvinar id ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi nisi justo, posuere vitae mi a, feugiat faucibus ex. Aenean eu odio felis. Vestibulum eros metus, accumsan nec risus ut, facilisis finibus nibh. Pellentesque bibendum id urna sed tempus. Sed in ornare orci. Aliquam cursus condimentum mollis. Aenean tempor venenatis quam in condimentum. Pellentesque id elit in eros eleifend malesuada vitae ac magna. Sed vel est sit amet mi porttitor consequat quis id purus. Maecenas sit amet eros tristique, pellentesque tortor ac, fringilla dolor. Aenean posuere nunc ac ipsum blandit venenatis. Ut vestibulum felis non lectus vestibulum, et tincidunt lacus vehicula. Vestibulum aliquet quis justo et fermentum. Sed sed enim lobortis lacus fermentum pretium. Proin consequat velit non dolor eleifend, nec maximus dui mattis. Donec pellentesque leo arcu, eget vestibulum velit varius in. Aenean et viverra urna, feugiat faucibus ligula. Suspendisse efficitur commodo mi, tristique bibendum velit vehicula nec. Duis iaculis non risus ut ornare. == Vivamus nunc nulla nunc == === Dictum commodo === Vivamus dictum nisi ac quam fringilla sagittis. Vestibulum augue felis, gravida ac blandit ac, faucibus congue turpis. Integer fringilla lacus lectus, nec egestas sapien vestibulum vitae. Curabitur eu nibh malesuada, dapibus est vitae, sagittis mi. In est tortor, pulvinar at aliquet in, suscipit dignissim ipsum. Suspendisse dignissim ligula vel bibendum aliquam. Nam quis rutrum odio. Quisque sagittis nibh vitae lorem accumsan consequat. Morbi congue malesuada suscipit. Curabitur in luctus diam. Duis tempor et leo sed euismod. Etiam lacinia vehicula ligula sit amet pulvinar. ==== Sit ==== Nunc commodo sit amet mauris sit amet pretium. Nam venenatis eu dui sit amet hendrerit. Vivamus ac enim porta, tempor arcu at, venenatis neque. Donec quis urna in nisl molestie tincidunt. Morbi finibus vitae ex a posuere. Proin condimentum dignissim tempus. Suspendisse rutrum diam massa, non aliquet lacus maximus non. Nulla lorem neque, scelerisque eget velit non, consequat condimentum sem. Aenean vel odio erat. Cras aliquam in quam vehicula tristique. Phasellus aliquam lacinia fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc vestibulum congue magna, ac congue diam suscipit in. === Cursus porttitor === Nulla cursus ornare tempus. Duis tempor ligula risus, a placerat dolor bibendum eleifend. Duis id rutrum eros, eget ultricies mi. Duis vitae quam magna. Aliquam sollicitudin, felis sit amet viverra condimentum, odio libero commodo mi, id accumsan neque lacus sit amet tellus. Nunc facilisis eget sem sed pharetra. Pellentesque tempus tincidunt libero quis mattis. Vivamus consectetur finibus libero eget malesuada. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Varius ==== Nunc porttitor varius nisi molestie tristique. Vivamus accumsan mi eu metus consectetur, id gravida risus luctus. Donec ullamcorper malesuada placerat. Mauris varius ante scelerisque, laoreet lacus vitae, ullamcorper ipsum. Integer non sodales massa. Aliquam ac fermentum massa. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum vitae risus ultrices, volutpat urna eget, semper urna. Sed faucibus turpis in turpis congue, id laoreet ante tincidunt. Nulla sit amet ante blandit, pellentesque ante quis, feugiat enim. Sed tristique venenatis vehicula. Sed vel tellus et orci facilisis cursus vel nec quam. Ut vitae ipsum ante. Aliquam sit amet molestie mi, ut vestibulum risus. Donec ac lacus mauris. == Maecenas aliquam nulla proin vestibulum phasellus == === Pharetra nec sollicitudin === Maecenas pharetra auctor sem a aliquet. Donec fringilla eleifend quam vitae euismod. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas luctus nisi quis lectus vestibulum tempor. Donec dapibus sem mauris, non rhoncus neque rutrum id. Nunc sollicitudin sollicitudin enim. Aliquam vitae massa velit. Cras nibh est, rhoncus euismod faucibus sit amet, finibus vel tortor. Morbi scelerisque urna mi, ut suscipit sem iaculis eu. Quisque in lorem diam. Sed eget leo condimentum, ultrices ex eget, iaculis tortor. Cras convallis erat at leo lacinia laoreet. Praesent mattis accumsan pharetra. ==== Diam at ==== Aliquam nec diam risus. Pellentesque eu dui eros. Donec faucibus maximus egestas. Nam pulvinar suscipit nisi sit amet luctus. Proin gravida eleifend ex id placerat. Maecenas iaculis felis ipsum, ac rutrum nulla cursus nec. Vestibulum laoreet arcu in nibh vehicula congue. Suspendisse ac porttitor nisi. Sed fermentum nibh lacus, sit amet tincidunt orci mattis nec. Aliquam auctor turpis quis malesuada lacinia. Nam tempor tortor sem, sit amet semper nisi molestie at. Praesent at rhoncus dolor. Vestibulum a lacus eu dolor malesuada hendrerit a vitae elit. In vel pellentesque mauris. Cras ac quam et sem ultricies tincidunt. Nulla sollicitudin at sapien nec tempor. Sed mollis quis augue id faucibus. Integer eget pharetra metus. Donec vel ullamcorper purus. Cras elit est, porta quis tincidunt vestibulum, facilisis at est. Ut semper porttitor erat, vitae lacinia tellus scelerisque eu. Fusce massa tellus, consectetur quis neque vitae, viverra eleifend ipsum. Nam sed congue neque. Nulla imperdiet justo eget lacus elementum malesuada. === Vitae laoreet ac === Proin vitae metus enim. Cras feugiat ornare erat, sed efficitur leo sodales in. Quisque dictum et leo at tincidunt. Curabitur non lacus ut turpis suscipit interdum sit amet eget metus. Donec quis ante justo. Mauris faucibus, lorem ornare porttitor posuere, ante nibh ullamcorper arcu, vel finibus orci elit vel erat. Nunc leo erat, sagittis et tincidunt id, dapibus nec risus. Ut et nunc scelerisque, varius quam eget, auctor nisl. Ut quis augue in diam dapibus malesuada nec vitae elit. Cras viverra fermentum quam non auctor. ==== Dui ultricies ==== Vestibulum laoreet dui sit amet rutrum posuere. Aliquam aliquam elementum turpis, sit amet tincidunt leo efficitur non. Sed nec mauris aliquam massa congue tempus tempus non quam. Quisque tincidunt tellus at augue suscipit vulputate. Nam augue nisi, consectetur ac tempor et, ultrices sit amet est. Fusce eu urna eget nisl rhoncus vulputate. Nulla facilisis augue sit amet augue fermentum finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. In volutpat enim quis nisi interdum, in semper nulla luctus. Suspendisse interdum ut odio nec rhoncus. Curabitur quis enim sodales, iaculis quam vitae, iaculis magna. Suspendisse potenti. Sed feugiat pulvinar facilisis. Praesent lorem nibh, mattis eu felis id, rutrum condimentum sapien. Phasellus ac ultricies turpis, sed vulputate erat. Curabitur sed lorem eget sem ultricies sodales quis a mi. Aenean justo nibh, varius eu magna non, vehicula porttitor lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla egestas nisi tellus, et consequat velit molestie non. Sed convallis augue ut lectus venenatis rutrum. Vivamus ultricies auctor nulla, faucibus ultricies lacus sodales ac. In vel erat porttitor, cursus leo ut, bibendum diam. Nam vel augue a elit sodales euismod. Aenean vel scelerisque nisl. Donec sed orci nec nibh porttitor tempus ut ut velit. == Fusce in nunc nunc == Fusce iaculis fringilla diam, id condimentum ante tincidunt sed. Nunc sollicitudin vitae nibh et venenatis. Integer in ex sit amet dolor volutpat vehicula sit amet at augue. Curabitur efficitur pharetra interdum. Nunc euismod volutpat magna, et elementum sem lacinia ac. Sed eu magna feugiat justo vulputate posuere ac ac mi. Pellentesque eu dictum leo, facilisis ultrices ligula. Maecenas tincidunt laoreet odio. Donec maximus risus eget risus malesuada, id tincidunt lacus malesuada. Curabitur non imperdiet leo. Duis vel convallis enim. Pellentesque tristique sem at nibh pharetra, vel aliquet neque suscipit. Aliquam dolor mauris, placerat a bibendum a, sollicitudin sollicitudin erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur nec est in erat ultricies facilisis. Curabitur eget vestibulum leo. === Vitae viverra aliquam === In vitae sodales neque, in commodo neque. Sed sollicitudin auctor metus et iaculis. Nam ultricies sagittis vehicula. Nulla iaculis fringilla elit at interdum. Donec at tortor faucibus, imperdiet nulla vitae, vestibulum purus. Mauris sed ullamcorper ante, eget imperdiet nibh. Duis sit amet urna leo. Curabitur egestas nibh ut laoreet elementum. Mauris tincidunt leo arcu, eu pharetra felis mollis at. Donec lacus erat, egestas et egestas lobortis, lobortis sed leo. Nunc viverra libero elementum ligula maximus, ut congue enim sagittis. Fusce et est diam. Sed facilisis odio eget sem mattis sagittis. Integer tincidunt orci vitae libero porta ullamcorper. Nunc mauris lorem, lacinia in mollis sit amet, malesuada nec elit. Proin aliquam sapien in dolor tristique, pulvinar volutpat lectus aliquam. Phasellus consequat ullamcorper massa at porta. Integer et pellentesque ante. Duis ac dolor ipsum. Donec sagittis magna eget ex lobortis consequat. Phasellus consectetur tortor volutpat diam cursus vehicula. In in efficitur ligula. Nunc aliquam vitae est quis bibendum. Phasellus porttitor lectus vitae egestas rutrum. In vel imperdiet libero. Ut eget mattis ante, eget ultricies mauris. Nulla vestibulum faucibus metus sed bibendum. Integer facilisis dapibus elit ut cursus. Nullam iaculis tempus ante non commodo. Nullam placerat feugiat elit. Proin cursus nisi turpis. Etiam sit amet urna nec ligula commodo tempus. Fusce venenatis velit vitae arcu porta, sed eleifend neque egestas. Morbi sit amet nunc a lacus mattis luctus. Proin eget dolor sodales risus lobortis tempor. Etiam vulputate finibus neque. Phasellus non felis eget ligula auctor varius. Fusce enim mauris, vestibulum eu cursus id, suscipit id nisi. Sed magna leo, eleifend sed ultrices nec, efficitur eu ex. Ut sit amet egestas sapien, a viverra velit. Duis sit amet neque nec odio commodo sollicitudin. Nam elementum tincidunt varius. Quisque imperdiet finibus quam a sagittis. Duis vel enim sed ligula accumsan ullamcorper. Proin sit amet augue ac risus vestibulum porttitor. Vestibulum et lorem dictum, eleifend sapien a, elementum sem. Pellentesque vel odio hendrerit, congue enim at, tincidunt quam. Suspendisse at bibendum nunc, a malesuada risus. Donec tempor felis quam, sit amet interdum odio dignissim at. Pellentesque nec semper odio, in condimentum libero. Quisque sed tellus facilisis, fringilla turpis vel, pulvinar mi. Sed feugiat pretium orci, sit amet dignissim lorem cursus sit amet. In hac habitasse platea dictumst. Nullam maximus ex sit amet erat mattis, at sodales turpis molestie. Nam maximus eros est, sed mollis libero ullamcorper eu. Vivamus porttitor at orci vel scelerisque. Nullam finibus purus quis ex pharetra, vitae porta nisi scelerisque. Aliquam posuere ullamcorper dui sed luctus. Praesent vulputate eget enim eu feugiat. Curabitur suscipit diam erat, in facilisis nisi scelerisque at. Cras nec libero ut sem condimentum iaculis. Integer vitae imperdiet metus. Nulla aliquet felis vitae pulvinar egestas. Quisque mattis nunc augue, ut dignissim elit luctus vel. Pellentesque consequat blandit euismod. Fusce rutrum accumsan lacinia. Nunc efficitur, nibh eu porttitor vehicula, tortor est luctus augue, a sollicitudin elit sem vel ante. Nullam dapibus nisl odio, ut molestie eros vestibulum quis. Donec hendrerit, urna vel accumsan imperdiet, odio neque aliquam velit, et dictum magna nisi a risus. Proin iaculis tortor sagittis arcu placerat, sed tempor enim pulvinar. Morbi vitae vulputate nulla, id condimentum nibh. Suspendisse mollis tortor felis, vel bibendum elit malesuada vitae. Aliquam consequat, velit nec ornare gravida, nisl justo bibendum tellus, ut cursus urna lacus quis nulla. Sed gravida vestibulum elit nec sollicitudin. Sed vitae vestibulum ex, a malesuada massa. Vestibulum lacinia lacinia fringilla. Pellentesque nec ultricies enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sit amet lectus elit. Phasellus neque risus, blandit id finibus vel, ullamcorper vitae nibh. Phasellus sem odio, volutpat et sapien at, viverra scelerisque lorem. Integer nec maximus ipsum. Suspendisse a magna bibendum, molestie turpis non, placerat tellus. Nunc ut purus non tellus ultricies finibus in vel ipsum. Sed at aliquet arcu. Etiam tincidunt ullamcorper turpis vitae pellentesque. Quisque quis nisl tortor. Curabitur sed dictum metus. Ut iaculis magna sodales velit malesuada, eget auctor ipsum fermentum. Aenean molestie tortor sit amet orci molestie convallis. Sed eleifend est nec felis vestibulum, vitae cursus enim ultrices. Morbi sagittis sed nisi sed accumsan. Donec at faucibus libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pretium dui ut risus mollis, a molestie ligula euismod. Curabitur eu erat pharetra, rutrum tortor vitae, dignissim dui. Maecenas viverra egestas turpis ut faucibus. Pellentesque aliquam fermentum tortor eu hendrerit. Sed metus mauris, dictum ac aliquet aliquam, malesuada at tortor. Donec venenatis libero sed mauris mollis suscipit. Maecenas consectetur eleifend rhoncus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Duis hendrerit commodo velit id varius. Aenean ut tincidunt tortor. Phasellus ut laoreet turpis. Nulla scelerisque est a tincidunt eleifend. Praesent nec fermentum nisi. Donec suscipit lacus at sagittis aliquam. Ut elit magna, interdum at commodo a, sagittis vel leo. Vestibulum aliquet est efficitur ligula pellentesque posuere. Sed vel aliquam libero, a tempor ligula. Praesent commodo, diam non ullamcorper gravida, ligula magna placerat velit, ut condimentum lorem nunc at tellus. Nunc cursus lorem sed ipsum dapibus sodales. Donec venenatis efficitur est nec lacinia. Etiam semper, lacus elementum aliquam sagittis, dui mauris mattis turpis, vitae mattis augue erat ut est. Fusce a tortor lectus. Morbi sed dui a arcu mattis finibus rutrum vel odio. Aenean eleifend faucibus leo, at condimentum nisi euismod at. Fusce pulvinar ante in odio aliquam, at lacinia nisi viverra. Fusce urna leo, pharetra eu malesuada quis, sollicitudin at lectus. Donec at neque rutrum, volutpat leo dictum, hendrerit tellus. Ut aliquam, quam nec malesuada imperdiet, tortor sem pharetra massa, quis tempus eros tortor vel libero. Phasellus in erat enim. Nunc at dapibus leo, id auctor massa. Proin et augue ante. Phasellus semper fringilla tortor nec cursus. Sed vehicula ex dignissim, blandit nibh at, tristique mauris. Nulla eu nisl vel elit mattis imperdiet. Nam euismod viverra condimentum. Duis et scelerisque diam. Curabitur imperdiet enim arcu, at elementum arcu venenatis ac. Vivamus venenatis arcu eu orci consectetur, a suscipit lacus tristique. Fusce vel lorem elementum, sollicitudin ipsum ut, interdum augue. Sed convallis varius velit, pretium volutpat odio venenatis eu. Sed id euismod augue. Duis volutpat, elit sed auctor eleifend, orci lectus iaculis mi, vel porttitor erat quam a augue. Etiam in mi consectetur, vehicula nunc sed, aliquam justo. Phasellus suscipit bibendum tellus nec pulvinar. Nulla vulputate in libero in rutrum. Sed egestas eros nec ex aliquam, eget porta ligula euismod. Duis vitae erat non erat ornare facilisis quis eu justo. Nunc et mi a magna pretium eleifend eget pretium est. Nulla vel consectetur ante. Integer non dui a nisl tincidunt auctor. Phasellus quis ex magna. Phasellus sollicitudin tellus et aliquet facilisis. Aliquam arcu orci, lobortis in turpis vel, pulvinar vehicula ligula. Praesent tortor purus, faucibus quis tortor ut, luctus consectetur neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam sed turpis ac mi vestibulum finibus. Maecenas ullamcorper accumsan velit, sed porta neque tempor ornare. Praesent blandit ultrices lorem vel imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras feugiat luctus felis eu aliquet. Ut quis pellentesque diam, eget facilisis augue. Curabitur a est eu ipsum lobortis ultrices eget at erat. Curabitur venenatis convallis velit sed mollis. Morbi congue luctus quam, non semper nisi dignissim quis. Aenean eleifend enim ultrices nunc ullamcorper porta. Integer magna felis, vestibulum a suscipit a, pharetra ut leo. Sed eget magna non purus gravida feugiat. Morbi feugiat lorem orci, ac commodo orci viverra ut. Vivamus euismod felis at dolor accumsan fringilla. Nullam ut massa sed turpis imperdiet tempus et non quam. Sed ut urna vel risus tempus finibus. Nulla ut metus iaculis, molestie arcu id, tempor libero. Nam laoreet non nisl ut iaculis. Praesent aliquam mauris velit. Maecenas fermentum vulputate tincidunt. Suspendisse vitae ante a turpis hendrerit pellentesque vel eget tortor. Mauris fermentum nibh leo, ac tristique tellus ultricies a. Integer venenatis, ligula iaculis efficitur eleifend, justo turpis finibus tortor, eget accumsan nulla orci non eros. Etiam dictum ipsum ac dui commodo vehicula. Vivamus vel ultrices leo, quis tempus urna. Aenean finibus felis lacus, at iaculis erat tempor a. Etiam nec cursus diam, nec tincidunt dolor. Sed hendrerit faucibus turpis eget blandit. Donec a nunc id quam faucibus semper. In non blandit urna. Vivamus consectetur quis nunc eu lobortis. Aliquam consequat mauris at lorem venenatis, a rhoncus sapien facilisis. Cras nisl nulla, tincidunt consectetur elit eget, pretium vestibulum massa. Integer vitae nisi sit amet purus aliquam ultricies sit amet sit amet elit. Proin vel lorem ipsum. Praesent a dui dolor. Nullam eu blandit felis. Maecenas massa quam, venenatis sed lorem vel, accumsan sollicitudin nisl. In accumsan dapibus quam non gravida. Praesent pellentesque est libero, nec accumsan erat venenatis id. Morbi sagittis posuere tortor, sit amet fringilla sapien iaculis in. Nulla facilisi. Morbi urna purus, sollicitudin ut bibendum vitae, congue non nibh. Aliquam orci quam, tincidunt in bibendum ut, congue quis tortor. Proin varius, dolor id semper tincidunt, leo tortor ullamcorper dui, et pharetra mi nisl id nulla. Quisque eu egestas elit. Integer elementum condimentum lacus, id venenatis sem dictum quis. Phasellus sed posuere ante, at vehicula dui. Sed nec semper tortor, vitae mollis ante. Quisque turpis eros, tempus vel egestas a, dapibus vitae justo. Praesent magna augue, pharetra eu velit et, sagittis pellentesque sapien. Duis suscipit egestas risus a sagittis. Proin mattis lacus eu lorem fringilla congue. Proin aliquam gravida enim, sed feugiat metus malesuada id. Pellentesque rhoncus quam sem. Fusce et quam cursus, sodales dui ac, commodo tortor. Cras quis urna at sapien vehicula vulputate vel at ex. Ut iaculis mauris nec rutrum rhoncus. Suspendisse dapibus, erat in bibendum fermentum, nunc diam rutrum lacus, non varius tellus libero et tortor. Nullam vel lacus non neque condimentum commodo convallis at sapien. Aenean ornare pellentesque nibh ut pellentesque. Cras ligula massa, rhoncus nec accumsan vitae, fringilla pretium ante. Quisque sit amet velit dignissim, ullamcorper justo quis, euismod neque. Vivamus ac finibus neque, vel volutpat eros. Duis luctus at tortor sed fringilla. Donec vitae ante non nibh tristique viverra non id odio. Morbi tincidunt bibendum vestibulum. Aliquam erat massa, lacinia et bibendum in, aliquam quis elit. Pellentesque ut purus leo. Aenean fermentum ipsum ut neque varius interdum. Sed vitae malesuada nisl. Pellentesque volutpat, neque eget mattis pellentesque, quam justo viverra nulla, vel gravida felis tortor vel dui. Phasellus sit amet eros id arcu eleifend fringilla. Nam rhoncus erat lacinia magna iaculis placerat. Suspendisse convallis consectetur ante ac finibus. Duis ultricies commodo diam, et tempus metus aliquam non. Vestibulum et aliquet arcu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque suscipit mauris id elementum eleifend. Praesent consectetur est eu metus porta scelerisque. Donec tincidunt tellus ut condimentum ornare. Sed interdum arcu eget tristique sollicitudin. Nam sit amet orci id sapien condimentum bibendum at euismod magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus tincidunt lacus a gravida mattis. Nam commodo sem ut justo porttitor tristique. Sed tincidunt lacinia mauris sed dapibus. Suspendisse vel nunc vitae odio ultricies interdum. Nulla id lobortis sapien, vel lacinia augue. In et aliquet ligula, nec dignissim nisl. Fusce eget semper ipsum, a venenatis sapien. Aenean nec commodo nibh. Suspendisse commodo lectus iaculis justo vehicula, vitae imperdiet purus lacinia. Integer tincidunt neque id enim sollicitudin tempor. Sed viverra volutpat velit id sodales. Fusce eget fermentum tellus, eget malesuada tortor. Quisque dolor tortor, vestibulum in lectus eget, elementum egestas ex. Quisque malesuada commodo orci, sit amet dapibus nisi lobortis nec. Curabitur eleifend, metus a mattis eleifend, arcu lacus ornare metus, a finibus enim nisl et libero. Fusce vehicula vitae sapien sed rutrum. Proin magna magna, volutpat ac lectus eget, tempus posuere magna. Nulla condimentum volutpat orci, placerat aliquam metus porttitor quis. Nullam quam orci, feugiat id purus sed, suscipit bibendum nibh. Sed nisl urna, cursus in finibus bibendum, sodales ac urna. Sed vitae bibendum justo. In cursus et est vel cursus. Integer viverra massa sed hendrerit tincidunt. Donec et dolor sed augue eleifend mattis sed in nulla. Ut laoreet enim augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec at mi molestie, aliquam ex eget, interdum orci. Proin porta leo vitae est tristique, eget rutrum est aliquam. Proin porta pulvinar nunc, sit amet pellentesque libero pulvinar eget. Vivamus et tincidunt ex. Donec a eros placerat tellus ultricies dignissim vitae non tellus. Proin dapibus ornare libero, eu blandit mi blandit et. Praesent rhoncus et eros in suscipit. Proin id efficitur lectus. Nullam mollis odio semper, bibendum lectus quis, venenatis erat. Phasellus sed ultrices purus. Integer ultricies iaculis lorem id interdum. Proin sed nisl quis neque ultricies facilisis sit amet non lectus. Donec mattis risus lectus, ac elementum erat scelerisque non. Nulla ac leo malesuada, sodales eros pellentesque, pulvinar leo. Nulla at nunc nibh. Vestibulum consectetur lectus eu ultricies porttitor. Donec consectetur vestibulum malesuada. Phasellus a erat non elit egestas aliquet. Phasellus a nibh id dui rhoncus aliquam. Etiam aliquam magna tellus. Cras sit amet vulputate risus. Maecenas enim urna, blandit nec augue vitae, congue dapibus turpis. Fusce porttitor mauris at efficitur sodales. Donec ex felis, vehicula a sapien a, viverra pellentesque felis. Nunc iaculis suscipit sem, a auctor sapien aliquet vel. Quisque lobortis augue sed malesuada lacinia. Aenean venenatis feugiat vestibulum. Vivamus posuere dui urna, vel scelerisque ex pretium sed. Duis quam mauris, congue vitae tellus in, malesuada posuere ipsum. Praesent consequat orci eget velit tristique, non ultrices nisi lobortis. Aliquam massa felis, interdum pulvinar leo ut, eleifend vestibulum magna. Nam lacinia pharetra ultrices. Maecenas pulvinar malesuada consectetur. Etiam venenatis tempus lectus. Nulla a tincidunt tortor. Donec pretium pellentesque tincidunt. Cras nec neque eu arcu convallis porttitor. Phasellus dolor metus, egestas convallis lacus eu, mollis posuere nulla. Aliquam a eleifend tellus, eget congue metus. Donec libero enim, pellentesque sed enim at, tristique euismod nunc. Donec fringilla lectus a efficitur scelerisque. Suspendisse pretium nulla imperdiet ex faucibus, a viverra velit euismod. Nam eget eros non purus volutpat egestas. Nullam consectetur ac nunc in feugiat. Vivamus a imperdiet ante. Aliquam tempus, felis ut auctor efficitur, turpis mauris egestas arcu, feugiat malesuada velit felis a magna. Nulla in turpis sit amet dui dignissim sagittis. Pellentesque eget urna lectus. Maecenas eu fringilla libero. Ut hendrerit libero faucibus tellus dapibus, non semper neque varius. Sed eget venenatis sapien, quis finibus orci. Sed tincidunt pellentesque placerat. Cras vel est ornare, ultrices lacus nec, pharetra ex. Mauris sit amet nulla vitae nisl tristique dignissim rutrum at tellus. Nam molestie vestibulum nisl sit amet euismod. Sed cursus pellentesque varius. Sed bibendum libero sit amet elit placerat, id commodo mauris facilisis. Nunc tincidunt, libero sed accumsan condimentum, lorem ligula pellentesque ex, vitae pretium mauris nibh non libero. Vestibulum non elementum lacus, sed fermentum lorem. Sed molestie pharetra neque. In euismod sit amet tellus sit amet viverra. Nullam ornare bibendum mollis. Ut eget fermentum mauris, eu efficitur metus. Sed varius euismod nulla. Proin pulvinar justo mauris, nec auctor lorem tincidunt non. Quisque sit amet aliquet nunc. Duis quis nisl ut nibh semper aliquet non vitae neque. Ut faucibus nibh ut arcu condimentum, eu suscipit nulla mollis. Morbi nec neque egestas, egestas sem et, fringilla augue. Etiam pharetra, magna et lobortis scelerisque, lacus nisi gravida metus, volutpat dignissim lorem elit ac metus. Fusce nec enim in nunc blandit fermentum eu eu mauris. In quis aliquet leo. Duis risus felis, mattis vitae lobortis a, lobortis et erat. Donec semper turpis metus, sit amet vestibulum tortor dictum vitae. Sed pretium cursus nulla. Nullam pellentesque vitae est et vulputate. Aliquam lorem est, congue elementum maximus a, lobortis a nibh. Sed ac porta velit. Curabitur rhoncus scelerisque risus nec viverra. Duis condimentum quam ac tortor dictum posuere. Mauris ullamcorper elementum efficitur. Fusce dapibus consectetur velit, vitae eleifend dolor elementum nec. Duis pulvinar interdum posuere. Nunc augue magna, fringilla eu odio in, consequat laoreet augue. Vestibulum ut sem condimentum, tempus metus vitae, ullamcorper est. Vestibulum nunc nulla, faucibus placerat mi sed, congue posuere felis. Curabitur nec ornare felis, quis vehicula risus. Praesent tristique urna ut malesuada semper. Donec quam tellus, fringilla nec efficitur ac, mattis nec nisl. Aliquam convallis, dui sit amet consectetur tempor, magna ante lobortis elit, nec cursus ex arcu eu dolor. Nullam sagittis leo nec purus auctor imperdiet. Nam maximus tempor sem vel lobortis. Pellentesque feugiat purus venenatis neque tincidunt, eget imperdiet risus condimentum. Cras sed tempor est. In augue mauris, consectetur vel erat at, tempus scelerisque lacus. Sed gravida urna eget enim laoreet tempus. Vestibulum pellentesque cursus tellus, semper fermentum arcu sollicitudin quis. Nulla non placerat ex, interdum tincidunt turpis. Integer eu lorem at nunc sollicitudin finibus eget id sapien. Donec aliquam dolor augue, eget maximus eros auctor id. Pellentesque et est ac odio dignissim dapibus. Vestibulum nec tellus facilisis, dictum turpis vel, cursus ante. Vivamus bibendum tortor semper, consequat mauris ut, ullamcorper arcu. Vivamus non dui in augue rhoncus aliquam. Quisque eget quam velit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus vitae pretium magna, facilisis mollis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus dictum diam, lobortis aliquam mi pulvinar et. Nunc ornare, odio a blandit aliquet, dolor massa blandit dui, vitae lobortis odio ligula bibendum mauris. Sed molestie, ante vitae fringilla vulputate, felis metus euismod nulla, nec ultrices arcu lectus ac nibh. Etiam ac nisi a nisl consequat vestibulum quis ut eros. Donec elit ligula, lacinia in maximus non, aliquam ut massa. Sed vitae diam hendrerit, commodo dui et, facilisis sapien. Maecenas erat urna, consequat a tempor vitae, gravida in lectus. Ut maximus sollicitudin sem id dapibus. Nullam id dolor tortor. Aliquam erat volutpat. Proin nec tristique ante. Ut finibus felis ac dapibus malesuada. Nunc egestas molestie urna ac placerat. Vestibulum tempor nec urna sit amet finibus. Quisque consequat convallis sem, quis consectetur lectus blandit non. Etiam risus metus, feugiat at eleifend eu, mattis quis quam. Integer sit amet tempus orci. Cras in lacus non enim rhoncus consectetur. Pellentesque rhoncus in metus id dictum. Nulla sed lectus felis. Morbi est quam, vestibulum ut fermentum vel, aliquam eget tortor. Praesent ut finibus enim, nec congue risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris dictum velit at massa sagittis, a vulputate arcu lobortis. Etiam felis elit, tempor id lacinia sit amet, malesuada in sapien. Donec lacus augue, pulvinar eget augue quis, finibus convallis mauris. Phasellus lorem augue, ultricies sit amet auctor a, maximus eu urna. Cras vel felis quis neque fringilla accumsan. Curabitur magna tortor, varius nec nisl at, sagittis aliquam magna. Aliquam id nunc semper, efficitur lorem eu, pharetra purus. Nulla sed vulputate massa. Nam blandit purus quis lectus molestie, venenatis bibendum velit cursus. Suspendisse varius orci et nunc mollis, vitae vestibulum leo lacinia. Ut imperdiet ut odio vel tempor. Nulla ante nunc, vulputate nec interdum nec, interdum id ligula. Duis ullamcorper est eu velit bibendum egestas. Proin lacinia metus dolor, id imperdiet nulla scelerisque et. Fusce varius augue tristique mauris congue, sit amet feugiat nibh ultricies. Proin ornare, felis a vehicula elementum, sem nunc porta ante, at pretium libero massa cursus mi. Morbi sem sem, pellentesque ut quam nec, mattis consectetur quam. Fusce sit amet lobortis felis. Suspendisse est ante, dictum vel malesuada vel, vulputate et purus. Suspendisse vitae ultricies enim. Nunc mollis blandit eleifend. Donec dapibus congue aliquam. Duis purus sem, porta vel purus ut, rhoncus eleifend ante. Morbi finibus faucibus augue vel laoreet. Vestibulum quis pellentesque turpis, eget molestie ex. Pellentesque sed lorem non augue congue placerat. Nullam finibus egestas quam, quis maximus est pulvinar sed. Praesent nec orci sem. Vivamus ullamcorper tincidunt molestie. Nunc sit amet ornare libero, et blandit ante. Vestibulum tempor ac ligula ut venenatis. Nunc enim sem, rutrum id elementum gravida, dapibus in massa. Nunc risus est, dictum eget mattis ac, faucibus vel ipsum. Cras vulputate porta lobortis. Praesent consequat consectetur libero, et hendrerit dolor cursus id. Nulla felis nunc, lacinia non pellentesque eu, dictum maximus ligula. Donec vel elit id quam lobortis ornare. Vivamus a augue vitae ex vulputate dignissim. Nam tempus magna et purus porttitor fermentum. Sed in finibus eros. Nam quis tortor ac tortor vehicula elementum vel a orci. In hac habitasse platea dictumst. In dictum orci commodo nunc gravida, eget porta neque tempus. Ut laoreet risus non ullamcorper semper. In euismod id diam ac tristique. Cras nec risus aliquet, fringilla tellus ut, imperdiet dolor. Pellentesque at lobortis turpis, convallis pretium risus. Curabitur non nisl ante. Curabitur at ex eget nulla eleifend gravida sed id libero. Quisque feugiat semper lacus, in dapibus lacus fringilla ac. Aliquam feugiat, nulla aliquet euismod pellentesque, erat libero sodales arcu, ut commodo nulla nibh egestas augue. Aliquam bibendum pellentesque diam eu luctus. Vivamus blandit urna magna, sit amet ullamcorper mi interdum vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla non nisi eget turpis consectetur fringilla. Donec mattis, nunc nec viverra varius, neque arcu pellentesque est, vitae egestas risus urna ac metus. Pellentesque ornare volutpat facilisis. Maecenas congue dignissim neque, ut bibendum orci hendrerit in. Etiam efficitur nisi mattis nibh faucibus mattis. Duis vel diam at tellus semper eleifend. Vivamus nec nibh facilisis, cursus nisl eget, hendrerit enim. Nam ullamcorper lobortis metus nec auctor. Vivamus eget tortor nisi. Integer laoreet suscipit nisl id porta. Mauris quis vestibulum elit. Praesent tellus justo, volutpat eu porta at, hendrerit eget nisi. Curabitur nec nulla ac metus posuere aliquam vitae at felis. Donec a pretium purus. Phasellus ligula enim, ullamcorper at velit vitae, porta congue nisi. Etiam ac est eu metus sagittis ultrices. Ut facilisis congue lorem eget bibendum. Maecenas vestibulum suscipit dolor, non lacinia tellus blandit aliquet. Maecenas id posuere nibh. Donec sed tristique metus. Nullam elementum sollicitudin tellus, a volutpat est feugiat faucibus. Fusce consectetur nulla metus, id elementum ligula iaculis ut. Sed ac lectus elit. Nam sed leo porta, pellentesque dui sit amet, dapibus metus. Morbi facilisis egestas euismod. Sed sollicitudin, enim et feugiat ultricies, lectus nulla scelerisque risus, quis volutpat ante dolor condimentum felis. Curabitur vitae augue vehicula, malesuada lorem vel, hendrerit enim. Pellentesque dapibus interdum accumsan. In hac habitasse platea dictumst. Nullam dictum sodales volutpat. Nullam euismod nibh sit amet tortor interdum euismod. Nulla quis magna mollis, lacinia dui ut, pulvinar nisi. Aenean fermentum pellentesque nulla, in imperdiet quam egestas et. Ut consequat purus nisl. Praesent semper ac est non fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque tortor justo, semper sed est ut, pulvinar sagittis leo. Suspendisse consectetur rutrum pretium. Donec eu ligula purus. Ut elit nisi, pretium et vestibulum a, iaculis et nulla. Donec ullamcorper feugiat urna, accumsan pulvinar lorem. Aenean a vestibulum tortor. Cras facilisis sit amet arcu sed varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis congue feugiat tincidunt. Fusce et lacinia lorem, at elementum risus. Morbi faucibus scelerisque euismod. Proin ac sagittis ipsum. Vestibulum euismod auctor nisl et faucibus. Nulla aliquam, enim a mattis tristique, ipsum ligula efficitur enim, feugiat euismod justo tellus quis nibh. Phasellus ut tincidunt lorem. Praesent at tempus eros. Pellentesque hendrerit mauris at libero ultricies, maximus dapibus nibh porttitor. Vivamus ornare et mauris nec volutpat. Sed nibh lorem, tempor vitae pulvinar non, placerat id ipsum. Cras et ex ex. Proin suscipit nibh gravida sagittis fermentum. Sed tincidunt elementum convallis. Etiam tempor dictum ex, quis fringilla dui faucibus sit amet. Fusce maximus ultrices dui nec laoreet. Praesent vel sem in tortor ultrices pellentesque in et est. Quisque sagittis magna et velit suscipit pellentesque. Aenean nec mattis eros, et luctus libero. Phasellus quis tortor tincidunt, pellentesque mauris vehicula, tempor magna. Etiam quis commodo sem. Nullam id mauris magna. Pellentesque quis turpis a metus lobortis dignissim. Donec a neque semper, rhoncus erat nec, vestibulum justo. Proin laoreet erat sit amet augue pretium, sed auctor nisl consectetur. Proin feugiat, nulla eu pellentesque ullamcorper, urna orci aliquam eros, id consequat ex purus vel leo. Proin gravida nibh purus. Suspendisse augue nisl, bibendum eget mauris ut, hendrerit tempus sem. Nullam eget imperdiet metus, sit amet lacinia odio. Aenean congue suscipit libero suscipit efficitur. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed nec accumsan nibh, vitae convallis ligula. Etiam vehicula leo quis fermentum condimentum. Maecenas vehicula ultrices magna nec porttitor. Integer non tortor vel sapien efficitur volutpat quis in metus. In feugiat a lacus tempus gravida. Cras interdum sit amet odio sit amet sodales. Vivamus non mauris ligula. Pellentesque cursus sit amet libero sed consequat. Duis quis molestie nunc. Nullam eleifend arcu vitae rutrum hendrerit. Cras sit amet odio congue, lacinia justo vitae, efficitur nisi. Suspendisse pretium sodales mauris sed sollicitudin. Nulla sit amet facilisis erat, nec auctor diam. Donec eu ullamcorper diam. Integer laoreet urna varius vestibulum accumsan. Duis congue elit in vulputate consectetur. Quisque iaculis risus nisi, nec viverra est consectetur id. Sed bibendum et orci quis cursus. Quisque a euismod justo. In venenatis leo a bibendum tristique. Quisque a ex justo. In sagittis lorem sed massa mattis, non ultricies dui venenatis. Maecenas accumsan hendrerit quam ut imperdiet. Aenean ultrices finibus lorem ac posuere. Sed viverra pretium arcu. Nam eu turpis vel metus venenatis pharetra a a metus. Curabitur non elit lorem. Sed vestibulum sit amet tortor non venenatis. Phasellus suscipit dolor nunc, sed elementum nisl mattis in. Nullam dignissim interdum volutpat. Quisque luctus hendrerit nibh non posuere. Ut convallis quis justo rutrum cursus. Etiam semper interdum nisl eget efficitur. Quisque laoreet urna quis lacus mollis, quis ultricies urna volutpat. Cras a congue leo. Integer mattis, arcu quis ornare convallis, risus ante accumsan erat, id volutpat orci ligula in nulla. Aliquam nec mollis massa. Etiam et nulla quis augue facilisis viverra. Mauris in leo auctor, feugiat purus sed, ultricies lacus. Suspendisse imperdiet augue ut ligula pretium, in accumsan augue lobortis. Phasellus molestie convallis lobortis. Aliquam erat volutpat. Aenean ultricies leo nec justo semper laoreet. Sed vitae lorem fermentum turpis elementum sodales eu eget lectus. Aenean placerat, nibh non malesuada sagittis, diam sem dignissim tortor, lacinia tempus sem mauris sit amet urna. Cras hendrerit odio augue, quis dapibus turpis interdum ut. Vivamus in posuere lorem, sed consectetur augue. Integer blandit neque viverra, commodo nisi sit amet, placerat lorem. Praesent aliquam enim in pellentesque lobortis. Pellentesque non posuere enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eget orci lobortis, faucibus est ut, congue eros. Aliquam et ex in elit molestie eleifend a at odio. Quisque sit amet aliquam metus. Suspendisse potenti. Maecenas convallis ornare odio, a fermentum neque porttitor vitae. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec lacus diam, rhoncus at scelerisque nec, ornare in tellus. Fusce orci nibh, tempor at turpis quis, convallis malesuada felis. Praesent congue mattis tortor. Mauris malesuada, dolor in ultricies aliquet, velit dolor tempor dolor, quis commodo nisi enim eu nulla. Praesent auctor at nisl eget congue. Integer condimentum magna a magna facilisis, id pretium arcu varius. Pellentesque bibendum tellus in leo scelerisque, sollicitudin eleifend metus condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum mattis tellus vestibulum tempor ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu dictum metus. Quisque ipsum mi, sodales sit amet scelerisque eu, ultrices sed nunc. Mauris bibendum lacus ut blandit ornare. Suspendisse a arcu gravida, maximus ante quis, fermentum dolor. Ut ut lorem commodo, aliquet erat sit amet, placerat dolor. Phasellus id sapien eros. In condimentum efficitur nibh vitae ultrices. Fusce congue sed nibh iaculis luctus. Mauris lobortis lectus orci, sed efficitur enim convallis ullamcorper. Sed sed arcu id elit interdum porta. Praesent dignissim auctor consectetur. Phasellus leo ipsum, facilisis non ex eget, sodales tristique mauris. Fusce ac luctus felis. Integer ac metus mi. Nam facilisis, eros quis dapibus vestibulum, nibh orci luctus dolor, eget lobortis ligula turpis nec urna. Curabitur convallis, lectus eleifend imperdiet interdum, felis sem cursus velit, non scelerisque tortor libero quis tortor. Fusce neque ipsum, bibendum et mauris vel, dignissim sagittis mi. Aliquam vel pulvinar risus. In eget efficitur tellus, non auctor elit. Nullam eu lectus urna. Pellentesque congue nisi vel semper imperdiet. Duis a sagittis dolor. Proin bibendum magna a felis feugiat placerat. Proin et bibendum magna. Mauris sagittis est quam, sed elementum urna lobortis a. Etiam in augue venenatis, elementum mauris ac, scelerisque arcu. Nunc sit amet mi nisl. Fusce blandit felis a justo ultrices varius. Vestibulum hendrerit facilisis leo, sit amet vestibulum tortor malesuada ut. Etiam nibh arcu, pellentesque sit amet leo sit amet, suscipit pretium erat. Praesent scelerisque quam libero, ut tristique metus tristique a. Integer venenatis ligula cursus, sodales velit eu, tempor lorem. Sed ante ex, porttitor sit amet dui mattis, aliquet tristique diam. Pellentesque molestie varius iaculis. Phasellus viverra pellentesque ipsum in mollis. Morbi tempus odio magna, ut ornare risus congue id. Etiam luctus elementum enim eu tempor. Sed mattis metus ac aliquam pretium. In sit amet eleifend erat. Maecenas lacinia eu nunc non scelerisque. Aliquam finibus sapien non enim efficitur, sit amet aliquet ex aliquam. Integer pulvinar, dui a interdum ultrices, justo orci venenatis orci, vel condimentum nulla dolor vitae mauris. Vivamus posuere faucibus purus at consectetur. Nulla dignissim libero in ex semper, at aliquet magna tincidunt. Nam facilisis sit amet libero a porta. Aenean laoreet, orci quis egestas scelerisque, erat nibh efficitur libero, vitae ultricies ipsum massa ut velit. Phasellus pharetra egestas diam at aliquam. Nulla ac tellus non tellus molestie euismod sit amet sed libero. Praesent quis interdum nunc, at rhoncus lacus. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur pharetra, nulla non lacinia consequat, orci est interdum nisi, eu aliquet urna velit eu sapien. Nunc sodales condimentum purus ut sagittis. Sed orci metus, eleifend et finibus ac, laoreet et sapien. Pellentesque erat arcu, tristique sit amet odio a, lobortis vehicula ligula. Quisque rutrum lectus non lectus sodales suscipit. Suspendisse et mauris et mi imperdiet scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim ligula vel nisi varius finibus. Suspendisse tempor nibh vel finibus mollis. Nam pulvinar rutrum sagittis. Aenean ligula ex, feugiat a odio non, tempor condimentum erat. Praesent cursus leo quis justo blandit, ut aliquam sapien tempus. Aliquam tempor porta turpis, vehicula lobortis risus lacinia quis. Quisque et purus in risus mattis rhoncus. Sed in condimentum mauris. Nulla sed velit eu magna euismod pulvinar. In ullamcorper libero dui, vel ultricies sem fringilla et. Donec eget sagittis enim. Ut ut nisl laoreet, congue nibh nec, volutpat nibh. Aenean eget feugiat urna. Ut hendrerit justo quis mi mattis, vel sodales neque hendrerit. Quisque rhoncus ex non augue venenatis placerat. Mauris at magna tempor, lacinia erat eget, egestas quam. Phasellus viverra dolor ac ligula semper porta. Quisque egestas ligula mattis pulvinar ullamcorper. Duis placerat vehicula ex, quis dictum purus vehicula quis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Curabitur ultrices ut orci vel tempus. Aliquam ultrices molestie sapien, ut condimentum enim consequat vel. Curabitur bibendum ornare orci, et egestas nisi euismod at. Proin ut mi a sapien pharetra dignissim non ac erat. In augue ligula, ullamcorper id semper vitae, rutrum non tellus. Donec libero odio, condimentum malesuada ullamcorper eu, aliquam non urna. Proin lobortis, odio sed pellentesque mattis, quam libero volutpat risus, ullamcorper mattis erat orci eget lorem. Pellentesque imperdiet erat cursus consequat imperdiet. Curabitur congue vel orci ut fringilla. Duis quis ante in turpis vulputate sodales. Duis blandit ante justo, et sodales magna laoreet id. Phasellus blandit vehicula ipsum, non suscipit eros dictum sed. Integer malesuada sed ante sed feugiat. Praesent porta volutpat elit, non rutrum orci cursus vel. Fusce et lacus eget magna consectetur tempor quis et augue. Proin et rutrum purus. In bibendum hendrerit viverra. Morbi sed volutpat odio. Donec eget justo sit amet metus mollis efficitur. Suspendisse bibendum ac ipsum id iaculis. Sed ut sagittis orci, in blandit mauris. Quisque interdum commodo volutpat. Nullam vel est eget sapien tempus ullamcorper. Nullam sed dictum dolor, non eleifend sapien. Morbi vulputate lectus lorem, vitae semper ex dapibus ut. Proin vulputate, dui eu eleifend congue, lorem velit eleifend justo, ac mollis nibh mi vel risus. Quisque suscipit tristique ipsum pharetra dictum. Vestibulum blandit neque orci, a vulputate elit feugiat eu. Fusce fermentum magna lectus, nec semper nisi tristique vitae. Cras efficitur pharetra lectus. Proin sit amet risus velit. Fusce quis lectus sodales nibh feugiat varius. Sed varius, leo eget iaculis sagittis, urna quam tempor tellus, id tempor erat diam euismod leo. Suspendisse ipsum nisi, semper in aliquet et, interdum non tortor. Phasellus vehicula, sapien non tempor maximus, metus erat porta risus, suscipit gravida mauris dolor ac enim. Praesent sit amet tellus neque. Donec venenatis dictum bibendum. Praesent mattis orci massa, eget varius nisl aliquam nec. Nulla commodo et mauris ut pellentesque. Proin commodo, tellus vel vestibulum interdum, enim diam vulputate sapien, eget lacinia ipsum lectus vel diam. Aenean eleifend ligula et orci efficitur, sed scelerisque nisi lacinia. Mauris venenatis, elit in tristique gravida, odio velit lobortis augue, ut pretium diam ipsum vitae justo. Cras sit amet pellentesque turpis. Donec ac pretium sapien. Mauris neque arcu, iaculis a sagittis quis, elementum vitae tellus. Aenean sit amet interdum diam. Phasellus nibh ligula, interdum in nisl nec, ultricies luctus sapien. Integer eu eleifend urna, sit amet euismod neque. Aliquam id sagittis tortor. Curabitur in sagittis enim, quis lobortis diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dignissim purus eu auctor ultricies. Proin laoreet diam et magna tempor, in congue ex tincidunt. Nunc vel cursus tellus, eget blandit odio. Cras metus magna, pulvinar eu tristique finibus, pellentesque id tortor. Vestibulum cursus ut odio vitae ultricies. Integer at tellus varius, dapibus augue quis, mattis elit. Nullam malesuada in lectus nec finibus. Praesent sed massa metus. Etiam gravida tristique feugiat. Curabitur blandit erat ac scelerisque placerat. Nam bibendum dapibus ex nec sagittis. Nullam malesuada fringilla lorem, id posuere metus varius aliquam. Aliquam porttitor a velit ut auctor. Vivamus tincidunt tempor pretium. Pellentesque ac faucibus felis. Nunc vulputate ut urna quis mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris in purus et mauris efficitur lobortis semper at mi. Praesent sollicitudin est a nibh facilisis pellentesque. Pellentesque vitae accumsan nisl. Ut porttitor tellus non mi tempor porta. Phasellus magna orci, bibendum quis sollicitudin nec, iaculis ac ipsum. Donec tellus ipsum, egestas quis ante vitae, dictum suscipit risus. Sed turpis orci, elementum et tellus et, iaculis tincidunt lacus. Nullam gravida vulputate enim, at semper ligula. Maecenas efficitur molestie leo id malesuada. Ut eu sodales nunc. Nunc et leo non ligula dignissim laoreet. Phasellus id lorem quam. Sed porttitor quis lorem quis congue. Duis laoreet orci erat, sed sagittis ipsum egestas id. Duis volutpat dui ac urna consectetur dictum. Mauris ac purus faucibus, laoreet nunc a, bibendum purus. Pellentesque sagittis tempus nulla id faucibus. In urna velit, iaculis et nisl ac, mollis gravida leo. Sed dignissim elit rhoncus, maximus ex nec, tempor mi. Nulla id dui quis nulla blandit pretium. Duis vestibulum pellentesque accumsan. Sed dignissim dapibus risus at ultricies. Maecenas scelerisque lacus at arcu viverra faucibus. Phasellus at quam leo. Integer sit amet volutpat orci. Aliquam consectetur lorem vitae libero tristique, vel sollicitudin tortor mattis. Sed commodo mauris sed neque volutpat, id ultricies metus laoreet. Aliquam sed nibh sem. Quisque vehicula, massa et porta scelerisque, dolor urna elementum leo, at congue massa est a justo. Fusce vitae elementum tellus, vel condimentum erat. Quisque molestie, velit ac varius lacinia, enim tellus porttitor sapien, et laoreet dolor quam at erat. In vitae dapibus tortor. Mauris in libero luctus, gravida nisi in, porta velit. Vivamus venenatis turpis ut malesuada dictum. Pellentesque a dapibus leo. Phasellus auctor a lectus vitae porttitor. Donec pellentesque facilisis pretium. Sed placerat, ligula sit amet consectetur blandit, nisi leo semper lacus, vitae dictum est lacus nec velit. Morbi commodo molestie diam a sodales. Praesent sed aliquam mauris. Aliquam vitae nisi sed orci ullamcorper pharetra. Nunc at elementum ante, quis scelerisque quam. Praesent auctor cursus pretium. Ut dignissim massa eget nulla volutpat aliquam. Etiam maximus lacinia ultricies. Integer non aliquam risus. Curabitur at accumsan nulla. Nullam varius varius metus eu vestibulum. Suspendisse ac ligula velit. Curabitur placerat, ante sed dapibus congue, odio neque varius purus, et varius metus enim nec odio. Vestibulum aliquet laoreet purus a posuere. Sed eget vehicula nibh, ac lobortis tellus. Phasellus eleifend fermentum ornare. In libero tellus, dapibus sed interdum sed, aliquam in purus. Nam interdum quis neque et tincidunt. Aenean odio ante, iaculis sed leo nec, venenatis molestie velit. Sed ipsum nisl, mollis eget aliquam sed, semper vitae lectus. Nam placerat nisl sed pulvinar ultrices. In id nisl ac felis mollis dapibus. Sed condimentum feugiat malesuada. Nam a felis ac dui pretium fringilla gravida at leo. Pellentesque aliquet porta turpis, ac mollis dolor pulvinar in. Duis vitae nunc a neque dignissim euismod ac non erat. Quisque non mauris ac massa malesuada dictum eget ac ipsum. Curabitur maximus dui id dolor ornare facilisis quis porttitor augue. Nunc pellentesque tellus et risus malesuada, ut bibendum diam gravida. Suspendisse placerat ultricies dictum. Sed pulvinar sapien a tellus dignissim venenatis nec id metus. Ut porta lacus sodales, semper diam maximus, efficitur sapien. Curabitur sollicitudin posuere leo, et molestie leo consectetur vitae. Pellentesque vel porta leo. Sed odio velit, porta eu mattis sed, dapibus a purus. Duis auctor, dui in blandit semper, leo eros dignissim nibh, eu convallis ex massa at odio. Proin sodales nisi mauris, et lacinia metus lobortis ac. Donec eget ullamcorper ligula, sed posuere nibh. Nullam finibus metus vel tellus blandit, et semper enim consectetur. Nunc ac auctor tellus. Phasellus in ex id tellus hendrerit ultricies. Aliquam odio quam, ultricies sit amet quam in, rutrum commodo mi. Praesent facilisis rhoncus bibendum. Donec non nisi sit amet erat tristique pretium at in erat. Nulla facilisi. Sed luctus quam et lacus accumsan, varius vestibulum ipsum ultricies. Curabitur fermentum faucibus nunc et feugiat. In vitae lectus rutrum, sollicitudin odio in, semper enim. Vivamus ac sodales felis. Pellentesque turpis purus, feugiat sit amet turpis nec, posuere mollis urna. Aenean sed mi eleifend, fringilla urna eu, ultrices nulla. Phasellus non lacus ut nulla condimentum gravida. Nulla purus risus, lobortis vitae dui at, fringilla suscipit tortor. Maecenas maximus, nibh et hendrerit congue, odio nibh consequat ipsum, vel ullamcorper lorem ante nec diam. Donec rutrum massa id tortor pretium, vel imperdiet tortor accumsan. Nullam sit amet vehicula urna. In consectetur justo ac magna suscipit, at varius velit pharetra. Fusce convallis enim eu cursus tincidunt. Nam non neque ac leo viverra fringilla sed varius turpis. Sed finibus nibh quis purus tempor laoreet. Maecenas faucibus pellentesque ex quis eleifend. Vestibulum ultrices justo mi, sit amet varius urna gravida vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean fermentum facilisis orci id tincidunt. Donec vehicula metus vitae volutpat rutrum. Sed et hendrerit erat, sit amet lobortis mauris. Maecenas pellentesque dui risus, a placerat dui cursus ut. Aliquam ullamcorper egestas justo, a varius dolor. Etiam elementum aliquam sapien quis sagittis. Maecenas at convallis magna, vitae pellentesque urna. Vestibulum malesuada, nisi in efficitur laoreet, massa ex tristique turpis, in varius arcu mi id purus. Duis rutrum egestas facilisis. Donec et mi ut tortor cursus semper. Suspendisse potenti. Ut faucibus tortor nunc. Fusce sodales quam sit amet purus maximus, id hendrerit purus volutpat. Integer iaculis, justo id dapibus dignissim, tortor ante hendrerit felis, imperdiet vulputate lectus quam sed nibh. In eu hendrerit ex. Nam ligula nisi, viverra vitae facilisis sit amet, facilisis eu augue. Nullam auctor est nec eros laoreet, vel tristique libero rhoncus. Nullam a odio sit amet nulla egestas pulvinar eu eu sem. In placerat ac est ut scelerisque. Morbi nec hendrerit neque. Vivamus velit odio, interdum et finibus scelerisque, fringilla at lacus. Mauris sit amet tortor malesuada, mollis ipsum faucibus, euismod lorem. Ut id aliquam magna. Cras vel commodo neque, rutrum rutrum erat. Nunc in orci bibendum, laoreet enim quis, placerat metus. Mauris accumsan tempor velit vel sodales. Maecenas ornare purus sem, vel consequat dui faucibus sed. Cras rutrum ac tellus sed varius. Pellentesque facilisis libero nisi, in tincidunt felis gravida sit amet. Phasellus a interdum purus, eu sodales ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis ex ut metus blandit aliquet. Proin vitae consectetur nulla. Praesent mattis, urna sit amet lacinia aliquet, sapien mauris pellentesque libero, egestas scelerisque sem quam ut massa. Nunc vitae porta sapien. Aenean fringilla placerat lacinia. Ut egestas ligula quis velit elementum congue. Praesent tincidunt consectetur nisl eget maximus. Praesent in aliquet libero, at tempor elit. Vestibulum tellus est, ornare nec est tempus, sodales varius turpis. In dignissim quis odio ut pharetra. Sed pulvinar sollicitudin massa at bibendum. Aliquam vulputate justo id vehicula malesuada. Ut sapien lorem, iaculis vitae mauris ac, posuere eleifend diam. Sed aliquet ex quis odio scelerisque, sed consectetur elit tempus. Curabitur vitae ultrices risus. Praesent eu augue in risus ullamcorper porta. Maecenas vulputate nisl nibh, ut tincidunt lacus posuere in. Nunc ac arcu lacinia, ultrices quam sed, scelerisque dolor. Quisque aliquam, arcu eget efficitur vestibulum, nibh justo aliquam leo, in porta eros justo at sem. Quisque fringilla dictum mauris, nec consequat nulla cursus at. Vestibulum congue, nulla vitae dictum hendrerit, felis orci euismod arcu, nec laoreet enim nibh eu sapien. Cras fringilla purus nisi, vel consequat justo mollis ultrices. Donec gravida, massa quis varius dignissim, nisl quam lacinia purus, non porttitor massa urna vitae nibh. Sed sit amet euismod sem. Nam ut arcu nec diam porttitor congue ut ac felis. Praesent facilisis ultricies elementum. Duis a tincidunt mauris. Phasellus in dapibus tortor, dignissim placerat leo. Aenean volutpat facilisis enim, vel laoreet purus. Integer tincidunt mattis lectus quis vulputate. Maecenas maximus quam dui, sit amet dapibus justo suscipit quis. Donec ornare consectetur quam, ut tincidunt mi iaculis eu. Nam vitae urna at est faucibus accumsan in et elit. Morbi neque ligula, cursus in luctus nec, tempus mollis lorem. Aliquam a mi orci. Ut id ante iaculis, tristique lorem eget, molestie ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis luctus libero eget lacus commodo ultrices. Integer vitae auctor libero. Proin et magna lobortis, pharetra arcu tincidunt, luctus est. Quisque eget vehicula lectus, eu malesuada dolor. Maecenas luctus malesuada dolor, vitae sollicitudin elit pellentesque sit amet. Nunc feugiat tincidunt aliquet. Pellentesque sed pulvinar lorem, sed egestas nisi. Mauris viverra, nunc vitae varius vulputate, felis augue bibendum nibh, eget fringilla ipsum tellus nec enim. Maecenas sed elit a diam congue tempus. Duis ac erat diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In molestie arcu et fringilla scelerisque. Suspendisse finibus turpis ex, in laoreet nibh malesuada nec. Donec elementum consequat nisi vulputate consequat. Proin id pulvinar risus. Proin ullamcorper ipsum eros, porttitor feugiat turpis tempus in. Aliquam blandit ante eget purus sollicitudin eleifend. Nulla vel quam erat. Maecenas pretium vel arcu quis condimentum. Maecenas vitae magna viverra, finibus purus vitae, hendrerit orci. Nulla ut nisi vel magna accumsan rutrum. Quisque aliquet ligula eget lacus facilisis tincidunt. Fusce non leo dapibus, tincidunt nisl et, auctor justo. Morbi aliquet metus at libero auctor, molestie elementum quam sodales. Maecenas interdum aliquam mauris, non scelerisque leo feugiat et. Fusce porta quis ipsum non molestie. Mauris auctor diam luctus erat pellentesque, vel sodales nisl condimentum. Integer elit nisl, tincidunt a molestie id, sagittis sit amet nibh. Etiam et porta purus. Sed nec risus non sapien egestas congue eu sed lectus. Ut diam mauris, sollicitudin id turpis vel, pretium malesuada lorem. Cras pretium mi ut nisi sodales, eu consectetur metus suscipit. Donec condimentum nunc erat, a tristique nisi ullamcorper sit amet. Donec nec condimentum velit, nec fermentum justo. Phasellus ac sem vel nisi ornare tristique. Nullam gravida, tellus at malesuada ornare, ipsum orci laoreet nibh, nec fringilla sem nulla a lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse potenti. Curabitur luctus rutrum aliquet. Etiam condimentum velit nibh, ac efficitur ex dignissim eu. Integer iaculis augue purus, ac commodo enim viverra in. Cras erat justo, efficitur in metus ullamcorper, lacinia commodo quam. Curabitur sollicitudin ex ac dui congue aliquam. Fusce a arcu sem. Suspendisse elementum, dolor vel vestibulum venenatis, tellus risus dapibus elit, eget rutrum felis est et massa. Ut feugiat placerat sapien in feugiat. Praesent porta gravida lectus ut maximus. Sed mattis ex tincidunt, iaculis lacus vitae, luctus massa. Quisque condimentum fermentum turpis quis iaculis. Pellentesque fringilla urna pretium turpis efficitur, id lacinia orci condimentum. Duis tristique enim velit, nec imperdiet nisl euismod sit amet. Aliquam quis risus diam. Aenean aliquam luctus orci, nec laoreet velit malesuada sit amet. Maecenas vulputate est nec enim laoreet, in aliquet tortor auctor. Praesent nisl sem, malesuada ac odio vel, tincidunt consectetur leo. Nullam in neque libero. Fusce maximus nisl est, eget blandit leo condimentum sed. In maximus, est eget tincidunt semper, magna sapien ullamcorper tortor, sed mollis orci sapien in elit. Ut tincidunt accumsan orci, quis iaculis nibh blandit ac. Phasellus luctus auctor arcu, eu ultrices eros laoreet et. Vivamus velit lectus, iaculis et laoreet ac, pulvinar id tellus. Cras ac felis a nibh pharetra pellentesque eu rhoncus ipsum. Nulla vehicula risus dolor, id bibendum felis interdum sed. Nulla sed sem facilisis enim pellentesque ornare eu quis nulla. Sed arcu ipsum, ultrices at massa id, efficitur ultrices mauris. Fusce malesuada nisi eu nisl maximus, sit amet fermentum massa mollis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi et elit sem. Aliquam nec lorem eget nulla consectetur sagittis sit amet at diam. Phasellus erat justo, interdum ut vestibulum eget, semper sed ex. Sed sit amet orci ut enim tempor ultrices sit amet ac felis. Maecenas varius metus tincidunt ligula maximus, a accumsan lectus laoreet. Cras massa augue, congue sit amet mi non, consectetur semper enim. Proin pellentesque congue enim. Morbi cursus elit et dui placerat, id scelerisque lectus luctus. Donec non dui eget erat cursus egestas ac et lacus. Vestibulum facilisis diam et neque rhoncus, id consectetur ligula auctor. Suspendisse vitae dui sagittis, molestie leo rhoncus, faucibus eros. Vestibulum sed sem faucibus, volutpat ligula vitae, scelerisque augue. Nullam eget malesuada metus. Fusce quis purus nulla. Nullam ac gravida ipsum. Curabitur vel lacus ac diam fermentum porttitor. Sed a leo ac justo mollis scelerisque non id ligula. Nullam enim risus, tincidunt eget sollicitudin in, gravida nec elit. Fusce fringilla quis massa in sagittis. Cras sollicitudin tellus ac lacus pharetra rhoncus. Sed at fringilla diam. Suspendisse finibus lectus ac arcu pellentesque tincidunt. Nam congue pharetra quam. Nam sed porta justo. Nulla facilisis malesuada justo, non porta nisl elementum ut. Sed id lectus felis. Suspendisse potenti. Vestibulum in viverra lacus. Integer sollicitudin quam non nisi tincidunt, in gravida sapien venenatis. Nulla id tellus at lorem aliquet aliquam at nec lectus. Proin bibendum fringilla aliquam. Fusce ultrices, libero vel tincidunt pharetra, nulla arcu imperdiet libero, sit amet venenatis risus elit id ligula. Aliquam est nulla, mattis non dictum eget, hendrerit nec massa. Sed vulputate purus nec lectus sodales tempor. Aliquam erat volutpat. Phasellus porta justo mauris, quis laoreet felis gravida in. Nulla at varius erat. Suspendisse congue odio eros, at fermentum tellus posuere vel. Phasellus non odio odio. Phasellus non posuere ante. Aenean turpis massa, posuere non turpis at, placerat pulvinar quam. Aenean pharetra cursus elementum. Donec porta, lorem et facilisis tempus, augue nisl dictum lacus, vitae accumsan erat ipsum nec sapien. Phasellus eget vestibulum sem, quis dignissim enim. Sed vel dui dolor. Maecenas sed suscipit eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ac convallis dolor. Praesent condimentum metus iaculis lorem molestie, eget semper felis efficitur. Phasellus condimentum risus at nisi congue tempor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi dolor turpis, tempus in finibus nec, accumsan id arcu. Donec purus lacus, suscipit vitae justo sed, vestibulum dapibus eros. Aenean vehicula suscipit massa sit amet cursus. Sed tempor luctus pellentesque. Vestibulum venenatis eros nulla, a lobortis tortor efficitur in. Morbi consequat, justo eget consectetur accumsan, augue eros posuere elit, ac maximus libero eros et libero. Curabitur fermentum hendrerit nunc eu porttitor. Sed a velit vulputate, blandit arcu id, interdum sem. Sed tempor a tellus quis imperdiet. Proin interdum interdum laoreet. Nam maximus mi eleifend, vulputate velit id, vehicula lacus. Quisque nulla nisl, luctus vitae erat eu, rutrum varius urna. Praesent id odio vitae urna convallis aliquam nec nec purus. Duis venenatis vestibulum dui, ac feugiat sapien vestibulum in. Phasellus luctus accumsan nisl, eget venenatis lacus lacinia id. Morbi fringilla hendrerit ex, sed ultrices lectus mollis non. Donec bibendum molestie auctor. Cras consectetur sagittis sem, ut rhoncus mauris molestie quis. Phasellus magna sem, elementum egestas sollicitudin eu, posuere id ipsum. Nunc tempus metus diam, a lacinia neque tincidunt eget. In fermentum enim mi, accumsan porttitor libero accumsan vitae. Etiam sagittis dapibus elit, eu maximus eros ornare non. Donec ullamcorper arcu quis ex scelerisque interdum. Sed ac maximus arcu. Praesent faucibus est ullamcorper nulla maximus sodales. Curabitur pellentesque augue lectus, non iaculis neque dignissim in. Donec eget purus ut nunc condimentum consequat. Praesent gravida tempus semper. Aliquam pellentesque tempus tortor eu cursus. Proin a elementum sapien, blandit vestibulum dolor. Aliquam quam orci, sagittis quis lorem viverra, tincidunt semper ipsum. Nulla consectetur neque ac enim placerat venenatis. Pellentesque fermentum ultricies urna sed vehicula. Quisque aliquet blandit ipsum, et finibus nibh pharetra quis. Aenean ullamcorper tellus rutrum velit sodales, a eleifend mi maximus. Duis a enim nec felis tincidunt posuere. Donec vel nisl condimentum, scelerisque quam id, interdum urna. Phasellus eget bibendum nisi. Nullam posuere iaculis sapien, ac porttitor nisl condimentum a. Morbi lobortis quis mauris in rhoncus. Maecenas sed porttitor urna. Nulla gravida ante non velit venenatis, id egestas turpis commodo. Sed luctus consequat neque eget varius. Nullam sed dui pretium, ullamcorper libero eget, consectetur massa. Suspendisse et bibendum nisl. Nulla eros odio, venenatis eget lacinia ut, commodo vitae elit. Cras consectetur nisl ut placerat fringilla. Pellentesque id nisl non lorem congue auctor. Nam luctus massa augue, et volutpat quam dapibus ac. Aenean molestie lorem quis dolor fermentum, eu fermentum nisi auctor. Mauris maximus egestas libero id pellentesque. Integer mauris magna, congue sed efficitur sit amet, molestie vestibulum urna. Vivamus sit amet lorem mattis, mollis justo sit amet, congue risus. Morbi mattis lorem eu arcu elementum euismod. Nullam sollicitudin, dui vel lobortis molestie, neque lectus maximus elit, a lobortis urna lectus eu ipsum. Quisque tristique mollis tempus. Nunc pellentesque nunc a congue mollis. Nam finibus tellus eget venenatis ullamcorper. Etiam euismod pharetra lectus sed tincidunt. Integer tincidunt, erat ut eleifend ultrices, turpis elit placerat tortor, at rutrum justo enim sit amet nunc. Nulla tempor enim ex, eget venenatis magna egestas vitae. Praesent sed congue sem. Duis vulputate mi in odio tempor, et aliquam ipsum gravida. Donec ipsum arcu, interdum maximus risus eu, placerat interdum est. Proin pulvinar mauris velit, vel ultricies velit tristique ac. Sed vel velit eros. Mauris sagittis nisi ut mi volutpat, ac laoreet ex elementum. Pellentesque fringilla risus sit amet dui dapibus dapibus. Proin vitae metus sit amet risus dapibus auctor. Quisque non varius est. Nulla vestibulum sodales nulla aliquam sollicitudin. Vivamus posuere, metus eget auctor fringilla, nulla urna semper ex, in lacinia ligula ex id magna. Vestibulum fringilla sem in ex tempor tincidunt. Cras justo nulla, sollicitudin nec massa eget, laoreet gravida nibh. Donec sodales pharetra eros ut egestas. Mauris cursus in tellus ac faucibus. Duis at nisi quis justo pulvinar porttitor vitae et libero. Fusce rhoncus nulla nibh, eu cursus mauris rhoncus at. Quisque faucibus pellentesque leo, at blandit sapien euismod nec. Mauris bibendum lorem sed augue aliquet, sit amet lacinia lacus lacinia. Nulla accumsan erat non mauris dignissim, vel tempor ipsum tincidunt. Quisque consequat bibendum sollicitudin. In hac habitasse platea dictumst. Nam elit leo, tempor sit amet lorem at, ultrices consequat ex. Nullam elit sem, sagittis et orci eget, tristique luctus diam. Phasellus ultrices mi massa. Nam nisi eros, mollis at consectetur non, maximus vel nulla. Nunc at magna et orci tristique faucibus. Morbi fringilla mollis enim vitae auctor. Quisque sit amet vulputate mi, vitae vulputate eros. Aenean sem nulla, vehicula quis velit at, fringilla lobortis risus. Nulla non commodo purus. Fusce in odio ipsum. Proin leo nisl, pulvinar eu vulputate sed, porttitor sit amet justo. In at pulvinar quam. Phasellus tincidunt suscipit iaculis. Cras ut ex arcu. Integer elit nibh, sodales quis odio a, semper feugiat urna. Nulla interdum tellus neque, fringilla tristique odio ornare id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce vel purus ac turpis condimentum fringilla in pulvinar lacus. Donec ut placerat nisi. Maecenas ultricies, augue ultricies eleifend lacinia, nibh diam dapibus risus, sed imperdiet lacus enim in urna. Duis eu enim vitae justo auctor pellentesque sed volutpat nulla. Mauris iaculis quis velit quis iaculis. Aliquam posuere tellus lectus, nec finibus orci cursus quis. Duis nec massa at massa lobortis dignissim. Donec ornare, lectus a dictum lobortis, neque felis gravida libero, non ultrices justo lacus at dui. Integer eu nisi vel diam bibendum aliquam id fermentum metus. Suspendisse fermentum dolor enim, sit amet fermentum leo laoreet ut. Sed interdum a massa non tincidunt. Maecenas scelerisque varius justo, et dignissim turpis tincidunt in. In eu tortor eros. Donec congue tellus neque, non sodales mi finibus ultricies. Maecenas eget gravida ante. Vestibulum scelerisque commodo felis sit amet semper. Donec rhoncus aliquet nibh, at tincidunt massa eleifend sed. Sed quis diam posuere mauris molestie sodales. Quisque cursus semper purus, et lobortis est commodo sed. Sed faucibus quis tellus vitae rutrum. Etiam turpis lectus, rhoncus vel dapibus vel, luctus in magna. Fusce at dictum ante. Donec aliquam convallis risus, sed sodales lacus finibus pulvinar. Etiam accumsan ornare nisi, at elementum felis sagittis ac. Quisque ac vehicula diam. Aliquam sit amet tempus ipsum, quis ultrices metus. Sed sit amet libero volutpat, tempus massa quis, porttitor ante. Donec laoreet fermentum leo, non aliquet mi maximus at. Nullam auctor, ligula eu venenatis suscipit, tortor est eleifend lectus, vel efficitur risus arcu in mi. Maecenas vitae nunc vel mi tincidunt scelerisque. Nam in diam elit. Mauris mattis ornare libero, et tempor justo laoreet sed. Proin vitae dui sagittis, lacinia ex ut, consequat mi. Aenean quis consectetur urna, in fringilla felis. Mauris id dictum orci, nec mattis dui. Nam dictum imperdiet lorem sit amet consequat. Vestibulum consequat tristique ligula non cursus. Fusce efficitur nunc mattis faucibus laoreet. Nunc sollicitudin orci pretium diam venenatis, et lobortis libero porta. Aliquam eget laoreet tortor, quis luctus felis. Suspendisse rutrum mi at imperdiet placerat. Fusce nisl mauris, laoreet ac risus eu, suscipit luctus lorem. Donec malesuada lectus metus, at luctus risus pellentesque nec. Cras euismod sodales turpis, ac eleifend augue convallis at. Donec dolor orci, imperdiet sit amet ultricies id, laoreet nec arcu. Phasellus quis ligula quis magna fermentum vehicula. Suspendisse ultrices aliquam sem ut dignissim. Quisque porttitor est eget semper bibendum. Morbi suscipit iaculis dui, ac mattis ipsum dignissim a. Duis consectetur suscipit viverra. Donec lacus tellus, suscipit at viverra eget, imperdiet a risus. Proin eleifend, lacus sed feugiat condimentum, massa quam malesuada eros, et tincidunt velit enim cursus nunc. Ut vel tincidunt lectus, sit amet iaculis tortor. Sed laoreet diam non egestas finibus. Mauris interdum orci sit amet augue tempor, vel efficitur massa interdum. Morbi sagittis cursus risus, pharetra scelerisque risus luctus sit amet. Proin lacinia ex nec nulla suscipit, nec elementum erat finibus. Curabitur ut mi elit. Vestibulum laoreet ipsum vel augue tempor, vel pharetra metus lobortis. Donec vel justo est. Aenean convallis dui eget auctor iaculis. Mauris accumsan blandit turpis. Morbi interdum ipsum non dui accumsan placerat. Nam ornare arcu ac ante consequat, vel dignissim mauris facilisis. Etiam a eleifend arcu. Phasellus dolor enim, sollicitudin eu nisi vitae, auctor ultricies turpis. Donec tincidunt nisi vel sem lacinia, quis semper erat gravida. Nulla libero neque, ultrices in erat non, imperdiet blandit libero. Aenean commodo bibendum vulputate. Nulla at ante nulla. Praesent et efficitur elit. Morbi eget odio a sem tincidunt semper. Curabitur pulvinar tortor et nunc tristique consequat. In at eros libero. Phasellus quis accumsan massa. Sed vulputate dolor elit, blandit dictum mauris cursus et. Aliquam ex orci, ornare sed enim quis, ornare dictum nisl. Nunc in ligula vel diam sagittis bibendum. Proin sed tempor neque. Fusce mi purus, lacinia ac risus non, consequat tempus massa. Mauris eget vulputate eros, et gravida erat. Sed scelerisque magna ac lorem tempor, eu congue ante tempus. Suspendisse id rutrum lacus. Proin in velit sed turpis aliquet vehicula sed nec lectus. Duis eu lacinia ante. Sed sit amet dictum erat. Proin commodo tincidunt dui, rhoncus aliquet elit. Mauris quis nulla ut velit tincidunt dignissim in ut lacus. Mauris id volutpat eros. Maecenas felis tellus, aliquam a finibus dignissim, tristique at enim. In volutpat scelerisque dictum. Sed sagittis euismod ex, rhoncus interdum dui tincidunt quis. Pellentesque tempor urna eu eros scelerisque tristique. Duis iaculis vitae arcu non luctus. Mauris leo sapien, faucibus vel neque dignissim, sodales accumsan felis. Aenean in commodo nibh, ut finibus justo. Cras nisl odio, pretium vel ex in, semper efficitur augue. Nulla tortor est, tincidunt in imperdiet quis, gravida non nisi. Morbi posuere libero neque, nec facilisis nunc semper eu. Cras tincidunt mi id eros imperdiet, quis dapibus magna dictum. Maecenas lobortis arcu sit amet felis sodales, id lobortis sem rutrum. Suspendisse quam diam, accumsan ac accumsan id, pharetra et mi. Nunc at ante odio. Vivamus dignissim enim et risus scelerisque convallis at vitae dolor. Nunc aliquam sem vitae enim mattis tincidunt. Aenean nec hendrerit tellus. Sed a mollis nibh. Vivamus sollicitudin mi ut lorem porttitor, sed hendrerit urna laoreet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque blandit metus sed ipsum porta, sed convallis turpis sagittis. Pellentesque sapien lorem, sagittis id accumsan eget, imperdiet ut lacus. Maecenas sed tempus mauris. Phasellus sed dui id justo vehicula pulvinar. Donec quis justo neque. Vivamus at odio urna. Nulla accumsan tortor tempor justo mattis, ultricies lobortis turpis feugiat. Integer in mauris fermentum, accumsan ligula at, interdum nisl. Nullam scelerisque commodo varius. In sollicitudin, dui ut condimentum sagittis, lorem sem porta urna, at lacinia felis mi non metus. Duis quis lacinia odio. Nam at lacus enim. Sed in volutpat magna. In eget velit augue. Proin quam nunc, auctor sed facilisis eu, molestie ac lorem. Nullam rutrum tincidunt ex egestas facilisis. Proin et maximus dolor. Nam condimentum mi quis neque condimentum, non pretium lectus varius. Vestibulum feugiat sem at venenatis euismod. Nulla imperdiet sem in neque suscipit vestibulum. Nunc ac pellentesque ligula. In euismod tellus quis ipsum euismod molestie. Sed in purus malesuada, malesuada erat a, dapibus est. Mauris placerat gravida ipsum vel sodales. Ut quis aliquam diam. Fusce aliquet ac arcu sit amet ultrices. Aenean ac turpis eget nunc porta commodo ac et enim. Phasellus dignissim feugiat tristique. Nunc feugiat vel libero in iaculis. Quisque feugiat eleifend turpis, eu volutpat est. Vestibulum dictum ut metus in interdum. Donec placerat augue lectus, luctus facilisis lacus ultrices non. Curabitur sed aliquam felis. Aliquam sollicitudin in lectus quis pulvinar. Donec vel ligula mollis, condimentum lorem quis, lobortis nunc. Vivamus vitae turpis convallis, auctor dui sed, bibendum ante. Maecenas semper felis eget massa aliquet, eu commodo risus rhoncus. Ut efficitur id sem eu tristique. Morbi quis lorem at ipsum tempor viverra in non sapien. Nunc velit ex, porttitor id tempor sed, viverra vel felis. In lacinia blandit mauris, hendrerit consectetur turpis molestie commodo. Integer in ipsum sed enim tincidunt eleifend ac sit amet dolor. Aenean ornare ante dictum, maximus leo eu, feugiat urna. Praesent nisi sem, viverra eu orci ut, euismod bibendum mi. Mauris dui leo, euismod eu urna at, vehicula congue velit. Integer sollicitudin massa at mauris molestie condimentum. Cras vitae purus justo. Pellentesque semper magna sit amet sapien suscipit maximus. Nullam iaculis scelerisque massa vel tempor. Nam fermentum mauris eu mi bibendum semper. Suspendisse potenti. Donec ullamcorper turpis ut felis mollis, non porta felis porta. Ut sodales malesuada lorem ac pharetra. In blandit odio nibh, nec tempus ligula semper sit amet. Nam euismod tellus eu eros laoreet aliquam. Nullam at tellus urna. Quisque non lacus mi. Nullam gravida, metus porttitor consequat pulvinar, odio eros consequat ligula, egestas faucibus est odio vitae ipsum. Ut tempor vehicula interdum. Etiam interdum semper libero, a fringilla sem fringilla non. Proin at cursus erat. Phasellus at magna feugiat, dictum neque a, ullamcorper nisi. Proin et orci imperdiet, semper lectus eget, rutrum neque. Donec feugiat augue elit, a suscipit leo iaculis quis. Suspendisse ut nulla erat. Nulla justo magna, pulvinar at ante vehicula, elementum volutpat odio. Integer laoreet bibendum nulla in fringilla. Integer semper eu velit at ultricies. Etiam mollis turpis urna, id malesuada nulla faucibus in. Suspendisse vulputate efficitur nisl, eu tempus ipsum lobortis ac. Fusce ac pellentesque mi, ac porta nulla. Donec scelerisque velit ex, nec tristique erat commodo sed. Nullam id ipsum tincidunt, convallis dui auctor, elementum ligula. Pellentesque id tortor non orci iaculis ultrices. In malesuada mauris vel eleifend malesuada. In sit amet lacinia enim. Aliquam erat volutpat. Nam nec mattis lacus. Mauris lobortis justo auctor nibh malesuada pellentesque. Vivamus bibendum nulla at bibendum scelerisque. Phasellus dictum elit gravida semper dignissim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent dignissim enim eros, sit amet varius sapien tempor et. Aliquam erat volutpat. Sed feugiat, sem ut aliquam bibendum, erat purus aliquet urna, in vehicula velit lacus vel nisl. Fusce dictum id lectus quis porttitor. Etiam eu aliquet metus. Mauris vestibulum lorem in dapibus convallis. Integer id dolor sagittis arcu tincidunt tincidunt non et erat. Proin aliquam volutpat tempus. Ut id dignissim velit. Etiam purus massa, tristique nec ipsum eget, porttitor ultrices dolor. Sed tempus nisi ac aliquet interdum. Nunc eu tellus sit amet erat iaculis blandit. In at posuere metus, nec euismod metus. Morbi risus nunc, euismod non diam sit amet, elementum egestas dolor. Vivamus sed arcu ut arcu ultrices dictum a at eros. Suspendisse id felis et neque luctus tristique ac sed magna. Integer fermentum dictum tortor. Integer vitae metus pharetra, sollicitudin leo nec, facilisis dolor. Aenean laoreet ex velit, eget suscipit magna hendrerit vel. Integer nec ornare dolor. Etiam vitae quam sit amet mauris aliquet cursus rhoncus a metus. Donec sit amet bibendum eros. Nam hendrerit finibus nibh, eget pharetra lectus euismod ut. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi feugiat pretium elit, non suscipit sapien dapibus ac. Nam non porttitor ipsum, gravida iaculis dui. Vestibulum vehicula est eu neque ornare, eget semper est ornare. Aliquam erat volutpat. Maecenas et ligula vulputate, tincidunt nulla vel, pulvinar augue. Sed ac ante eu massa posuere auctor in quis leo. Maecenas a diam quam. Pellentesque metus felis, semper id mattis nec, ultricies sed dui. Vivamus ornare nisl ut ultricies imperdiet. Vestibulum congue lacus in metus convallis condimentum. Cras sodales arcu a malesuada semper. Nam rhoncus elit ligula, eu tristique ipsum suscipit non. Phasellus egestas posuere nunc, in dignissim nisl venenatis a. Pellentesque at arcu sed metus feugiat semper ut quis nisl. Maecenas accumsan blandit nisl eu posuere. Duis ac est blandit, vestibulum nunc consectetur, efficitur sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum molestie felis sapien, id vehicula orci rhoncus sit amet. Nulla eu ornare mauris. Proin ut ligula turpis. Ut nec sapien urna. Praesent lectus lorem, dignissim id sem sit amet, vehicula hendrerit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus sit amet vehicula neque, at eleifend risus. Maecenas in ante mollis, hendrerit est sed, pellentesque purus. Curabitur gravida augue lacus, hendrerit porta ligula porttitor a. Aenean euismod lacinia auctor. Maecenas eget sodales lorem, non ornare dui. Donec fermentum neque vitae massa porttitor, non rhoncus enim vestibulum. Suspendisse venenatis eget eros nec ultricies. Curabitur sit amet magna enim. Cras consequat neque eu diam laoreet consectetur. Nulla ante sapien, vestibulum in nibh a, mattis posuere lorem. Phasellus fermentum et erat vitae dictum. In hac habitasse platea dictumst. Vestibulum auctor dolor nulla, quis imperdiet ex tincidunt sit amet. Duis ullamcorper nulla sed neque luctus gravida. Aliquam odio velit, sagittis sed tortor vel, porta fringilla dolor. Sed neque arcu, sagittis vitae ante vitae, placerat imperdiet lacus. Pellentesque consequat tempus ex, nec rutrum odio dapibus vitae. Vestibulum suscipit, elit sed faucibus ultrices, ligula erat finibus odio, vitae bibendum eros arcu eu enim. Ut varius sapien erat, vel accumsan leo tincidunt quis. Mauris malesuada metus ac fermentum pretium. Mauris id lorem quam. Donec orci orci, condimentum eu pharetra ac, varius nec felis. Curabitur nec magna egestas, convallis lacus ultrices, dignissim turpis. Sed porttitor sagittis ligula, id accumsan odio ultricies quis. Integer sit amet quam eu sapien convallis consectetur. Aenean efficitur enim eget venenatis interdum. In suscipit ligula sit amet mauris commodo, eget venenatis lacus accumsan. Curabitur a luctus elit, vitae fringilla nibh. Nulla interdum, lorem maximus vestibulum commodo, odio quam pellentesque est, at placerat odio tortor nec eros. Mauris mollis imperdiet dui, quis vestibulum nisi molestie sed. Nam aliquet ante non egestas cursus. Nullam dapibus, nibh eget tincidunt tristique, mi turpis euismod velit, quis aliquet velit enim vel quam. Nam interdum vitae dui ac ultricies. Etiam maximus aliquam felis, sit amet commodo mi porttitor ac. Sed urna mauris, consectetur et fringilla ac, cursus eget magna. Integer nunc sapien, auctor id vehicula sit amet, molestie eget nunc. Fusce egestas sodales tellus tempor auctor. Praesent placerat egestas fringilla. Donec faucibus id nibh ac vestibulum. Fusce ac nisi mattis, venenatis dolor at, fringilla nibh. Pellentesque in tincidunt arcu, ac pretium nulla. Duis non efficitur mauris, ut tincidunt elit. Sed libero quam, eleifend posuere eleifend nec, interdum quis turpis. In quis vestibulum nibh. Praesent auctor pellentesque libero eget tempor. Morbi libero ipsum, consequat eget quam eget, commodo bibendum est. Praesent arcu eros, egestas in vulputate at, vestibulum vitae sapien. Duis laoreet ante quis nisl tristique lobortis sit amet ut turpis. Cras orci eros, fermentum nec pretium vitae, convallis ut tortor. Sed gravida dolor sapien, accumsan tincidunt tellus eleifend ut. Nam sem justo, ornare non tempus in, fringilla a justo. Proin a tellus molestie, hendrerit ante eu, consequat nisi. Maecenas sagittis a metus id varius. Nulla malesuada, ante interdum placerat ornare, magna felis rhoncus nulla, et placerat justo arcu ullamcorper mauris. Phasellus scelerisque lacus leo, at tincidunt ligula ultricies sit amet. Etiam rutrum diam quis augue eleifend condimentum. Pellentesque ex nibh, finibus sed semper quis, accumsan at metus. Sed eget nisl ut magna lobortis consectetur id quis augue. Maecenas posuere justo purus, gravida facilisis tellus dapibus id. Quisque tortor arcu, varius eget tellus nec, euismod maximus erat. In hac habitasse platea dictumst. Morbi pulvinar hendrerit dignissim. Integer accumsan dui eget sapien blandit ultricies. Mauris a porta diam. Donec massa justo, efficitur vel vehicula sit amet, porta in enim. Nullam condimentum ipsum vestibulum egestas gravida. Mauris ut nisi ornare, eleifend nulla ut, elementum tortor. Aliquam vulputate sapien nec porttitor dignissim. Pellentesque elementum accumsan tellus, nec egestas turpis scelerisque a. Suspendisse lectus diam, dictum vitae sagittis et, cursus vitae eros. Pellentesque laoreet libero vitae fringilla vulputate. Cras vitae nisl ut turpis cursus vehicula. Nullam facilisis viverra tellus, ac convallis odio pharetra eu. Duis ut magna eleifend, commodo ex eu, auctor nibh. Aliquam erat volutpat. Etiam posuere arcu purus, suscipit vulputate leo dapibus vitae. Aliquam turpis turpis, suscipit vitae imperdiet vel, porta nec eros. Nulla aliquet turpis eu lorem euismod posuere. Vivamus tristique ligula in arcu aliquam, nec auctor quam tincidunt. Donec at tortor at augue pretium faucibus. Maecenas dui velit, mollis nec congue id, molestie et leo. Donec porttitor dignissim consectetur. Sed a porta eros, elementum semper risus. Mauris non tortor tellus. Aliquam sit amet massa lectus. Ut auctor rutrum nisl sit amet semper. Vivamus efficitur sem turpis, at bibendum orci semper varius. Sed ultricies ipsum lectus, ut ultrices ex finibus eget. Ut eget turpis sit amet ligula bibendum mollis. Proin ut interdum ex. In enim diam, sagittis eget nisi in, sollicitudin fringilla urna. Pellentesque at orci lacinia, aliquet risus in, lacinia turpis. Aliquam pulvinar faucibus nunc sit amet ullamcorper. Nullam tristique varius sapien id dapibus. Phasellus viverra augue sapien, ac laoreet eros dapibus sit amet. Nam hendrerit nisl nec dapibus pharetra. Donec iaculis neque in nisl accumsan, id semper ligula ultrices. Sed luctus tempus ligula, quis mattis augue luctus a. Curabitur id diam nec ipsum efficitur blandit a sit amet odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dignissim, lectus ac consectetur tempor, lectus eros vestibulum sapien, eget mattis metus lorem at neque. Curabitur sit amet ullamcorper tellus, vitae posuere odio. Integer in orci malesuada, condimentum metus id, luctus magna. Sed eu orci vitae diam tempus mollis. Donec venenatis neque non urna molestie, sed suscipit velit tristique. Nulla sed diam lorem. Aliquam massa magna, pretium non faucibus id, tristique ut tortor. Vivamus ut convallis nibh. Integer dictum elit ut ex sagittis, quis feugiat ipsum lacinia. Nulla purus leo, porta non bibendum id, condimentum sed urna. Donec varius sagittis tempus. Sed dapibus ligula vel purus ullamcorper scelerisque. Nunc egestas volutpat euismod. Aliquam dapibus egestas dolor nec posuere. Fusce rhoncus sem sed aliquet dignissim. In porta libero non nunc vehicula, vitae dictum dui dictum. Fusce vel tempor nunc. Aliquam posuere odio ut mi tempus, ac feugiat orci luctus. Integer facilisis ornare ante at suscipit. Praesent quis tortor urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque in tincidunt erat. Nam vel nulla euismod dui mattis dapibus sit amet nec nisi. Aliquam cursus laoreet facilisis. Praesent quis pulvinar urna. Vivamus semper massa massa, et mattis magna cursus tincidunt. Morbi interdum non lacus in vestibulum. Pellentesque lobortis tempor enim quis lacinia. Aliquam erat volutpat. Donec efficitur interdum ante, non elementum lectus euismod at. Nunc pharetra neque nec ex porta sodales. Duis at est sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis nunc eu venenatis viverra. Nulla sed elit id velit sodales feugiat. Donec in enim ac nisl laoreet tristique. Sed tincidunt pellentesque augue mattis vulputate. Fusce quam augue, lacinia vestibulum tempus blandit, vulputate non odio. Aenean pellentesque mauris vel urna dapibus placerat. Vestibulum molestie turpis eget odio iaculis, at facilisis metus consequat. Sed eget nisi nisi. Sed dui sapien, fermentum fermentum augue eu, varius commodo nisl. Suspendisse venenatis auctor est vitae posuere. Etiam aliquam ligula leo, vitae condimentum sem maximus vel. Sed tempor nulla justo, quis eleifend arcu pharetra at. Sed suscipit nunc tempor massa fermentum, sit amet aliquet elit finibus. Donec consectetur malesuada porttitor. Etiam tempor egestas diam et consectetur. Aenean quis lacinia ligula. In congue commodo dui, id aliquet velit dapibus non. Nunc mattis purus ipsum, vel egestas dolor finibus ac. In at ullamcorper eros, quis pellentesque dolor. Sed id feugiat risus. Aenean nec nibh in tellus euismod euismod. Suspendisse vestibulum nisl in nibh feugiat, vestibulum tristique turpis pretium. Sed commodo elit tincidunt risus sagittis fermentum. Morbi lobortis pulvinar euismod. Etiam scelerisque, sapien non scelerisque fringilla, lacus nulla scelerisque sapien, ac tempor turpis dui tincidunt dui. Sed pulvinar orci a orci sagittis commodo. Proin vehicula libero sed quam lacinia, ut euismod diam dictum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse porttitor gravida eros ut luctus. Integer quis ipsum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque id odio mi. Etiam sit amet blandit diam. Vestibulum lacus lacus, fermentum quis convallis nec, cursus vitae justo. Praesent laoreet ultricies eleifend. Sed nibh tortor, malesuada non purus fermentum, ornare accumsan nulla. Vivamus elementum dolor vitae euismod convallis. Morbi lectus lorem, faucibus ut elementum id, convallis in ligula. Donec a lacus a mauris interdum molestie at non lectus. Etiam faucibus in sapien a dignissim. Curabitur scelerisque finibus nulla. Aenean gravida consequat accumsan. Quisque id enim in est dictum feugiat. Morbi dolor orci, molestie vel leo et, tincidunt tristique dolor. Aenean venenatis lobortis nulla, a lobortis metus fringilla sit amet. Morbi ac finibus tellus. In neque massa, bibendum non pellentesque sed, imperdiet non dui. Mauris porttitor sagittis laoreet. Maecenas sed ornare quam, quis faucibus arcu. Sed sit amet auctor ipsum, at mollis libero. Praesent non faucibus odio, nec consequat quam. Integer eget enim sit amet nibh malesuada mollis. Sed faucibus condimentum congue. Aenean tortor libero, pharetra sed magna sed, fermentum imperdiet magna. Suspendisse dictum lacinia sodales. Aliquam luctus purus purus, ut ornare ipsum tincidunt quis. In sit amet justo non felis laoreet consectetur eget eu turpis. Nullam ornare magna quis quam suscipit, in euismod ligula eleifend. Etiam at libero pellentesque, lobortis neque in, tristique eros. Aliquam non nisi lectus. Phasellus eu nisl tortor. Proin a ultricies leo. Morbi at diam et nibh iaculis dictum sed a nunc. Donec euismod gravida lorem quis tincidunt. Nam tristique neque sagittis orci faucibus, ac gravida turpis aliquam. Donec bibendum imperdiet odio. In luctus quis dolor eu fringilla. Vivamus eleifend. deapp2sj0dw9n2ctfi7bal32q51due5 740214 740209 2026-05-02T22:53:13Z User97104 72884 740214 wikitext text/x-wiki '''Lorem ipsum''' dolor sit amet, consectetur adipiscing elit. Cras at enim sed erat fermentum hendrerit vel vel diam. Sed luctus risus et odio lobortis tincidunt. Donec dictum neque vitae elit bibendum, dictum porttitor turpis dapibus. Morbi posuere sapien eu vulputate elementum. Donec rutrum non nibh a vulputate. Nunc et ipsum diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer ultricies velit ligula, et euismod leo mattis et. Curabitur ut porttitor lacus, sit amet scelerisque arcu. In vitae tellus quis augue faucibus consectetur. Ut dui nisl, posuere sit amet augue nec, interdum luctus nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus bibendum, turpis id fringilla lacinia, magna nisi ullamcorper ligula, sed gravida purus elit in turpis. == Vestibulum praesent etiam == Vestibulum eu ullamcorper neque. Nullam facilisis dui mauris, vitae euismod odio tempor vel. Nullam luctus eget est eget vehicula. Aenean fringilla ligula eget felis porttitor, eu maximus arcu laoreet. Etiam ornare nisi sed orci congue, lacinia feugiat diam feugiat. Suspendisse nisi enim, tempus at rutrum quis, interdum et erat. Quisque facilisis ante rutrum pharetra consectetur. Etiam ultricies quam orci, vitae eleifend erat imperdiet eu. In hac habitasse platea dictumst. Nulla at interdum nibh, et congue dolor. Donec ut aliquet mauris, quis volutpat purus. Vestibulum nisi nisl, sagittis eu neque sed, hendrerit placerat mauris. Suspendisse pretium, turpis sed pharetra pulvinar, enim leo tempor purus, vel euismod justo mauris id est. Aenean tristique est eget semper scelerisque. === Mollis nec === Praesent mollis ultrices mauris, et sagittis mi mollis ut. In ac pretium nunc. Fusce ullamcorper elit nunc, in pretium orci pretium imperdiet. Mauris a sapien eget nibh sodales tincidunt. Nulla feugiat feugiat rutrum. Donec laoreet feugiat porttitor. Suspendisse potenti. Vivamus scelerisque tristique tellus eu accumsan. Donec euismod maximus dui at malesuada. Etiam eu vehicula turpis. Cras sit amet sapien sed diam fermentum placerat. Cras ut sagittis velit. Etiam nec blandit neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse potenti. Cras volutpat id turpis sed tempor. Integer leo dolor, accumsan ut scelerisque at, aliquam non elit. Nullam egestas facilisis urna, sit amet commodo nunc laoreet eget. Duis aliquam auctor augue, sit amet efficitur ante lacinia vel. Praesent posuere, velit hendrerit viverra consectetur, justo nulla finibus turpis, sit amet posuere nisl metus non mauris. Maecenas at enim pharetra, tristique erat sed, ultricies leo. Nunc vel sem sit amet massa auctor commodo. Pellentesque feugiat nunc vitae magna fermentum mollis. Nullam id diam et leo ultrices aliquet vel nec felis. Quisque in ornare justo, eu tincidunt nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis lorem enim, sed mattis est gravida in. == Etiam integer in vivamus == === Maximus gravida === Etiam maximus tellus eros, quis congue sapien pellentesque sed. Nam imperdiet gravida volutpat. Donec vitae sodales nunc. Vestibulum augue sapien, aliquet in sem a, fermentum mattis sem. Maecenas id dolor felis. Quisque rhoncus orci et elit porttitor, vitae lacinia tellus scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer gravida vestibulum aliquet. Pellentesque leo purus, laoreet sit amet dolor ut, pretium porttitor nulla. Etiam pretium porta ante, a convallis diam elementum nec. Vestibulum et odio ac elit aliquet fringilla ac eu lectus. Sed vitae turpis magna. Nam tristique libero neque, nec pellentesque lectus rutrum ut. In porta, diam id porttitor hendrerit, velit quam lobortis sem, in tempor nibh dolor consectetur ipsum. Vivamus et mattis nisl. Etiam sapien nulla, cursus quis posuere non, feugiat in justo. Phasellus sagittis, ligula vitae condimentum auctor, purus velit dignissim risus, a eleifend leo eros eu tortor. === Mollia finibus === In mollis mauris ante, ac tincidunt neque faucibus eu. Nullam faucibus risus ut magna rhoncus venenatis. Duis ullamcorper nec risus at pulvinar. In elementum at tortor tincidunt maximus. Nullam vitae gravida dui. Morbi rutrum diam eu nulla porttitor cursus. Fusce vel urna sit amet risus facilisis volutpat vitae non purus. Integer mattis nec nisi eu placerat. Quisque commodo suscipit dui a blandit. Donec sagittis leo arcu, vitae cursus neque sollicitudin eget. Maecenas id sem aliquet, molestie elit bibendum, lobortis felis. Vivamus finibus est ac hendrerit auctor. Phasellus dictum consectetur ex pellentesque dapibus. Aliquam volutpat arcu vitae nibh pretium, sed sodales enim ornare. Sed a erat enim. Aliquam quam elit, rutrum et neque euismod, fermentum faucibus risus. Morbi tincidunt sed mi nec tempor. Integer ullamcorper quam id mauris vulputate vulputate. Pellentesque id auctor sem. == Aenean vivamus pellentesque morbi == === Non luctus === Aenean non purus maximus risus imperdiet mollis. Aenean non dui erat. Morbi aliquet velit quam, quis semper lacus posuere venenatis. Integer id nulla nibh. Donec felis ex, faucibus at sem at, commodo dignissim lorem. Pellentesque ipsum urna, eleifend et felis vitae, viverra tincidunt urna. Ut ex felis, vestibulum et sapien sed, finibus rutrum justo. Donec viverra pellentesque nisl at elementum. Quisque blandit, ipsum placerat scelerisque tincidunt, nibh lacus euismod metus, sed eleifend ipsum libero non enim. Vivamus luctus vestibulum faucibus. Cras tempus felis id odio sodales consectetur. Cras orci nisi, viverra quis mi vitae, pretium consectetur dui. Phasellus euismod felis eu sem ultricies sodales. Integer eget mollis velit, eget pretium purus. Morbi laoreet, dolor ut fringilla egestas, ipsum orci tincidunt tellus, a egestas neque tellus sed purus. Nulla sagittis vitae nibh quis dictum. Aliquam sagittis dolor nibh, eu euismod odio gravida nec. Donec varius efficitur justo. Integer sit amet arcu sollicitudin, scelerisque est sed, accumsan est. === Vel est === Pellentesque vel euismod leo. Nulla mauris sem, vehicula fermentum nibh vel, hendrerit vestibulum tellus. Cras dignissim at lacus in porta. Nunc a vulputate quam, eu pulvinar ex. Sed vitae leo sit amet justo varius varius vel sed elit. Sed viverra orci non erat ultricies, vel tristique magna tincidunt. Aenean viverra ligula ligula. Vestibulum malesuada, eros sed varius aliquam, magna purus laoreet tortor, non tempus dui erat sit amet nunc. Proin accumsan nulla mattis lorem congue dignissim. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Ex ==== Morbi est ex, dictum ac neque nec, iaculis lobortis lacus. Cras sit amet consectetur est, vitae condimentum eros. Maecenas non sapien ligula. Nam laoreet eget eros in blandit. Quisque hendrerit velit at nisl tincidunt volutpat. Phasellus ac felis nisi. Proin mattis ante ac magna porta placerat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. == In nullam == In leo velit, lacinia in ligula quis, semper maximus dui. Pellentesque cursus congue dolor ut tristique. Fusce accumsan placerat facilisis. Vivamus pellentesque purus ut nisl laoreet accumsan. Nunc in mi vehicula leo ultrices sodales id ac dui. Fusce gravida at ante sed tincidunt. Maecenas at dui bibendum, condimentum tellus at, faucibus est. Donec molestie in est posuere aliquet. Donec id aliquam arcu, in cursus sem. === Nec === Nullam nec vulputate enim, quis efficitur libero. Mauris sit amet cursus sem, at ultrices metus. Duis sit amet aliquet diam, eget faucibus neque. Duis consequat rutrum auctor. Proin ullamcorper vehicula ex sed finibus. Nulla efficitur sem non eros varius dapibus. Maecenas posuere tortor at tempus dignissim. Nunc varius in dolor ut interdum. Morbi imperdiet urna in felis congue pellentesque. Donec dictum a quam nec venenatis. Nam id vestibulum ipsum, nec elementum orci. Quisque dignissim tincidunt dolor, et maximus augue bibendum eget. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam interdum placerat scelerisque. Nam tristique varius tempus. == Maecenas aliquam vivamus quisque aenean == === Id erat et === Maecenas id elit felis. Maecenas felis velit, aliquam volutpat felis non, efficitur elementum purus. Donec lobortis ultricies vehicula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget nisl viverra, dapibus nisl consectetur, venenatis nisi. Sed et turpis gravida, dignissim mauris ut, faucibus elit. Sed viverra quam id magna lacinia, id congue tellus luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque sodales ac leo sed iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras hendrerit, magna mattis tempus laoreet, augue nunc vehicula odio, vitae dapibus erat leo nec enim. Phasellus vel ex arcu. Sed ut fringilla augue. Aliquam erat volutpat. Nulla suscipit lectus metus, nec aliquet diam lobortis id. Aenean et mattis diam, in molestie lectus. Curabitur faucibus enim semper lectus molestie, a tincidunt nisl efficitur. Vestibulum tortor sem, mattis sit amet semper at, cursus ut arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam ut mi ut neque egestas varius. Nam sollicitudin finibus dapibus. Sed cursus iaculis mi in sagittis. Vestibulum cursus eros a blandit hendrerit. Cras vitae efficitur nisi. Suspendisse eu odio vel sapien consectetur condimentum. Integer rutrum ullamcorper ligula tincidunt varius. Praesent nec pellentesque massa. Phasellus nec fringilla nunc. Mauris finibus purus non vulputate tempus. ==== Tellus ==== Vivamus et tellus massa. Morbi fringilla sapien eu felis luctus vehicula. Duis arcu dolor, fermentum quis gravida et, imperdiet id urna. Maecenas turpis elit, ultricies nec purus eu, egestas ornare nunc. Pellentesque sagittis, lectus a semper dignissim, mi ipsum pulvinar eros, in viverra urna sapien ac nibh. Fusce ex ipsum, pulvinar eu purus nec, viverra pellentesque lectus. In sodales varius lectus, ut faucibus massa suscipit sed. Integer dictum, leo tempus sagittis varius, augue quam feugiat elit, sit amet iaculis turpis quam eget neque. Cras elit arcu, volutpat eget tempus vitae, ultricies sit amet sem. Nullam eu molestie quam. Nullam non velit vel dolor ultrices elementum quis id velit. Sed et ligula mauris. Ut libero lacus, viverra vel faucibus sit amet, varius sit amet mauris. Morbi ultrices facilisis pulvinar. Donec dictum risus sit amet leo tristique porta ut sed nisl. === At posuere === Quisque at tellus posuere, posuere orci vitae, consequat velit. Ut nisl nisl, consequat at posuere in, pulvinar id ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi nisi justo, posuere vitae mi a, feugiat faucibus ex. Aenean eu odio felis. Vestibulum eros metus, accumsan nec risus ut, facilisis finibus nibh. Pellentesque bibendum id urna sed tempus. Sed in ornare orci. Aliquam cursus condimentum mollis. Aenean tempor venenatis quam in condimentum. Pellentesque id elit in eros eleifend malesuada vitae ac magna. Sed vel est sit amet mi porttitor consequat quis id purus. Maecenas sit amet eros tristique, pellentesque tortor ac, fringilla dolor. Aenean posuere nunc ac ipsum blandit venenatis. Ut vestibulum felis non lectus vestibulum, et tincidunt lacus vehicula. Vestibulum aliquet quis justo et fermentum. Sed sed enim lobortis lacus fermentum pretium. Proin consequat velit non dolor eleifend, nec maximus dui mattis. Donec pellentesque leo arcu, eget vestibulum velit varius in. Aenean et viverra urna, feugiat faucibus ligula. Suspendisse efficitur commodo mi, tristique bibendum velit vehicula nec. Duis iaculis non risus ut ornare. == Vivamus nunc nulla nunc == === Dictum commodo === Vivamus dictum nisi ac quam fringilla sagittis. Vestibulum augue felis, gravida ac blandit ac, faucibus congue turpis. Integer fringilla lacus lectus, nec egestas sapien vestibulum vitae. Curabitur eu nibh malesuada, dapibus est vitae, sagittis mi. In est tortor, pulvinar at aliquet in, suscipit dignissim ipsum. Suspendisse dignissim ligula vel bibendum aliquam. Nam quis rutrum odio. Quisque sagittis nibh vitae lorem accumsan consequat. Morbi congue malesuada suscipit. Curabitur in luctus diam. Duis tempor et leo sed euismod. Etiam lacinia vehicula ligula sit amet pulvinar. ==== Sit ==== Nunc commodo sit amet mauris sit amet pretium. Nam venenatis eu dui sit amet hendrerit. Vivamus ac enim porta, tempor arcu at, venenatis neque. Donec quis urna in nisl molestie tincidunt. Morbi finibus vitae ex a posuere. Proin condimentum dignissim tempus. Suspendisse rutrum diam massa, non aliquet lacus maximus non. Nulla lorem neque, scelerisque eget velit non, consequat condimentum sem. Aenean vel odio erat. Cras aliquam in quam vehicula tristique. Phasellus aliquam lacinia fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc vestibulum congue magna, ac congue diam suscipit in. === Cursus porttitor === Nulla cursus ornare tempus. Duis tempor ligula risus, a placerat dolor bibendum eleifend. Duis id rutrum eros, eget ultricies mi. Duis vitae quam magna. Aliquam sollicitudin, felis sit amet viverra condimentum, odio libero commodo mi, id accumsan neque lacus sit amet tellus. Nunc facilisis eget sem sed pharetra. Pellentesque tempus tincidunt libero quis mattis. Vivamus consectetur finibus libero eget malesuada. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Varius ==== Nunc porttitor varius nisi molestie tristique. Vivamus accumsan mi eu metus consectetur, id gravida risus luctus. Donec ullamcorper malesuada placerat. Mauris varius ante scelerisque, laoreet lacus vitae, ullamcorper ipsum. Integer non sodales massa. Aliquam ac fermentum massa. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum vitae risus ultrices, volutpat urna eget, semper urna. Sed faucibus turpis in turpis congue, id laoreet ante tincidunt. Nulla sit amet ante blandit, pellentesque ante quis, feugiat enim. Sed tristique venenatis vehicula. Sed vel tellus et orci facilisis cursus vel nec quam. Ut vitae ipsum ante. Aliquam sit amet molestie mi, ut vestibulum risus. Donec ac lacus mauris. == Maecenas aliquam nulla proin vestibulum phasellus == === Pharetra nec sollicitudin === Maecenas pharetra auctor sem a aliquet. Donec fringilla eleifend quam vitae euismod. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas luctus nisi quis lectus vestibulum tempor. Donec dapibus sem mauris, non rhoncus neque rutrum id. Nunc sollicitudin sollicitudin enim. Aliquam vitae massa velit. Cras nibh est, rhoncus euismod faucibus sit amet, finibus vel tortor. Morbi scelerisque urna mi, ut suscipit sem iaculis eu. Quisque in lorem diam. Sed eget leo condimentum, ultrices ex eget, iaculis tortor. Cras convallis erat at leo lacinia laoreet. Praesent mattis accumsan pharetra. ==== Diam at ==== Aliquam nec diam risus. Pellentesque eu dui eros. Donec faucibus maximus egestas. Nam pulvinar suscipit nisi sit amet luctus. Proin gravida eleifend ex id placerat. Maecenas iaculis felis ipsum, ac rutrum nulla cursus nec. Vestibulum laoreet arcu in nibh vehicula congue. Suspendisse ac porttitor nisi. Sed fermentum nibh lacus, sit amet tincidunt orci mattis nec. Aliquam auctor turpis quis malesuada lacinia. Nam tempor tortor sem, sit amet semper nisi molestie at. Praesent at rhoncus dolor. Vestibulum a lacus eu dolor malesuada hendrerit a vitae elit. In vel pellentesque mauris. Cras ac quam et sem ultricies tincidunt. Nulla sollicitudin at sapien nec tempor. Sed mollis quis augue id faucibus. Integer eget pharetra metus. Donec vel ullamcorper purus. Cras elit est, porta quis tincidunt vestibulum, facilisis at est. Ut semper porttitor erat, vitae lacinia tellus scelerisque eu. Fusce massa tellus, consectetur quis neque vitae, viverra eleifend ipsum. Nam sed congue neque. Nulla imperdiet justo eget lacus elementum malesuada. === Vitae laoreet ac === Proin vitae metus enim. Cras feugiat ornare erat, sed efficitur leo sodales in. Quisque dictum et leo at tincidunt. Curabitur non lacus ut turpis suscipit interdum sit amet eget metus. Donec quis ante justo. Mauris faucibus, lorem ornare porttitor posuere, ante nibh ullamcorper arcu, vel finibus orci elit vel erat. Nunc leo erat, sagittis et tincidunt id, dapibus nec risus. Ut et nunc scelerisque, varius quam eget, auctor nisl. Ut quis augue in diam dapibus malesuada nec vitae elit. Cras viverra fermentum quam non auctor. ==== Dui ultricies ==== Vestibulum laoreet dui sit amet rutrum posuere. Aliquam aliquam elementum turpis, sit amet tincidunt leo efficitur non. Sed nec mauris aliquam massa congue tempus tempus non quam. Quisque tincidunt tellus at augue suscipit vulputate. Nam augue nisi, consectetur ac tempor et, ultrices sit amet est. Fusce eu urna eget nisl rhoncus vulputate. Nulla facilisis augue sit amet augue fermentum finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. In volutpat enim quis nisi interdum, in semper nulla luctus. Suspendisse interdum ut odio nec rhoncus. Curabitur quis enim sodales, iaculis quam vitae, iaculis magna. Suspendisse potenti. Sed feugiat pulvinar facilisis. Praesent lorem nibh, mattis eu felis id, rutrum condimentum sapien. Phasellus ac ultricies turpis, sed vulputate erat. Curabitur sed lorem eget sem ultricies sodales quis a mi. Aenean justo nibh, varius eu magna non, vehicula porttitor lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla egestas nisi tellus, et consequat velit molestie non. Sed convallis augue ut lectus venenatis rutrum. Vivamus ultricies auctor nulla, faucibus ultricies lacus sodales ac. In vel erat porttitor, cursus leo ut, bibendum diam. Nam vel augue a elit sodales euismod. Aenean vel scelerisque nisl. Donec sed orci nec nibh porttitor tempus ut ut velit. == Fusce in nunc nunc == Fusce iaculis fringilla diam, id condimentum ante tincidunt sed. Nunc sollicitudin vitae nibh et venenatis. Integer in ex sit amet dolor volutpat vehicula sit amet at augue. Curabitur efficitur pharetra interdum. Nunc euismod volutpat magna, et elementum sem lacinia ac. Sed eu magna feugiat justo vulputate posuere ac ac mi. Pellentesque eu dictum leo, facilisis ultrices ligula. Maecenas tincidunt laoreet odio. Donec maximus risus eget risus malesuada, id tincidunt lacus malesuada. Curabitur non imperdiet leo. Duis vel convallis enim. Pellentesque tristique sem at nibh pharetra, vel aliquet neque suscipit. Aliquam dolor mauris, placerat a bibendum a, sollicitudin sollicitudin erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur nec est in erat ultricies facilisis. Curabitur eget vestibulum leo. === Vitae viverra aliquam === In vitae sodales neque, in commodo neque. Sed sollicitudin auctor metus et iaculis. Nam ultricies sagittis vehicula. Nulla iaculis fringilla elit at interdum. Donec at tortor faucibus, imperdiet nulla vitae, vestibulum purus. Mauris sed ullamcorper ante, eget imperdiet nibh. Duis sit amet urna leo. Curabitur egestas nibh ut laoreet elementum. Mauris tincidunt leo arcu, eu pharetra felis mollis at. Donec lacus erat, egestas et egestas lobortis, lobortis sed leo. Nunc viverra libero elementum ligula maximus, ut congue enim sagittis. Fusce et est diam. Sed facilisis odio eget sem mattis sagittis. Integer tincidunt orci vitae libero porta ullamcorper. Nunc mauris lorem, lacinia in mollis sit amet, malesuada nec elit. Proin aliquam sapien in dolor tristique, pulvinar volutpat lectus aliquam. Phasellus consequat ullamcorper massa at porta. Integer et pellentesque ante. Duis ac dolor ipsum. Donec sagittis magna eget ex lobortis consequat. Phasellus consectetur tortor volutpat diam cursus vehicula. In in efficitur ligula. Nunc aliquam vitae est quis bibendum. Phasellus porttitor lectus vitae egestas rutrum. In vel imperdiet libero. Ut eget mattis ante, eget ultricies mauris. Nulla vestibulum faucibus metus sed bibendum. Integer facilisis dapibus elit ut cursus. Nullam iaculis tempus ante non commodo. Nullam placerat feugiat elit. Proin cursus nisi turpis. == Etiam pellentesque praesent suspendisse suspendisse == === Sit vel === Etiam sit amet urna nec ligula commodo tempus. Fusce venenatis velit vitae arcu porta, sed eleifend neque egestas. Morbi sit amet nunc a lacus mattis luctus. Proin eget dolor sodales risus lobortis tempor. Etiam vulputate finibus neque. Phasellus non felis eget ligula auctor varius. Fusce enim mauris, vestibulum eu cursus id, suscipit id nisi. Sed magna leo, eleifend sed ultrices nec, efficitur eu ex. Ut sit amet egestas sapien, a viverra velit. Duis sit amet neque nec odio commodo sollicitudin. Nam elementum tincidunt varius. Quisque imperdiet finibus quam a sagittis. Duis vel enim sed ligula accumsan ullamcorper. Proin sit amet augue ac risus vestibulum porttitor. Vestibulum et lorem dictum, eleifend sapien a, elementum sem. ==== Odio ==== Pellentesque vel odio hendrerit, congue enim at, tincidunt quam. Suspendisse at bibendum nunc, a malesuada risus. Donec tempor felis quam, sit amet interdum odio dignissim at. Pellentesque nec semper odio, in condimentum libero. Quisque sed tellus facilisis, fringilla turpis vel, pulvinar mi. Sed feugiat pretium orci, sit amet dignissim lorem cursus sit amet. In hac habitasse platea dictumst. Nullam maximus ex sit amet erat mattis, at sodales turpis molestie. Nam maximus eros est, sed mollis libero ullamcorper eu. Vivamus porttitor at orci vel scelerisque. Nullam finibus purus quis ex pharetra, vitae porta nisi scelerisque. Aliquam posuere ullamcorper dui sed luctus. === Vulputate mollis a === Praesent vulputate eget enim eu feugiat. Curabitur suscipit diam erat, in facilisis nisi scelerisque at. Cras nec libero ut sem condimentum iaculis. Integer vitae imperdiet metus. Nulla aliquet felis vitae pulvinar egestas. Quisque mattis nunc augue, ut dignissim elit luctus vel. Pellentesque consequat blandit euismod. Fusce rutrum accumsan lacinia. Nunc efficitur, nibh eu porttitor vehicula, tortor est luctus augue, a sollicitudin elit sem vel ante. Nullam dapibus nisl odio, ut molestie eros vestibulum quis. Donec hendrerit, urna vel accumsan imperdiet, odio neque aliquam velit, et dictum magna nisi a risus. Proin iaculis tortor sagittis arcu placerat, sed tempor enim pulvinar. Morbi vitae vulputate nulla, id condimentum nibh. ==== Tortor ==== Suspendisse mollis tortor felis, vel bibendum elit malesuada vitae. Aliquam consequat, velit nec ornare gravida, nisl justo bibendum tellus, ut cursus urna lacus quis nulla. Sed gravida vestibulum elit nec sollicitudin. Sed vitae vestibulum ex, a malesuada massa. Vestibulum lacinia lacinia fringilla. Pellentesque nec ultricies enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sit amet lectus elit. Phasellus neque risus, blandit id finibus vel, ullamcorper vitae nibh. Phasellus sem odio, volutpat et sapien at, viverra scelerisque lorem. Integer nec maximus ipsum. ==== Magna ==== Suspendisse a magna bibendum, molestie turpis non, placerat tellus. Nunc ut purus non tellus ultricies finibus in vel ipsum. Sed at aliquet arcu. Etiam tincidunt ullamcorper turpis vitae pellentesque. Quisque quis nisl tortor. Curabitur sed dictum metus. Ut iaculis magna sodales velit malesuada, eget auctor ipsum fermentum. Aenean molestie tortor sit amet orci molestie convallis. Sed eleifend est nec felis vestibulum, vitae cursus enim ultrices. Morbi sagittis sed nisi sed accumsan. == Donec vestibulum ut donec nam sed curabitur == Donec at faucibus libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pretium dui ut risus mollis, a molestie ligula euismod. Curabitur eu erat pharetra, rutrum tortor vitae, dignissim dui. Maecenas viverra egestas turpis ut faucibus. Pellentesque aliquam fermentum tortor eu hendrerit. Sed metus mauris, dictum ac aliquet aliquam, malesuada at tortor. Donec venenatis libero sed mauris mollis suscipit. Maecenas consectetur eleifend rhoncus. === Ante elit === Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Duis hendrerit commodo velit id varius. Aenean ut tincidunt tortor. Phasellus ut laoreet turpis. Nulla scelerisque est a tincidunt eleifend. Praesent nec fermentum nisi. Donec suscipit lacus at sagittis aliquam. ==== Magna ==== Ut elit magna, interdum at commodo a, sagittis vel leo. Vestibulum aliquet est efficitur ligula pellentesque posuere. Sed vel aliquam libero, a tempor ligula. Praesent commodo, diam non ullamcorper gravida, ligula magna placerat velit, ut condimentum lorem nunc at tellus. Nunc cursus lorem sed ipsum dapibus sodales. Donec venenatis efficitur est nec lacinia. Etiam semper, lacus elementum aliquam sagittis, dui mauris mattis turpis, vitae mattis augue erat ut est. Fusce a tortor lectus. Morbi sed dui a arcu mattis finibus rutrum vel odio. Aenean eleifend faucibus leo, at condimentum nisi euismod at. Fusce pulvinar ante in odio aliquam, at lacinia nisi viverra. Fusce urna leo, pharetra eu malesuada quis, sollicitudin at lectus. === At euismod === Donec at neque rutrum, volutpat leo dictum, hendrerit tellus. Ut aliquam, quam nec malesuada imperdiet, tortor sem pharetra massa, quis tempus eros tortor vel libero. Phasellus in erat enim. Nunc at dapibus leo, id auctor massa. Proin et augue ante. Phasellus semper fringilla tortor nec cursus. Sed vehicula ex dignissim, blandit nibh at, tristique mauris. Nulla eu nisl vel elit mattis imperdiet. ==== Viverra ==== Nam euismod viverra condimentum. Duis et scelerisque diam. Curabitur imperdiet enim arcu, at elementum arcu venenatis ac. Vivamus venenatis arcu eu orci consectetur, a suscipit lacus tristique. Fusce vel lorem elementum, sollicitudin ipsum ut, interdum augue. Sed convallis varius velit, pretium volutpat odio venenatis eu. Sed id euismod augue. Duis volutpat, elit sed auctor eleifend, orci lectus iaculis mi, vel porttitor erat quam a augue. Etiam in mi consectetur, vehicula nunc sed, aliquam justo. Phasellus suscipit bibendum tellus nec pulvinar. Nulla vulputate in libero in rutrum. === Egestas a === Sed egestas eros nec ex aliquam, eget porta ligula euismod. Duis vitae erat non erat ornare facilisis quis eu justo. Nunc et mi a magna pretium eleifend eget pretium est. Nulla vel consectetur ante. Integer non dui a nisl tincidunt auctor. Phasellus quis ex magna. Phasellus sollicitudin tellus et aliquet facilisis. Aliquam arcu orci, lobortis in turpis vel, pulvinar vehicula ligula. Praesent tortor purus, faucibus quis tortor ut, luctus consectetur neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam sed turpis ac mi vestibulum finibus. Maecenas ullamcorper accumsan velit, sed porta neque tempor ornare. Praesent blandit ultrices lorem vel imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras feugiat luctus felis eu aliquet. Ut quis pellentesque diam, eget facilisis augue. ==== Est ==== Curabitur a est eu ipsum lobortis ultrices eget at erat. Curabitur venenatis convallis velit sed mollis. Morbi congue luctus quam, non semper nisi dignissim quis. Aenean eleifend enim ultrices nunc ullamcorper porta. Integer magna felis, vestibulum a suscipit a, pharetra ut leo. Sed eget magna non purus gravida feugiat. Morbi feugiat lorem orci, ac commodo orci viverra ut. Vivamus euismod felis at dolor accumsan fringilla. Nullam ut massa sed turpis imperdiet tempus et non quam. Sed ut urna vel risus tempus finibus. Nulla ut metus iaculis, molestie arcu id, tempor libero. Nam laoreet non nisl ut iaculis. Praesent aliquam mauris velit. Maecenas fermentum vulputate tincidunt. Suspendisse vitae ante a turpis hendrerit pellentesque vel eget tortor. Mauris fermentum nibh leo, ac tristique tellus ultricies a. == Integer in integer pellentesque donec == Integer venenatis, ligula iaculis efficitur eleifend, justo turpis finibus tortor, eget accumsan nulla orci non eros. Etiam dictum ipsum ac dui commodo vehicula. Vivamus vel ultrices leo, quis tempus urna. Aenean finibus felis lacus, at iaculis erat tempor a. Etiam nec cursus diam, nec tincidunt dolor. Sed hendrerit faucibus turpis eget blandit. Donec a nunc id quam faucibus semper. In non blandit urna. Vivamus consectetur quis nunc eu lobortis. Aliquam consequat mauris at lorem venenatis, a rhoncus sapien facilisis. Cras nisl nulla, tincidunt consectetur elit eget, pretium vestibulum massa. Integer vitae nisi sit amet purus aliquam ultricies sit amet sit amet elit. Proin vel lorem ipsum. Praesent a dui dolor. Nullam eu blandit felis. Maecenas massa quam, venenatis sed lorem vel, accumsan sollicitudin nisl. === Accumsan elementum rhoncus vitae === In accumsan dapibus quam non gravida. Praesent pellentesque est libero, nec accumsan erat venenatis id. Morbi sagittis posuere tortor, sit amet fringilla sapien iaculis in. Nulla facilisi. Morbi urna purus, sollicitudin ut bibendum vitae, congue non nibh. Aliquam orci quam, tincidunt in bibendum ut, congue quis tortor. Proin varius, dolor id semper tincidunt, leo tortor ullamcorper dui, et pharetra mi nisl id nulla. Quisque eu egestas elit. ==== Condimentum quam ==== Integer elementum condimentum lacus, id venenatis sem dictum quis. Phasellus sed posuere ante, at vehicula dui. Sed nec semper tortor, vitae mollis ante. Quisque turpis eros, tempus vel egestas a, dapibus vitae justo. Praesent magna augue, pharetra eu velit et, sagittis pellentesque sapien. Duis suscipit egestas risus a sagittis. Proin mattis lacus eu lorem fringilla congue. Proin aliquam gravida enim, sed feugiat metus malesuada id. Pellentesque rhoncus quam sem. Fusce et quam cursus, sodales dui ac, commodo tortor. Cras quis urna at sapien vehicula vulputate vel at ex. Ut iaculis mauris nec rutrum rhoncus. Suspendisse dapibus, erat in bibendum fermentum, nunc diam rutrum lacus, non varius tellus libero et tortor. Nullam vel lacus non neque condimentum commodo convallis at sapien. Aenean ornare pellentesque nibh ut pellentesque. Cras ligula massa, rhoncus nec accumsan vitae, fringilla pretium ante. Quisque sit amet velit dignissim, ullamcorper justo quis, euismod neque. Vivamus ac finibus neque, vel volutpat eros. Duis luctus at tortor sed fringilla. ==== Ante ==== Donec vitae ante non nibh tristique viverra non id odio. Morbi tincidunt bibendum vestibulum. Aliquam erat massa, lacinia et bibendum in, aliquam quis elit. Pellentesque ut purus leo. Aenean fermentum ipsum ut neque varius interdum. Sed vitae malesuada nisl. Pellentesque volutpat, neque eget mattis pellentesque, quam justo viverra nulla, vel gravida felis tortor vel dui. Phasellus sit amet eros id arcu eleifend fringilla. Nam rhoncus erat lacinia magna iaculis placerat. Suspendisse convallis consectetur ante ac finibus. Duis ultricies commodo diam, et tempus metus aliquam non. Vestibulum et aliquet arcu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque suscipit mauris id elementum eleifend. Praesent consectetur est eu metus porta scelerisque. Donec tincidunt tellus ut condimentum ornare. == Sed quisque orci vestibulum == Sed interdum arcu eget tristique sollicitudin. Nam sit amet orci id sapien condimentum bibendum at euismod magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus tincidunt lacus a gravida mattis. Nam commodo sem ut justo porttitor tristique. Sed tincidunt lacinia mauris sed dapibus. Suspendisse vel nunc vitae odio ultricies interdum. Nulla id lobortis sapien, vel lacinia augue. In et aliquet ligula, nec dignissim nisl. Fusce eget semper ipsum, a venenatis sapien. Aenean nec commodo nibh. Suspendisse commodo lectus iaculis justo vehicula, vitae imperdiet purus lacinia. Integer tincidunt neque id enim sollicitudin tempor. Sed viverra volutpat velit id sodales. Fusce eget fermentum tellus, eget malesuada tortor. === Dolor varius consectetur === Quisque dolor tortor, vestibulum in lectus eget, elementum egestas ex. Quisque malesuada commodo orci, sit amet dapibus nisi lobortis nec. Curabitur eleifend, metus a mattis eleifend, arcu lacus ornare metus, a finibus enim nisl et libero. Fusce vehicula vitae sapien sed rutrum. Proin magna magna, volutpat ac lectus eget, tempus posuere magna. Nulla condimentum volutpat orci, placerat aliquam metus porttitor quis. Nullam quam orci, feugiat id purus sed, suscipit bibendum nibh. Sed nisl urna, cursus in finibus bibendum, sodales ac urna. Sed vitae bibendum justo. In cursus et est vel cursus. Integer viverra massa sed hendrerit tincidunt. Donec et dolor sed augue eleifend mattis sed in nulla. Ut laoreet enim augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec at mi molestie, aliquam ex eget, interdum orci. Proin porta leo vitae est tristique, eget rutrum est aliquam. Proin porta pulvinar nunc, sit amet pellentesque libero pulvinar eget. Vivamus et tincidunt ex. Donec a eros placerat tellus ultricies dignissim vitae non tellus. Proin dapibus ornare libero, eu blandit mi blandit et. Praesent rhoncus et eros in suscipit. Proin id efficitur lectus. Nullam mollis odio semper, bibendum lectus quis, venenatis erat. Phasellus sed ultrices purus. Integer ultricies iaculis lorem id interdum. Proin sed nisl quis neque ultricies facilisis sit amet non lectus. Donec mattis risus lectus, ac elementum erat scelerisque non. Nulla ac leo malesuada, sodales eros pellentesque, pulvinar leo. Nulla at nunc nibh. ==== Lectus ==== Vestibulum consectetur lectus eu ultricies porttitor. Donec consectetur vestibulum malesuada. Phasellus a erat non elit egestas aliquet. Phasellus a nibh id dui rhoncus aliquam. Etiam aliquam magna tellus. Cras sit amet vulputate risus. Maecenas enim urna, blandit nec augue vitae, congue dapibus turpis. Fusce porttitor mauris at efficitur sodales. Donec ex felis, vehicula a sapien a, viverra pellentesque felis. Nunc iaculis suscipit sem, a auctor sapien aliquet vel. == Quisque donec nulla == Quisque lobortis augue sed malesuada lacinia. Aenean venenatis feugiat vestibulum. Vivamus posuere dui urna, vel scelerisque ex pretium sed. Duis quam mauris, congue vitae tellus in, malesuada posuere ipsum. Praesent consequat orci eget velit tristique, non ultrices nisi lobortis. Aliquam massa felis, interdum pulvinar leo ut, eleifend vestibulum magna. Nam lacinia pharetra ultrices. Maecenas pulvinar malesuada consectetur. Etiam venenatis tempus lectus. Nulla a tincidunt tortor. === Pretium in === Donec pretium pellentesque tincidunt. Cras nec neque eu arcu convallis porttitor. Phasellus dolor metus, egestas convallis lacus eu, mollis posuere nulla. Aliquam a eleifend tellus, eget congue metus. Donec libero enim, pellentesque sed enim at, tristique euismod nunc. Donec fringilla lectus a efficitur scelerisque. Suspendisse pretium nulla imperdiet ex faucibus, a viverra velit euismod. Nam eget eros non purus volutpat egestas. Nullam consectetur ac nunc in feugiat. Vivamus a imperdiet ante. Aliquam tempus, felis ut auctor efficitur, turpis mauris egestas arcu, feugiat malesuada velit felis a magna. ==== Turpis ==== Nulla in turpis sit amet dui dignissim sagittis. Pellentesque eget urna lectus. Maecenas eu fringilla libero. Ut hendrerit libero faucibus tellus dapibus, non semper neque varius. Sed eget venenatis sapien, quis finibus orci. Sed tincidunt pellentesque placerat. Cras vel est ornare, ultrices lacus nec, pharetra ex. Mauris sit amet nulla vitae nisl tristique dignissim rutrum at tellus. Nam molestie vestibulum nisl sit amet euismod. Sed cursus pellentesque varius. Sed bibendum libero sit amet elit placerat, id commodo mauris facilisis. Nunc tincidunt, libero sed accumsan condimentum, lorem ligula pellentesque ex, vitae pretium mauris nibh non libero. Vestibulum non elementum lacus, sed fermentum lorem. Sed molestie pharetra neque. In euismod sit amet tellus sit amet viverra. Nullam ornare bibendum mollis. Ut eget fermentum mauris, eu efficitur metus. Sed varius euismod nulla. Proin pulvinar justo mauris, nec auctor lorem tincidunt non. Quisque sit amet aliquet nunc. Duis quis nisl ut nibh semper aliquet non vitae neque. Ut faucibus nibh ut arcu condimentum, eu suscipit nulla mollis. Morbi nec neque egestas, egestas sem et, fringilla augue. Etiam pharetra, magna et lobortis scelerisque, lacus nisi gravida metus, volutpat dignissim lorem elit ac metus. Fusce nec enim in nunc blandit fermentum eu eu mauris. In quis aliquet leo. Duis risus felis, mattis vitae lobortis a, lobortis et erat. Donec semper turpis metus, sit amet vestibulum tortor dictum vitae. Sed pretium cursus nulla. Nullam pellentesque vitae est et vulputate. Aliquam lorem est, congue elementum maximus a, lobortis a nibh. Sed ac porta velit. Curabitur rhoncus scelerisque risus nec viverra. Duis condimentum quam ac tortor dictum posuere. Mauris ullamcorper elementum efficitur. Fusce dapibus consectetur velit, vitae eleifend dolor elementum nec. Duis pulvinar interdum posuere. Nunc augue magna, fringilla eu odio in, consequat laoreet augue. Vestibulum ut sem condimentum, tempus metus vitae, ullamcorper est. Vestibulum nunc nulla, faucibus placerat mi sed, congue posuere felis. Curabitur nec ornare felis, quis vehicula risus. Praesent tristique urna ut malesuada semper. Donec quam tellus, fringilla nec efficitur ac, mattis nec nisl. Aliquam convallis, dui sit amet consectetur tempor, magna ante lobortis elit, nec cursus ex arcu eu dolor. Nullam sagittis leo nec purus auctor imperdiet. Nam maximus tempor sem vel lobortis. Pellentesque feugiat purus venenatis neque tincidunt, eget imperdiet risus condimentum. Cras sed tempor est. In augue mauris, consectetur vel erat at, tempus scelerisque lacus. Sed gravida urna eget enim laoreet tempus. Vestibulum pellentesque cursus tellus, semper fermentum arcu sollicitudin quis. Nulla non placerat ex, interdum tincidunt turpis. Integer eu lorem at nunc sollicitudin finibus eget id sapien. Donec aliquam dolor augue, eget maximus eros auctor id. Pellentesque et est ac odio dignissim dapibus. Vestibulum nec tellus facilisis, dictum turpis vel, cursus ante. Vivamus bibendum tortor semper, consequat mauris ut, ullamcorper arcu. Vivamus non dui in augue rhoncus aliquam. Quisque eget quam velit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus vitae pretium magna, facilisis mollis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus dictum diam, lobortis aliquam mi pulvinar et. Nunc ornare, odio a blandit aliquet, dolor massa blandit dui, vitae lobortis odio ligula bibendum mauris. Sed molestie, ante vitae fringilla vulputate, felis metus euismod nulla, nec ultrices arcu lectus ac nibh. Etiam ac nisi a nisl consequat vestibulum quis ut eros. Donec elit ligula, lacinia in maximus non, aliquam ut massa. Sed vitae diam hendrerit, commodo dui et, facilisis sapien. Maecenas erat urna, consequat a tempor vitae, gravida in lectus. Ut maximus sollicitudin sem id dapibus. Nullam id dolor tortor. Aliquam erat volutpat. Proin nec tristique ante. Ut finibus felis ac dapibus malesuada. Nunc egestas molestie urna ac placerat. Vestibulum tempor nec urna sit amet finibus. Quisque consequat convallis sem, quis consectetur lectus blandit non. Etiam risus metus, feugiat at eleifend eu, mattis quis quam. Integer sit amet tempus orci. Cras in lacus non enim rhoncus consectetur. Pellentesque rhoncus in metus id dictum. Nulla sed lectus felis. Morbi est quam, vestibulum ut fermentum vel, aliquam eget tortor. Praesent ut finibus enim, nec congue risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris dictum velit at massa sagittis, a vulputate arcu lobortis. Etiam felis elit, tempor id lacinia sit amet, malesuada in sapien. Donec lacus augue, pulvinar eget augue quis, finibus convallis mauris. Phasellus lorem augue, ultricies sit amet auctor a, maximus eu urna. Cras vel felis quis neque fringilla accumsan. Curabitur magna tortor, varius nec nisl at, sagittis aliquam magna. Aliquam id nunc semper, efficitur lorem eu, pharetra purus. Nulla sed vulputate massa. Nam blandit purus quis lectus molestie, venenatis bibendum velit cursus. Suspendisse varius orci et nunc mollis, vitae vestibulum leo lacinia. Ut imperdiet ut odio vel tempor. Nulla ante nunc, vulputate nec interdum nec, interdum id ligula. Duis ullamcorper est eu velit bibendum egestas. Proin lacinia metus dolor, id imperdiet nulla scelerisque et. Fusce varius augue tristique mauris congue, sit amet feugiat nibh ultricies. Proin ornare, felis a vehicula elementum, sem nunc porta ante, at pretium libero massa cursus mi. Morbi sem sem, pellentesque ut quam nec, mattis consectetur quam. Fusce sit amet lobortis felis. Suspendisse est ante, dictum vel malesuada vel, vulputate et purus. Suspendisse vitae ultricies enim. Nunc mollis blandit eleifend. Donec dapibus congue aliquam. Duis purus sem, porta vel purus ut, rhoncus eleifend ante. Morbi finibus faucibus augue vel laoreet. Vestibulum quis pellentesque turpis, eget molestie ex. Pellentesque sed lorem non augue congue placerat. Nullam finibus egestas quam, quis maximus est pulvinar sed. Praesent nec orci sem. Vivamus ullamcorper tincidunt molestie. Nunc sit amet ornare libero, et blandit ante. Vestibulum tempor ac ligula ut venenatis. Nunc enim sem, rutrum id elementum gravida, dapibus in massa. Nunc risus est, dictum eget mattis ac, faucibus vel ipsum. Cras vulputate porta lobortis. Praesent consequat consectetur libero, et hendrerit dolor cursus id. Nulla felis nunc, lacinia non pellentesque eu, dictum maximus ligula. Donec vel elit id quam lobortis ornare. Vivamus a augue vitae ex vulputate dignissim. Nam tempus magna et purus porttitor fermentum. Sed in finibus eros. Nam quis tortor ac tortor vehicula elementum vel a orci. In hac habitasse platea dictumst. In dictum orci commodo nunc gravida, eget porta neque tempus. Ut laoreet risus non ullamcorper semper. In euismod id diam ac tristique. Cras nec risus aliquet, fringilla tellus ut, imperdiet dolor. Pellentesque at lobortis turpis, convallis pretium risus. Curabitur non nisl ante. Curabitur at ex eget nulla eleifend gravida sed id libero. Quisque feugiat semper lacus, in dapibus lacus fringilla ac. Aliquam feugiat, nulla aliquet euismod pellentesque, erat libero sodales arcu, ut commodo nulla nibh egestas augue. Aliquam bibendum pellentesque diam eu luctus. Vivamus blandit urna magna, sit amet ullamcorper mi interdum vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla non nisi eget turpis consectetur fringilla. Donec mattis, nunc nec viverra varius, neque arcu pellentesque est, vitae egestas risus urna ac metus. Pellentesque ornare volutpat facilisis. Maecenas congue dignissim neque, ut bibendum orci hendrerit in. Etiam efficitur nisi mattis nibh faucibus mattis. Duis vel diam at tellus semper eleifend. Vivamus nec nibh facilisis, cursus nisl eget, hendrerit enim. Nam ullamcorper lobortis metus nec auctor. Vivamus eget tortor nisi. Integer laoreet suscipit nisl id porta. Mauris quis vestibulum elit. Praesent tellus justo, volutpat eu porta at, hendrerit eget nisi. Curabitur nec nulla ac metus posuere aliquam vitae at felis. Donec a pretium purus. Phasellus ligula enim, ullamcorper at velit vitae, porta congue nisi. Etiam ac est eu metus sagittis ultrices. Ut facilisis congue lorem eget bibendum. Maecenas vestibulum suscipit dolor, non lacinia tellus blandit aliquet. Maecenas id posuere nibh. Donec sed tristique metus. Nullam elementum sollicitudin tellus, a volutpat est feugiat faucibus. Fusce consectetur nulla metus, id elementum ligula iaculis ut. Sed ac lectus elit. Nam sed leo porta, pellentesque dui sit amet, dapibus metus. Morbi facilisis egestas euismod. Sed sollicitudin, enim et feugiat ultricies, lectus nulla scelerisque risus, quis volutpat ante dolor condimentum felis. Curabitur vitae augue vehicula, malesuada lorem vel, hendrerit enim. Pellentesque dapibus interdum accumsan. In hac habitasse platea dictumst. Nullam dictum sodales volutpat. Nullam euismod nibh sit amet tortor interdum euismod. Nulla quis magna mollis, lacinia dui ut, pulvinar nisi. Aenean fermentum pellentesque nulla, in imperdiet quam egestas et. Ut consequat purus nisl. Praesent semper ac est non fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque tortor justo, semper sed est ut, pulvinar sagittis leo. Suspendisse consectetur rutrum pretium. Donec eu ligula purus. Ut elit nisi, pretium et vestibulum a, iaculis et nulla. Donec ullamcorper feugiat urna, accumsan pulvinar lorem. Aenean a vestibulum tortor. Cras facilisis sit amet arcu sed varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis congue feugiat tincidunt. Fusce et lacinia lorem, at elementum risus. Morbi faucibus scelerisque euismod. Proin ac sagittis ipsum. Vestibulum euismod auctor nisl et faucibus. Nulla aliquam, enim a mattis tristique, ipsum ligula efficitur enim, feugiat euismod justo tellus quis nibh. Phasellus ut tincidunt lorem. Praesent at tempus eros. Pellentesque hendrerit mauris at libero ultricies, maximus dapibus nibh porttitor. Vivamus ornare et mauris nec volutpat. Sed nibh lorem, tempor vitae pulvinar non, placerat id ipsum. Cras et ex ex. Proin suscipit nibh gravida sagittis fermentum. Sed tincidunt elementum convallis. Etiam tempor dictum ex, quis fringilla dui faucibus sit amet. Fusce maximus ultrices dui nec laoreet. Praesent vel sem in tortor ultrices pellentesque in et est. Quisque sagittis magna et velit suscipit pellentesque. Aenean nec mattis eros, et luctus libero. Phasellus quis tortor tincidunt, pellentesque mauris vehicula, tempor magna. Etiam quis commodo sem. Nullam id mauris magna. Pellentesque quis turpis a metus lobortis dignissim. Donec a neque semper, rhoncus erat nec, vestibulum justo. Proin laoreet erat sit amet augue pretium, sed auctor nisl consectetur. Proin feugiat, nulla eu pellentesque ullamcorper, urna orci aliquam eros, id consequat ex purus vel leo. Proin gravida nibh purus. Suspendisse augue nisl, bibendum eget mauris ut, hendrerit tempus sem. Nullam eget imperdiet metus, sit amet lacinia odio. Aenean congue suscipit libero suscipit efficitur. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed nec accumsan nibh, vitae convallis ligula. Etiam vehicula leo quis fermentum condimentum. Maecenas vehicula ultrices magna nec porttitor. Integer non tortor vel sapien efficitur volutpat quis in metus. In feugiat a lacus tempus gravida. Cras interdum sit amet odio sit amet sodales. Vivamus non mauris ligula. Pellentesque cursus sit amet libero sed consequat. Duis quis molestie nunc. Nullam eleifend arcu vitae rutrum hendrerit. Cras sit amet odio congue, lacinia justo vitae, efficitur nisi. Suspendisse pretium sodales mauris sed sollicitudin. Nulla sit amet facilisis erat, nec auctor diam. Donec eu ullamcorper diam. Integer laoreet urna varius vestibulum accumsan. Duis congue elit in vulputate consectetur. Quisque iaculis risus nisi, nec viverra est consectetur id. Sed bibendum et orci quis cursus. Quisque a euismod justo. In venenatis leo a bibendum tristique. Quisque a ex justo. In sagittis lorem sed massa mattis, non ultricies dui venenatis. Maecenas accumsan hendrerit quam ut imperdiet. Aenean ultrices finibus lorem ac posuere. Sed viverra pretium arcu. Nam eu turpis vel metus venenatis pharetra a a metus. Curabitur non elit lorem. Sed vestibulum sit amet tortor non venenatis. Phasellus suscipit dolor nunc, sed elementum nisl mattis in. Nullam dignissim interdum volutpat. Quisque luctus hendrerit nibh non posuere. Ut convallis quis justo rutrum cursus. Etiam semper interdum nisl eget efficitur. Quisque laoreet urna quis lacus mollis, quis ultricies urna volutpat. Cras a congue leo. Integer mattis, arcu quis ornare convallis, risus ante accumsan erat, id volutpat orci ligula in nulla. Aliquam nec mollis massa. Etiam et nulla quis augue facilisis viverra. Mauris in leo auctor, feugiat purus sed, ultricies lacus. Suspendisse imperdiet augue ut ligula pretium, in accumsan augue lobortis. Phasellus molestie convallis lobortis. Aliquam erat volutpat. Aenean ultricies leo nec justo semper laoreet. Sed vitae lorem fermentum turpis elementum sodales eu eget lectus. Aenean placerat, nibh non malesuada sagittis, diam sem dignissim tortor, lacinia tempus sem mauris sit amet urna. Cras hendrerit odio augue, quis dapibus turpis interdum ut. Vivamus in posuere lorem, sed consectetur augue. Integer blandit neque viverra, commodo nisi sit amet, placerat lorem. Praesent aliquam enim in pellentesque lobortis. Pellentesque non posuere enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eget orci lobortis, faucibus est ut, congue eros. Aliquam et ex in elit molestie eleifend a at odio. Quisque sit amet aliquam metus. Suspendisse potenti. Maecenas convallis ornare odio, a fermentum neque porttitor vitae. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec lacus diam, rhoncus at scelerisque nec, ornare in tellus. Fusce orci nibh, tempor at turpis quis, convallis malesuada felis. Praesent congue mattis tortor. Mauris malesuada, dolor in ultricies aliquet, velit dolor tempor dolor, quis commodo nisi enim eu nulla. Praesent auctor at nisl eget congue. Integer condimentum magna a magna facilisis, id pretium arcu varius. Pellentesque bibendum tellus in leo scelerisque, sollicitudin eleifend metus condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum mattis tellus vestibulum tempor ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu dictum metus. Quisque ipsum mi, sodales sit amet scelerisque eu, ultrices sed nunc. Mauris bibendum lacus ut blandit ornare. Suspendisse a arcu gravida, maximus ante quis, fermentum dolor. Ut ut lorem commodo, aliquet erat sit amet, placerat dolor. Phasellus id sapien eros. In condimentum efficitur nibh vitae ultrices. Fusce congue sed nibh iaculis luctus. Mauris lobortis lectus orci, sed efficitur enim convallis ullamcorper. Sed sed arcu id elit interdum porta. Praesent dignissim auctor consectetur. Phasellus leo ipsum, facilisis non ex eget, sodales tristique mauris. Fusce ac luctus felis. Integer ac metus mi. Nam facilisis, eros quis dapibus vestibulum, nibh orci luctus dolor, eget lobortis ligula turpis nec urna. Curabitur convallis, lectus eleifend imperdiet interdum, felis sem cursus velit, non scelerisque tortor libero quis tortor. Fusce neque ipsum, bibendum et mauris vel, dignissim sagittis mi. Aliquam vel pulvinar risus. In eget efficitur tellus, non auctor elit. Nullam eu lectus urna. Pellentesque congue nisi vel semper imperdiet. Duis a sagittis dolor. Proin bibendum magna a felis feugiat placerat. Proin et bibendum magna. Mauris sagittis est quam, sed elementum urna lobortis a. Etiam in augue venenatis, elementum mauris ac, scelerisque arcu. Nunc sit amet mi nisl. Fusce blandit felis a justo ultrices varius. Vestibulum hendrerit facilisis leo, sit amet vestibulum tortor malesuada ut. Etiam nibh arcu, pellentesque sit amet leo sit amet, suscipit pretium erat. Praesent scelerisque quam libero, ut tristique metus tristique a. Integer venenatis ligula cursus, sodales velit eu, tempor lorem. Sed ante ex, porttitor sit amet dui mattis, aliquet tristique diam. Pellentesque molestie varius iaculis. Phasellus viverra pellentesque ipsum in mollis. Morbi tempus odio magna, ut ornare risus congue id. Etiam luctus elementum enim eu tempor. Sed mattis metus ac aliquam pretium. In sit amet eleifend erat. Maecenas lacinia eu nunc non scelerisque. Aliquam finibus sapien non enim efficitur, sit amet aliquet ex aliquam. Integer pulvinar, dui a interdum ultrices, justo orci venenatis orci, vel condimentum nulla dolor vitae mauris. Vivamus posuere faucibus purus at consectetur. Nulla dignissim libero in ex semper, at aliquet magna tincidunt. Nam facilisis sit amet libero a porta. Aenean laoreet, orci quis egestas scelerisque, erat nibh efficitur libero, vitae ultricies ipsum massa ut velit. Phasellus pharetra egestas diam at aliquam. Nulla ac tellus non tellus molestie euismod sit amet sed libero. Praesent quis interdum nunc, at rhoncus lacus. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur pharetra, nulla non lacinia consequat, orci est interdum nisi, eu aliquet urna velit eu sapien. Nunc sodales condimentum purus ut sagittis. Sed orci metus, eleifend et finibus ac, laoreet et sapien. Pellentesque erat arcu, tristique sit amet odio a, lobortis vehicula ligula. Quisque rutrum lectus non lectus sodales suscipit. Suspendisse et mauris et mi imperdiet scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim ligula vel nisi varius finibus. Suspendisse tempor nibh vel finibus mollis. Nam pulvinar rutrum sagittis. Aenean ligula ex, feugiat a odio non, tempor condimentum erat. Praesent cursus leo quis justo blandit, ut aliquam sapien tempus. Aliquam tempor porta turpis, vehicula lobortis risus lacinia quis. Quisque et purus in risus mattis rhoncus. Sed in condimentum mauris. Nulla sed velit eu magna euismod pulvinar. In ullamcorper libero dui, vel ultricies sem fringilla et. Donec eget sagittis enim. Ut ut nisl laoreet, congue nibh nec, volutpat nibh. Aenean eget feugiat urna. Ut hendrerit justo quis mi mattis, vel sodales neque hendrerit. Quisque rhoncus ex non augue venenatis placerat. Mauris at magna tempor, lacinia erat eget, egestas quam. Phasellus viverra dolor ac ligula semper porta. Quisque egestas ligula mattis pulvinar ullamcorper. Duis placerat vehicula ex, quis dictum purus vehicula quis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Curabitur ultrices ut orci vel tempus. Aliquam ultrices molestie sapien, ut condimentum enim consequat vel. Curabitur bibendum ornare orci, et egestas nisi euismod at. Proin ut mi a sapien pharetra dignissim non ac erat. In augue ligula, ullamcorper id semper vitae, rutrum non tellus. Donec libero odio, condimentum malesuada ullamcorper eu, aliquam non urna. Proin lobortis, odio sed pellentesque mattis, quam libero volutpat risus, ullamcorper mattis erat orci eget lorem. Pellentesque imperdiet erat cursus consequat imperdiet. Curabitur congue vel orci ut fringilla. Duis quis ante in turpis vulputate sodales. Duis blandit ante justo, et sodales magna laoreet id. Phasellus blandit vehicula ipsum, non suscipit eros dictum sed. Integer malesuada sed ante sed feugiat. Praesent porta volutpat elit, non rutrum orci cursus vel. Fusce et lacus eget magna consectetur tempor quis et augue. Proin et rutrum purus. In bibendum hendrerit viverra. Morbi sed volutpat odio. Donec eget justo sit amet metus mollis efficitur. Suspendisse bibendum ac ipsum id iaculis. Sed ut sagittis orci, in blandit mauris. Quisque interdum commodo volutpat. Nullam vel est eget sapien tempus ullamcorper. Nullam sed dictum dolor, non eleifend sapien. Morbi vulputate lectus lorem, vitae semper ex dapibus ut. Proin vulputate, dui eu eleifend congue, lorem velit eleifend justo, ac mollis nibh mi vel risus. Quisque suscipit tristique ipsum pharetra dictum. Vestibulum blandit neque orci, a vulputate elit feugiat eu. Fusce fermentum magna lectus, nec semper nisi tristique vitae. Cras efficitur pharetra lectus. Proin sit amet risus velit. Fusce quis lectus sodales nibh feugiat varius. Sed varius, leo eget iaculis sagittis, urna quam tempor tellus, id tempor erat diam euismod leo. Suspendisse ipsum nisi, semper in aliquet et, interdum non tortor. Phasellus vehicula, sapien non tempor maximus, metus erat porta risus, suscipit gravida mauris dolor ac enim. Praesent sit amet tellus neque. Donec venenatis dictum bibendum. Praesent mattis orci massa, eget varius nisl aliquam nec. Nulla commodo et mauris ut pellentesque. Proin commodo, tellus vel vestibulum interdum, enim diam vulputate sapien, eget lacinia ipsum lectus vel diam. Aenean eleifend ligula et orci efficitur, sed scelerisque nisi lacinia. Mauris venenatis, elit in tristique gravida, odio velit lobortis augue, ut pretium diam ipsum vitae justo. Cras sit amet pellentesque turpis. Donec ac pretium sapien. Mauris neque arcu, iaculis a sagittis quis, elementum vitae tellus. Aenean sit amet interdum diam. Phasellus nibh ligula, interdum in nisl nec, ultricies luctus sapien. Integer eu eleifend urna, sit amet euismod neque. Aliquam id sagittis tortor. Curabitur in sagittis enim, quis lobortis diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dignissim purus eu auctor ultricies. Proin laoreet diam et magna tempor, in congue ex tincidunt. Nunc vel cursus tellus, eget blandit odio. Cras metus magna, pulvinar eu tristique finibus, pellentesque id tortor. Vestibulum cursus ut odio vitae ultricies. Integer at tellus varius, dapibus augue quis, mattis elit. Nullam malesuada in lectus nec finibus. Praesent sed massa metus. Etiam gravida tristique feugiat. Curabitur blandit erat ac scelerisque placerat. Nam bibendum dapibus ex nec sagittis. Nullam malesuada fringilla lorem, id posuere metus varius aliquam. Aliquam porttitor a velit ut auctor. Vivamus tincidunt tempor pretium. Pellentesque ac faucibus felis. Nunc vulputate ut urna quis mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris in purus et mauris efficitur lobortis semper at mi. Praesent sollicitudin est a nibh facilisis pellentesque. Pellentesque vitae accumsan nisl. Ut porttitor tellus non mi tempor porta. Phasellus magna orci, bibendum quis sollicitudin nec, iaculis ac ipsum. Donec tellus ipsum, egestas quis ante vitae, dictum suscipit risus. Sed turpis orci, elementum et tellus et, iaculis tincidunt lacus. Nullam gravida vulputate enim, at semper ligula. Maecenas efficitur molestie leo id malesuada. Ut eu sodales nunc. Nunc et leo non ligula dignissim laoreet. Phasellus id lorem quam. Sed porttitor quis lorem quis congue. Duis laoreet orci erat, sed sagittis ipsum egestas id. Duis volutpat dui ac urna consectetur dictum. Mauris ac purus faucibus, laoreet nunc a, bibendum purus. Pellentesque sagittis tempus nulla id faucibus. In urna velit, iaculis et nisl ac, mollis gravida leo. Sed dignissim elit rhoncus, maximus ex nec, tempor mi. Nulla id dui quis nulla blandit pretium. Duis vestibulum pellentesque accumsan. Sed dignissim dapibus risus at ultricies. Maecenas scelerisque lacus at arcu viverra faucibus. Phasellus at quam leo. Integer sit amet volutpat orci. Aliquam consectetur lorem vitae libero tristique, vel sollicitudin tortor mattis. Sed commodo mauris sed neque volutpat, id ultricies metus laoreet. Aliquam sed nibh sem. Quisque vehicula, massa et porta scelerisque, dolor urna elementum leo, at congue massa est a justo. Fusce vitae elementum tellus, vel condimentum erat. Quisque molestie, velit ac varius lacinia, enim tellus porttitor sapien, et laoreet dolor quam at erat. In vitae dapibus tortor. Mauris in libero luctus, gravida nisi in, porta velit. Vivamus venenatis turpis ut malesuada dictum. Pellentesque a dapibus leo. Phasellus auctor a lectus vitae porttitor. Donec pellentesque facilisis pretium. Sed placerat, ligula sit amet consectetur blandit, nisi leo semper lacus, vitae dictum est lacus nec velit. Morbi commodo molestie diam a sodales. Praesent sed aliquam mauris. Aliquam vitae nisi sed orci ullamcorper pharetra. Nunc at elementum ante, quis scelerisque quam. Praesent auctor cursus pretium. Ut dignissim massa eget nulla volutpat aliquam. Etiam maximus lacinia ultricies. Integer non aliquam risus. Curabitur at accumsan nulla. Nullam varius varius metus eu vestibulum. Suspendisse ac ligula velit. Curabitur placerat, ante sed dapibus congue, odio neque varius purus, et varius metus enim nec odio. Vestibulum aliquet laoreet purus a posuere. Sed eget vehicula nibh, ac lobortis tellus. Phasellus eleifend fermentum ornare. In libero tellus, dapibus sed interdum sed, aliquam in purus. Nam interdum quis neque et tincidunt. Aenean odio ante, iaculis sed leo nec, venenatis molestie velit. Sed ipsum nisl, mollis eget aliquam sed, semper vitae lectus. Nam placerat nisl sed pulvinar ultrices. In id nisl ac felis mollis dapibus. Sed condimentum feugiat malesuada. Nam a felis ac dui pretium fringilla gravida at leo. Pellentesque aliquet porta turpis, ac mollis dolor pulvinar in. Duis vitae nunc a neque dignissim euismod ac non erat. Quisque non mauris ac massa malesuada dictum eget ac ipsum. Curabitur maximus dui id dolor ornare facilisis quis porttitor augue. Nunc pellentesque tellus et risus malesuada, ut bibendum diam gravida. Suspendisse placerat ultricies dictum. Sed pulvinar sapien a tellus dignissim venenatis nec id metus. Ut porta lacus sodales, semper diam maximus, efficitur sapien. Curabitur sollicitudin posuere leo, et molestie leo consectetur vitae. Pellentesque vel porta leo. Sed odio velit, porta eu mattis sed, dapibus a purus. Duis auctor, dui in blandit semper, leo eros dignissim nibh, eu convallis ex massa at odio. Proin sodales nisi mauris, et lacinia metus lobortis ac. Donec eget ullamcorper ligula, sed posuere nibh. Nullam finibus metus vel tellus blandit, et semper enim consectetur. Nunc ac auctor tellus. Phasellus in ex id tellus hendrerit ultricies. Aliquam odio quam, ultricies sit amet quam in, rutrum commodo mi. Praesent facilisis rhoncus bibendum. Donec non nisi sit amet erat tristique pretium at in erat. Nulla facilisi. Sed luctus quam et lacus accumsan, varius vestibulum ipsum ultricies. Curabitur fermentum faucibus nunc et feugiat. In vitae lectus rutrum, sollicitudin odio in, semper enim. Vivamus ac sodales felis. Pellentesque turpis purus, feugiat sit amet turpis nec, posuere mollis urna. Aenean sed mi eleifend, fringilla urna eu, ultrices nulla. Phasellus non lacus ut nulla condimentum gravida. Nulla purus risus, lobortis vitae dui at, fringilla suscipit tortor. Maecenas maximus, nibh et hendrerit congue, odio nibh consequat ipsum, vel ullamcorper lorem ante nec diam. Donec rutrum massa id tortor pretium, vel imperdiet tortor accumsan. Nullam sit amet vehicula urna. In consectetur justo ac magna suscipit, at varius velit pharetra. Fusce convallis enim eu cursus tincidunt. Nam non neque ac leo viverra fringilla sed varius turpis. Sed finibus nibh quis purus tempor laoreet. Maecenas faucibus pellentesque ex quis eleifend. Vestibulum ultrices justo mi, sit amet varius urna gravida vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean fermentum facilisis orci id tincidunt. Donec vehicula metus vitae volutpat rutrum. Sed et hendrerit erat, sit amet lobortis mauris. Maecenas pellentesque dui risus, a placerat dui cursus ut. Aliquam ullamcorper egestas justo, a varius dolor. Etiam elementum aliquam sapien quis sagittis. Maecenas at convallis magna, vitae pellentesque urna. Vestibulum malesuada, nisi in efficitur laoreet, massa ex tristique turpis, in varius arcu mi id purus. Duis rutrum egestas facilisis. Donec et mi ut tortor cursus semper. Suspendisse potenti. Ut faucibus tortor nunc. Fusce sodales quam sit amet purus maximus, id hendrerit purus volutpat. Integer iaculis, justo id dapibus dignissim, tortor ante hendrerit felis, imperdiet vulputate lectus quam sed nibh. In eu hendrerit ex. Nam ligula nisi, viverra vitae facilisis sit amet, facilisis eu augue. Nullam auctor est nec eros laoreet, vel tristique libero rhoncus. Nullam a odio sit amet nulla egestas pulvinar eu eu sem. In placerat ac est ut scelerisque. Morbi nec hendrerit neque. Vivamus velit odio, interdum et finibus scelerisque, fringilla at lacus. Mauris sit amet tortor malesuada, mollis ipsum faucibus, euismod lorem. Ut id aliquam magna. Cras vel commodo neque, rutrum rutrum erat. Nunc in orci bibendum, laoreet enim quis, placerat metus. Mauris accumsan tempor velit vel sodales. Maecenas ornare purus sem, vel consequat dui faucibus sed. Cras rutrum ac tellus sed varius. Pellentesque facilisis libero nisi, in tincidunt felis gravida sit amet. Phasellus a interdum purus, eu sodales ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis ex ut metus blandit aliquet. Proin vitae consectetur nulla. Praesent mattis, urna sit amet lacinia aliquet, sapien mauris pellentesque libero, egestas scelerisque sem quam ut massa. Nunc vitae porta sapien. Aenean fringilla placerat lacinia. Ut egestas ligula quis velit elementum congue. Praesent tincidunt consectetur nisl eget maximus. Praesent in aliquet libero, at tempor elit. Vestibulum tellus est, ornare nec est tempus, sodales varius turpis. In dignissim quis odio ut pharetra. Sed pulvinar sollicitudin massa at bibendum. Aliquam vulputate justo id vehicula malesuada. Ut sapien lorem, iaculis vitae mauris ac, posuere eleifend diam. Sed aliquet ex quis odio scelerisque, sed consectetur elit tempus. Curabitur vitae ultrices risus. Praesent eu augue in risus ullamcorper porta. Maecenas vulputate nisl nibh, ut tincidunt lacus posuere in. Nunc ac arcu lacinia, ultrices quam sed, scelerisque dolor. Quisque aliquam, arcu eget efficitur vestibulum, nibh justo aliquam leo, in porta eros justo at sem. Quisque fringilla dictum mauris, nec consequat nulla cursus at. Vestibulum congue, nulla vitae dictum hendrerit, felis orci euismod arcu, nec laoreet enim nibh eu sapien. Cras fringilla purus nisi, vel consequat justo mollis ultrices. Donec gravida, massa quis varius dignissim, nisl quam lacinia purus, non porttitor massa urna vitae nibh. Sed sit amet euismod sem. Nam ut arcu nec diam porttitor congue ut ac felis. Praesent facilisis ultricies elementum. Duis a tincidunt mauris. Phasellus in dapibus tortor, dignissim placerat leo. Aenean volutpat facilisis enim, vel laoreet purus. Integer tincidunt mattis lectus quis vulputate. Maecenas maximus quam dui, sit amet dapibus justo suscipit quis. Donec ornare consectetur quam, ut tincidunt mi iaculis eu. Nam vitae urna at est faucibus accumsan in et elit. Morbi neque ligula, cursus in luctus nec, tempus mollis lorem. Aliquam a mi orci. Ut id ante iaculis, tristique lorem eget, molestie ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis luctus libero eget lacus commodo ultrices. Integer vitae auctor libero. Proin et magna lobortis, pharetra arcu tincidunt, luctus est. Quisque eget vehicula lectus, eu malesuada dolor. Maecenas luctus malesuada dolor, vitae sollicitudin elit pellentesque sit amet. Nunc feugiat tincidunt aliquet. Pellentesque sed pulvinar lorem, sed egestas nisi. Mauris viverra, nunc vitae varius vulputate, felis augue bibendum nibh, eget fringilla ipsum tellus nec enim. Maecenas sed elit a diam congue tempus. Duis ac erat diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In molestie arcu et fringilla scelerisque. Suspendisse finibus turpis ex, in laoreet nibh malesuada nec. Donec elementum consequat nisi vulputate consequat. Proin id pulvinar risus. Proin ullamcorper ipsum eros, porttitor feugiat turpis tempus in. Aliquam blandit ante eget purus sollicitudin eleifend. Nulla vel quam erat. Maecenas pretium vel arcu quis condimentum. Maecenas vitae magna viverra, finibus purus vitae, hendrerit orci. Nulla ut nisi vel magna accumsan rutrum. Quisque aliquet ligula eget lacus facilisis tincidunt. Fusce non leo dapibus, tincidunt nisl et, auctor justo. Morbi aliquet metus at libero auctor, molestie elementum quam sodales. Maecenas interdum aliquam mauris, non scelerisque leo feugiat et. Fusce porta quis ipsum non molestie. Mauris auctor diam luctus erat pellentesque, vel sodales nisl condimentum. Integer elit nisl, tincidunt a molestie id, sagittis sit amet nibh. Etiam et porta purus. Sed nec risus non sapien egestas congue eu sed lectus. Ut diam mauris, sollicitudin id turpis vel, pretium malesuada lorem. Cras pretium mi ut nisi sodales, eu consectetur metus suscipit. Donec condimentum nunc erat, a tristique nisi ullamcorper sit amet. Donec nec condimentum velit, nec fermentum justo. Phasellus ac sem vel nisi ornare tristique. Nullam gravida, tellus at malesuada ornare, ipsum orci laoreet nibh, nec fringilla sem nulla a lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse potenti. Curabitur luctus rutrum aliquet. Etiam condimentum velit nibh, ac efficitur ex dignissim eu. Integer iaculis augue purus, ac commodo enim viverra in. Cras erat justo, efficitur in metus ullamcorper, lacinia commodo quam. Curabitur sollicitudin ex ac dui congue aliquam. Fusce a arcu sem. Suspendisse elementum, dolor vel vestibulum venenatis, tellus risus dapibus elit, eget rutrum felis est et massa. Ut feugiat placerat sapien in feugiat. Praesent porta gravida lectus ut maximus. Sed mattis ex tincidunt, iaculis lacus vitae, luctus massa. Quisque condimentum fermentum turpis quis iaculis. Pellentesque fringilla urna pretium turpis efficitur, id lacinia orci condimentum. Duis tristique enim velit, nec imperdiet nisl euismod sit amet. Aliquam quis risus diam. Aenean aliquam luctus orci, nec laoreet velit malesuada sit amet. Maecenas vulputate est nec enim laoreet, in aliquet tortor auctor. Praesent nisl sem, malesuada ac odio vel, tincidunt consectetur leo. Nullam in neque libero. Fusce maximus nisl est, eget blandit leo condimentum sed. In maximus, est eget tincidunt semper, magna sapien ullamcorper tortor, sed mollis orci sapien in elit. Ut tincidunt accumsan orci, quis iaculis nibh blandit ac. Phasellus luctus auctor arcu, eu ultrices eros laoreet et. Vivamus velit lectus, iaculis et laoreet ac, pulvinar id tellus. Cras ac felis a nibh pharetra pellentesque eu rhoncus ipsum. Nulla vehicula risus dolor, id bibendum felis interdum sed. Nulla sed sem facilisis enim pellentesque ornare eu quis nulla. Sed arcu ipsum, ultrices at massa id, efficitur ultrices mauris. Fusce malesuada nisi eu nisl maximus, sit amet fermentum massa mollis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi et elit sem. Aliquam nec lorem eget nulla consectetur sagittis sit amet at diam. Phasellus erat justo, interdum ut vestibulum eget, semper sed ex. Sed sit amet orci ut enim tempor ultrices sit amet ac felis. Maecenas varius metus tincidunt ligula maximus, a accumsan lectus laoreet. Cras massa augue, congue sit amet mi non, consectetur semper enim. Proin pellentesque congue enim. Morbi cursus elit et dui placerat, id scelerisque lectus luctus. Donec non dui eget erat cursus egestas ac et lacus. Vestibulum facilisis diam et neque rhoncus, id consectetur ligula auctor. Suspendisse vitae dui sagittis, molestie leo rhoncus, faucibus eros. Vestibulum sed sem faucibus, volutpat ligula vitae, scelerisque augue. Nullam eget malesuada metus. Fusce quis purus nulla. Nullam ac gravida ipsum. Curabitur vel lacus ac diam fermentum porttitor. Sed a leo ac justo mollis scelerisque non id ligula. Nullam enim risus, tincidunt eget sollicitudin in, gravida nec elit. Fusce fringilla quis massa in sagittis. Cras sollicitudin tellus ac lacus pharetra rhoncus. Sed at fringilla diam. Suspendisse finibus lectus ac arcu pellentesque tincidunt. Nam congue pharetra quam. Nam sed porta justo. Nulla facilisis malesuada justo, non porta nisl elementum ut. Sed id lectus felis. Suspendisse potenti. Vestibulum in viverra lacus. Integer sollicitudin quam non nisi tincidunt, in gravida sapien venenatis. Nulla id tellus at lorem aliquet aliquam at nec lectus. Proin bibendum fringilla aliquam. Fusce ultrices, libero vel tincidunt pharetra, nulla arcu imperdiet libero, sit amet venenatis risus elit id ligula. Aliquam est nulla, mattis non dictum eget, hendrerit nec massa. Sed vulputate purus nec lectus sodales tempor. Aliquam erat volutpat. Phasellus porta justo mauris, quis laoreet felis gravida in. Nulla at varius erat. Suspendisse congue odio eros, at fermentum tellus posuere vel. Phasellus non odio odio. Phasellus non posuere ante. Aenean turpis massa, posuere non turpis at, placerat pulvinar quam. Aenean pharetra cursus elementum. Donec porta, lorem et facilisis tempus, augue nisl dictum lacus, vitae accumsan erat ipsum nec sapien. Phasellus eget vestibulum sem, quis dignissim enim. Sed vel dui dolor. Maecenas sed suscipit eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ac convallis dolor. Praesent condimentum metus iaculis lorem molestie, eget semper felis efficitur. Phasellus condimentum risus at nisi congue tempor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi dolor turpis, tempus in finibus nec, accumsan id arcu. Donec purus lacus, suscipit vitae justo sed, vestibulum dapibus eros. Aenean vehicula suscipit massa sit amet cursus. Sed tempor luctus pellentesque. Vestibulum venenatis eros nulla, a lobortis tortor efficitur in. Morbi consequat, justo eget consectetur accumsan, augue eros posuere elit, ac maximus libero eros et libero. Curabitur fermentum hendrerit nunc eu porttitor. Sed a velit vulputate, blandit arcu id, interdum sem. Sed tempor a tellus quis imperdiet. Proin interdum interdum laoreet. Nam maximus mi eleifend, vulputate velit id, vehicula lacus. Quisque nulla nisl, luctus vitae erat eu, rutrum varius urna. Praesent id odio vitae urna convallis aliquam nec nec purus. Duis venenatis vestibulum dui, ac feugiat sapien vestibulum in. Phasellus luctus accumsan nisl, eget venenatis lacus lacinia id. Morbi fringilla hendrerit ex, sed ultrices lectus mollis non. Donec bibendum molestie auctor. Cras consectetur sagittis sem, ut rhoncus mauris molestie quis. Phasellus magna sem, elementum egestas sollicitudin eu, posuere id ipsum. Nunc tempus metus diam, a lacinia neque tincidunt eget. In fermentum enim mi, accumsan porttitor libero accumsan vitae. Etiam sagittis dapibus elit, eu maximus eros ornare non. Donec ullamcorper arcu quis ex scelerisque interdum. Sed ac maximus arcu. Praesent faucibus est ullamcorper nulla maximus sodales. Curabitur pellentesque augue lectus, non iaculis neque dignissim in. Donec eget purus ut nunc condimentum consequat. Praesent gravida tempus semper. Aliquam pellentesque tempus tortor eu cursus. Proin a elementum sapien, blandit vestibulum dolor. Aliquam quam orci, sagittis quis lorem viverra, tincidunt semper ipsum. Nulla consectetur neque ac enim placerat venenatis. Pellentesque fermentum ultricies urna sed vehicula. Quisque aliquet blandit ipsum, et finibus nibh pharetra quis. Aenean ullamcorper tellus rutrum velit sodales, a eleifend mi maximus. Duis a enim nec felis tincidunt posuere. Donec vel nisl condimentum, scelerisque quam id, interdum urna. Phasellus eget bibendum nisi. Nullam posuere iaculis sapien, ac porttitor nisl condimentum a. Morbi lobortis quis mauris in rhoncus. Maecenas sed porttitor urna. Nulla gravida ante non velit venenatis, id egestas turpis commodo. Sed luctus consequat neque eget varius. Nullam sed dui pretium, ullamcorper libero eget, consectetur massa. Suspendisse et bibendum nisl. Nulla eros odio, venenatis eget lacinia ut, commodo vitae elit. Cras consectetur nisl ut placerat fringilla. Pellentesque id nisl non lorem congue auctor. Nam luctus massa augue, et volutpat quam dapibus ac. Aenean molestie lorem quis dolor fermentum, eu fermentum nisi auctor. Mauris maximus egestas libero id pellentesque. Integer mauris magna, congue sed efficitur sit amet, molestie vestibulum urna. Vivamus sit amet lorem mattis, mollis justo sit amet, congue risus. Morbi mattis lorem eu arcu elementum euismod. Nullam sollicitudin, dui vel lobortis molestie, neque lectus maximus elit, a lobortis urna lectus eu ipsum. Quisque tristique mollis tempus. Nunc pellentesque nunc a congue mollis. Nam finibus tellus eget venenatis ullamcorper. Etiam euismod pharetra lectus sed tincidunt. Integer tincidunt, erat ut eleifend ultrices, turpis elit placerat tortor, at rutrum justo enim sit amet nunc. Nulla tempor enim ex, eget venenatis magna egestas vitae. Praesent sed congue sem. Duis vulputate mi in odio tempor, et aliquam ipsum gravida. Donec ipsum arcu, interdum maximus risus eu, placerat interdum est. Proin pulvinar mauris velit, vel ultricies velit tristique ac. Sed vel velit eros. Mauris sagittis nisi ut mi volutpat, ac laoreet ex elementum. Pellentesque fringilla risus sit amet dui dapibus dapibus. Proin vitae metus sit amet risus dapibus auctor. Quisque non varius est. Nulla vestibulum sodales nulla aliquam sollicitudin. Vivamus posuere, metus eget auctor fringilla, nulla urna semper ex, in lacinia ligula ex id magna. Vestibulum fringilla sem in ex tempor tincidunt. Cras justo nulla, sollicitudin nec massa eget, laoreet gravida nibh. Donec sodales pharetra eros ut egestas. Mauris cursus in tellus ac faucibus. Duis at nisi quis justo pulvinar porttitor vitae et libero. Fusce rhoncus nulla nibh, eu cursus mauris rhoncus at. Quisque faucibus pellentesque leo, at blandit sapien euismod nec. Mauris bibendum lorem sed augue aliquet, sit amet lacinia lacus lacinia. Nulla accumsan erat non mauris dignissim, vel tempor ipsum tincidunt. Quisque consequat bibendum sollicitudin. In hac habitasse platea dictumst. Nam elit leo, tempor sit amet lorem at, ultrices consequat ex. Nullam elit sem, sagittis et orci eget, tristique luctus diam. Phasellus ultrices mi massa. Nam nisi eros, mollis at consectetur non, maximus vel nulla. Nunc at magna et orci tristique faucibus. Morbi fringilla mollis enim vitae auctor. Quisque sit amet vulputate mi, vitae vulputate eros. Aenean sem nulla, vehicula quis velit at, fringilla lobortis risus. Nulla non commodo purus. Fusce in odio ipsum. Proin leo nisl, pulvinar eu vulputate sed, porttitor sit amet justo. In at pulvinar quam. Phasellus tincidunt suscipit iaculis. Cras ut ex arcu. Integer elit nibh, sodales quis odio a, semper feugiat urna. Nulla interdum tellus neque, fringilla tristique odio ornare id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce vel purus ac turpis condimentum fringilla in pulvinar lacus. Donec ut placerat nisi. Maecenas ultricies, augue ultricies eleifend lacinia, nibh diam dapibus risus, sed imperdiet lacus enim in urna. Duis eu enim vitae justo auctor pellentesque sed volutpat nulla. Mauris iaculis quis velit quis iaculis. Aliquam posuere tellus lectus, nec finibus orci cursus quis. Duis nec massa at massa lobortis dignissim. Donec ornare, lectus a dictum lobortis, neque felis gravida libero, non ultrices justo lacus at dui. Integer eu nisi vel diam bibendum aliquam id fermentum metus. Suspendisse fermentum dolor enim, sit amet fermentum leo laoreet ut. Sed interdum a massa non tincidunt. Maecenas scelerisque varius justo, et dignissim turpis tincidunt in. In eu tortor eros. Donec congue tellus neque, non sodales mi finibus ultricies. Maecenas eget gravida ante. Vestibulum scelerisque commodo felis sit amet semper. Donec rhoncus aliquet nibh, at tincidunt massa eleifend sed. Sed quis diam posuere mauris molestie sodales. Quisque cursus semper purus, et lobortis est commodo sed. Sed faucibus quis tellus vitae rutrum. Etiam turpis lectus, rhoncus vel dapibus vel, luctus in magna. Fusce at dictum ante. Donec aliquam convallis risus, sed sodales lacus finibus pulvinar. Etiam accumsan ornare nisi, at elementum felis sagittis ac. Quisque ac vehicula diam. Aliquam sit amet tempus ipsum, quis ultrices metus. Sed sit amet libero volutpat, tempus massa quis, porttitor ante. Donec laoreet fermentum leo, non aliquet mi maximus at. Nullam auctor, ligula eu venenatis suscipit, tortor est eleifend lectus, vel efficitur risus arcu in mi. Maecenas vitae nunc vel mi tincidunt scelerisque. Nam in diam elit. Mauris mattis ornare libero, et tempor justo laoreet sed. Proin vitae dui sagittis, lacinia ex ut, consequat mi. Aenean quis consectetur urna, in fringilla felis. Mauris id dictum orci, nec mattis dui. Nam dictum imperdiet lorem sit amet consequat. Vestibulum consequat tristique ligula non cursus. Fusce efficitur nunc mattis faucibus laoreet. Nunc sollicitudin orci pretium diam venenatis, et lobortis libero porta. Aliquam eget laoreet tortor, quis luctus felis. Suspendisse rutrum mi at imperdiet placerat. Fusce nisl mauris, laoreet ac risus eu, suscipit luctus lorem. Donec malesuada lectus metus, at luctus risus pellentesque nec. Cras euismod sodales turpis, ac eleifend augue convallis at. Donec dolor orci, imperdiet sit amet ultricies id, laoreet nec arcu. Phasellus quis ligula quis magna fermentum vehicula. Suspendisse ultrices aliquam sem ut dignissim. Quisque porttitor est eget semper bibendum. Morbi suscipit iaculis dui, ac mattis ipsum dignissim a. Duis consectetur suscipit viverra. Donec lacus tellus, suscipit at viverra eget, imperdiet a risus. Proin eleifend, lacus sed feugiat condimentum, massa quam malesuada eros, et tincidunt velit enim cursus nunc. Ut vel tincidunt lectus, sit amet iaculis tortor. Sed laoreet diam non egestas finibus. Mauris interdum orci sit amet augue tempor, vel efficitur massa interdum. Morbi sagittis cursus risus, pharetra scelerisque risus luctus sit amet. Proin lacinia ex nec nulla suscipit, nec elementum erat finibus. Curabitur ut mi elit. Vestibulum laoreet ipsum vel augue tempor, vel pharetra metus lobortis. Donec vel justo est. Aenean convallis dui eget auctor iaculis. Mauris accumsan blandit turpis. Morbi interdum ipsum non dui accumsan placerat. Nam ornare arcu ac ante consequat, vel dignissim mauris facilisis. Etiam a eleifend arcu. Phasellus dolor enim, sollicitudin eu nisi vitae, auctor ultricies turpis. Donec tincidunt nisi vel sem lacinia, quis semper erat gravida. Nulla libero neque, ultrices in erat non, imperdiet blandit libero. Aenean commodo bibendum vulputate. Nulla at ante nulla. Praesent et efficitur elit. Morbi eget odio a sem tincidunt semper. Curabitur pulvinar tortor et nunc tristique consequat. In at eros libero. Phasellus quis accumsan massa. Sed vulputate dolor elit, blandit dictum mauris cursus et. Aliquam ex orci, ornare sed enim quis, ornare dictum nisl. Nunc in ligula vel diam sagittis bibendum. Proin sed tempor neque. Fusce mi purus, lacinia ac risus non, consequat tempus massa. Mauris eget vulputate eros, et gravida erat. Sed scelerisque magna ac lorem tempor, eu congue ante tempus. Suspendisse id rutrum lacus. Proin in velit sed turpis aliquet vehicula sed nec lectus. Duis eu lacinia ante. Sed sit amet dictum erat. Proin commodo tincidunt dui, rhoncus aliquet elit. Mauris quis nulla ut velit tincidunt dignissim in ut lacus. Mauris id volutpat eros. Maecenas felis tellus, aliquam a finibus dignissim, tristique at enim. In volutpat scelerisque dictum. Sed sagittis euismod ex, rhoncus interdum dui tincidunt quis. Pellentesque tempor urna eu eros scelerisque tristique. Duis iaculis vitae arcu non luctus. Mauris leo sapien, faucibus vel neque dignissim, sodales accumsan felis. Aenean in commodo nibh, ut finibus justo. Cras nisl odio, pretium vel ex in, semper efficitur augue. Nulla tortor est, tincidunt in imperdiet quis, gravida non nisi. Morbi posuere libero neque, nec facilisis nunc semper eu. Cras tincidunt mi id eros imperdiet, quis dapibus magna dictum. Maecenas lobortis arcu sit amet felis sodales, id lobortis sem rutrum. Suspendisse quam diam, accumsan ac accumsan id, pharetra et mi. Nunc at ante odio. Vivamus dignissim enim et risus scelerisque convallis at vitae dolor. Nunc aliquam sem vitae enim mattis tincidunt. Aenean nec hendrerit tellus. Sed a mollis nibh. Vivamus sollicitudin mi ut lorem porttitor, sed hendrerit urna laoreet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque blandit metus sed ipsum porta, sed convallis turpis sagittis. Pellentesque sapien lorem, sagittis id accumsan eget, imperdiet ut lacus. Maecenas sed tempus mauris. Phasellus sed dui id justo vehicula pulvinar. Donec quis justo neque. Vivamus at odio urna. Nulla accumsan tortor tempor justo mattis, ultricies lobortis turpis feugiat. Integer in mauris fermentum, accumsan ligula at, interdum nisl. Nullam scelerisque commodo varius. In sollicitudin, dui ut condimentum sagittis, lorem sem porta urna, at lacinia felis mi non metus. Duis quis lacinia odio. Nam at lacus enim. Sed in volutpat magna. In eget velit augue. Proin quam nunc, auctor sed facilisis eu, molestie ac lorem. Nullam rutrum tincidunt ex egestas facilisis. Proin et maximus dolor. Nam condimentum mi quis neque condimentum, non pretium lectus varius. Vestibulum feugiat sem at venenatis euismod. Nulla imperdiet sem in neque suscipit vestibulum. Nunc ac pellentesque ligula. In euismod tellus quis ipsum euismod molestie. Sed in purus malesuada, malesuada erat a, dapibus est. Mauris placerat gravida ipsum vel sodales. Ut quis aliquam diam. Fusce aliquet ac arcu sit amet ultrices. Aenean ac turpis eget nunc porta commodo ac et enim. Phasellus dignissim feugiat tristique. Nunc feugiat vel libero in iaculis. Quisque feugiat eleifend turpis, eu volutpat est. Vestibulum dictum ut metus in interdum. Donec placerat augue lectus, luctus facilisis lacus ultrices non. Curabitur sed aliquam felis. Aliquam sollicitudin in lectus quis pulvinar. Donec vel ligula mollis, condimentum lorem quis, lobortis nunc. Vivamus vitae turpis convallis, auctor dui sed, bibendum ante. Maecenas semper felis eget massa aliquet, eu commodo risus rhoncus. Ut efficitur id sem eu tristique. Morbi quis lorem at ipsum tempor viverra in non sapien. Nunc velit ex, porttitor id tempor sed, viverra vel felis. In lacinia blandit mauris, hendrerit consectetur turpis molestie commodo. Integer in ipsum sed enim tincidunt eleifend ac sit amet dolor. Aenean ornare ante dictum, maximus leo eu, feugiat urna. Praesent nisi sem, viverra eu orci ut, euismod bibendum mi. Mauris dui leo, euismod eu urna at, vehicula congue velit. Integer sollicitudin massa at mauris molestie condimentum. Cras vitae purus justo. Pellentesque semper magna sit amet sapien suscipit maximus. Nullam iaculis scelerisque massa vel tempor. Nam fermentum mauris eu mi bibendum semper. Suspendisse potenti. Donec ullamcorper turpis ut felis mollis, non porta felis porta. Ut sodales malesuada lorem ac pharetra. In blandit odio nibh, nec tempus ligula semper sit amet. Nam euismod tellus eu eros laoreet aliquam. Nullam at tellus urna. Quisque non lacus mi. Nullam gravida, metus porttitor consequat pulvinar, odio eros consequat ligula, egestas faucibus est odio vitae ipsum. Ut tempor vehicula interdum. Etiam interdum semper libero, a fringilla sem fringilla non. Proin at cursus erat. Phasellus at magna feugiat, dictum neque a, ullamcorper nisi. Proin et orci imperdiet, semper lectus eget, rutrum neque. Donec feugiat augue elit, a suscipit leo iaculis quis. Suspendisse ut nulla erat. Nulla justo magna, pulvinar at ante vehicula, elementum volutpat odio. Integer laoreet bibendum nulla in fringilla. Integer semper eu velit at ultricies. Etiam mollis turpis urna, id malesuada nulla faucibus in. Suspendisse vulputate efficitur nisl, eu tempus ipsum lobortis ac. Fusce ac pellentesque mi, ac porta nulla. Donec scelerisque velit ex, nec tristique erat commodo sed. Nullam id ipsum tincidunt, convallis dui auctor, elementum ligula. Pellentesque id tortor non orci iaculis ultrices. In malesuada mauris vel eleifend malesuada. In sit amet lacinia enim. Aliquam erat volutpat. Nam nec mattis lacus. Mauris lobortis justo auctor nibh malesuada pellentesque. Vivamus bibendum nulla at bibendum scelerisque. Phasellus dictum elit gravida semper dignissim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent dignissim enim eros, sit amet varius sapien tempor et. Aliquam erat volutpat. Sed feugiat, sem ut aliquam bibendum, erat purus aliquet urna, in vehicula velit lacus vel nisl. Fusce dictum id lectus quis porttitor. Etiam eu aliquet metus. Mauris vestibulum lorem in dapibus convallis. Integer id dolor sagittis arcu tincidunt tincidunt non et erat. Proin aliquam volutpat tempus. Ut id dignissim velit. Etiam purus massa, tristique nec ipsum eget, porttitor ultrices dolor. Sed tempus nisi ac aliquet interdum. Nunc eu tellus sit amet erat iaculis blandit. In at posuere metus, nec euismod metus. Morbi risus nunc, euismod non diam sit amet, elementum egestas dolor. Vivamus sed arcu ut arcu ultrices dictum a at eros. Suspendisse id felis et neque luctus tristique ac sed magna. Integer fermentum dictum tortor. Integer vitae metus pharetra, sollicitudin leo nec, facilisis dolor. Aenean laoreet ex velit, eget suscipit magna hendrerit vel. Integer nec ornare dolor. Etiam vitae quam sit amet mauris aliquet cursus rhoncus a metus. Donec sit amet bibendum eros. Nam hendrerit finibus nibh, eget pharetra lectus euismod ut. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi feugiat pretium elit, non suscipit sapien dapibus ac. Nam non porttitor ipsum, gravida iaculis dui. Vestibulum vehicula est eu neque ornare, eget semper est ornare. Aliquam erat volutpat. Maecenas et ligula vulputate, tincidunt nulla vel, pulvinar augue. Sed ac ante eu massa posuere auctor in quis leo. Maecenas a diam quam. Pellentesque metus felis, semper id mattis nec, ultricies sed dui. Vivamus ornare nisl ut ultricies imperdiet. Vestibulum congue lacus in metus convallis condimentum. Cras sodales arcu a malesuada semper. Nam rhoncus elit ligula, eu tristique ipsum suscipit non. Phasellus egestas posuere nunc, in dignissim nisl venenatis a. Pellentesque at arcu sed metus feugiat semper ut quis nisl. Maecenas accumsan blandit nisl eu posuere. Duis ac est blandit, vestibulum nunc consectetur, efficitur sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum molestie felis sapien, id vehicula orci rhoncus sit amet. Nulla eu ornare mauris. Proin ut ligula turpis. Ut nec sapien urna. Praesent lectus lorem, dignissim id sem sit amet, vehicula hendrerit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus sit amet vehicula neque, at eleifend risus. Maecenas in ante mollis, hendrerit est sed, pellentesque purus. Curabitur gravida augue lacus, hendrerit porta ligula porttitor a. Aenean euismod lacinia auctor. Maecenas eget sodales lorem, non ornare dui. Donec fermentum neque vitae massa porttitor, non rhoncus enim vestibulum. Suspendisse venenatis eget eros nec ultricies. Curabitur sit amet magna enim. Cras consequat neque eu diam laoreet consectetur. Nulla ante sapien, vestibulum in nibh a, mattis posuere lorem. Phasellus fermentum et erat vitae dictum. In hac habitasse platea dictumst. Vestibulum auctor dolor nulla, quis imperdiet ex tincidunt sit amet. Duis ullamcorper nulla sed neque luctus gravida. Aliquam odio velit, sagittis sed tortor vel, porta fringilla dolor. Sed neque arcu, sagittis vitae ante vitae, placerat imperdiet lacus. Pellentesque consequat tempus ex, nec rutrum odio dapibus vitae. Vestibulum suscipit, elit sed faucibus ultrices, ligula erat finibus odio, vitae bibendum eros arcu eu enim. Ut varius sapien erat, vel accumsan leo tincidunt quis. Mauris malesuada metus ac fermentum pretium. Mauris id lorem quam. Donec orci orci, condimentum eu pharetra ac, varius nec felis. Curabitur nec magna egestas, convallis lacus ultrices, dignissim turpis. Sed porttitor sagittis ligula, id accumsan odio ultricies quis. Integer sit amet quam eu sapien convallis consectetur. Aenean efficitur enim eget venenatis interdum. In suscipit ligula sit amet mauris commodo, eget venenatis lacus accumsan. Curabitur a luctus elit, vitae fringilla nibh. Nulla interdum, lorem maximus vestibulum commodo, odio quam pellentesque est, at placerat odio tortor nec eros. Mauris mollis imperdiet dui, quis vestibulum nisi molestie sed. Nam aliquet ante non egestas cursus. Nullam dapibus, nibh eget tincidunt tristique, mi turpis euismod velit, quis aliquet velit enim vel quam. Nam interdum vitae dui ac ultricies. Etiam maximus aliquam felis, sit amet commodo mi porttitor ac. Sed urna mauris, consectetur et fringilla ac, cursus eget magna. Integer nunc sapien, auctor id vehicula sit amet, molestie eget nunc. Fusce egestas sodales tellus tempor auctor. Praesent placerat egestas fringilla. Donec faucibus id nibh ac vestibulum. Fusce ac nisi mattis, venenatis dolor at, fringilla nibh. Pellentesque in tincidunt arcu, ac pretium nulla. Duis non efficitur mauris, ut tincidunt elit. Sed libero quam, eleifend posuere eleifend nec, interdum quis turpis. In quis vestibulum nibh. Praesent auctor pellentesque libero eget tempor. Morbi libero ipsum, consequat eget quam eget, commodo bibendum est. Praesent arcu eros, egestas in vulputate at, vestibulum vitae sapien. Duis laoreet ante quis nisl tristique lobortis sit amet ut turpis. Cras orci eros, fermentum nec pretium vitae, convallis ut tortor. Sed gravida dolor sapien, accumsan tincidunt tellus eleifend ut. Nam sem justo, ornare non tempus in, fringilla a justo. Proin a tellus molestie, hendrerit ante eu, consequat nisi. Maecenas sagittis a metus id varius. Nulla malesuada, ante interdum placerat ornare, magna felis rhoncus nulla, et placerat justo arcu ullamcorper mauris. Phasellus scelerisque lacus leo, at tincidunt ligula ultricies sit amet. Etiam rutrum diam quis augue eleifend condimentum. Pellentesque ex nibh, finibus sed semper quis, accumsan at metus. Sed eget nisl ut magna lobortis consectetur id quis augue. Maecenas posuere justo purus, gravida facilisis tellus dapibus id. Quisque tortor arcu, varius eget tellus nec, euismod maximus erat. In hac habitasse platea dictumst. Morbi pulvinar hendrerit dignissim. Integer accumsan dui eget sapien blandit ultricies. Mauris a porta diam. Donec massa justo, efficitur vel vehicula sit amet, porta in enim. Nullam condimentum ipsum vestibulum egestas gravida. Mauris ut nisi ornare, eleifend nulla ut, elementum tortor. Aliquam vulputate sapien nec porttitor dignissim. Pellentesque elementum accumsan tellus, nec egestas turpis scelerisque a. Suspendisse lectus diam, dictum vitae sagittis et, cursus vitae eros. Pellentesque laoreet libero vitae fringilla vulputate. Cras vitae nisl ut turpis cursus vehicula. Nullam facilisis viverra tellus, ac convallis odio pharetra eu. Duis ut magna eleifend, commodo ex eu, auctor nibh. Aliquam erat volutpat. Etiam posuere arcu purus, suscipit vulputate leo dapibus vitae. Aliquam turpis turpis, suscipit vitae imperdiet vel, porta nec eros. Nulla aliquet turpis eu lorem euismod posuere. Vivamus tristique ligula in arcu aliquam, nec auctor quam tincidunt. Donec at tortor at augue pretium faucibus. Maecenas dui velit, mollis nec congue id, molestie et leo. Donec porttitor dignissim consectetur. Sed a porta eros, elementum semper risus. Mauris non tortor tellus. Aliquam sit amet massa lectus. Ut auctor rutrum nisl sit amet semper. Vivamus efficitur sem turpis, at bibendum orci semper varius. Sed ultricies ipsum lectus, ut ultrices ex finibus eget. Ut eget turpis sit amet ligula bibendum mollis. Proin ut interdum ex. In enim diam, sagittis eget nisi in, sollicitudin fringilla urna. Pellentesque at orci lacinia, aliquet risus in, lacinia turpis. Aliquam pulvinar faucibus nunc sit amet ullamcorper. Nullam tristique varius sapien id dapibus. Phasellus viverra augue sapien, ac laoreet eros dapibus sit amet. Nam hendrerit nisl nec dapibus pharetra. Donec iaculis neque in nisl accumsan, id semper ligula ultrices. Sed luctus tempus ligula, quis mattis augue luctus a. Curabitur id diam nec ipsum efficitur blandit a sit amet odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dignissim, lectus ac consectetur tempor, lectus eros vestibulum sapien, eget mattis metus lorem at neque. Curabitur sit amet ullamcorper tellus, vitae posuere odio. Integer in orci malesuada, condimentum metus id, luctus magna. Sed eu orci vitae diam tempus mollis. Donec venenatis neque non urna molestie, sed suscipit velit tristique. Nulla sed diam lorem. Aliquam massa magna, pretium non faucibus id, tristique ut tortor. Vivamus ut convallis nibh. Integer dictum elit ut ex sagittis, quis feugiat ipsum lacinia. Nulla purus leo, porta non bibendum id, condimentum sed urna. Donec varius sagittis tempus. Sed dapibus ligula vel purus ullamcorper scelerisque. Nunc egestas volutpat euismod. Aliquam dapibus egestas dolor nec posuere. Fusce rhoncus sem sed aliquet dignissim. In porta libero non nunc vehicula, vitae dictum dui dictum. Fusce vel tempor nunc. Aliquam posuere odio ut mi tempus, ac feugiat orci luctus. Integer facilisis ornare ante at suscipit. Praesent quis tortor urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque in tincidunt erat. Nam vel nulla euismod dui mattis dapibus sit amet nec nisi. Aliquam cursus laoreet facilisis. Praesent quis pulvinar urna. Vivamus semper massa massa, et mattis magna cursus tincidunt. Morbi interdum non lacus in vestibulum. Pellentesque lobortis tempor enim quis lacinia. Aliquam erat volutpat. Donec efficitur interdum ante, non elementum lectus euismod at. Nunc pharetra neque nec ex porta sodales. Duis at est sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis nunc eu venenatis viverra. Nulla sed elit id velit sodales feugiat. Donec in enim ac nisl laoreet tristique. Sed tincidunt pellentesque augue mattis vulputate. Fusce quam augue, lacinia vestibulum tempus blandit, vulputate non odio. Aenean pellentesque mauris vel urna dapibus placerat. Vestibulum molestie turpis eget odio iaculis, at facilisis metus consequat. Sed eget nisi nisi. Sed dui sapien, fermentum fermentum augue eu, varius commodo nisl. Suspendisse venenatis auctor est vitae posuere. Etiam aliquam ligula leo, vitae condimentum sem maximus vel. Sed tempor nulla justo, quis eleifend arcu pharetra at. Sed suscipit nunc tempor massa fermentum, sit amet aliquet elit finibus. Donec consectetur malesuada porttitor. Etiam tempor egestas diam et consectetur. Aenean quis lacinia ligula. In congue commodo dui, id aliquet velit dapibus non. Nunc mattis purus ipsum, vel egestas dolor finibus ac. In at ullamcorper eros, quis pellentesque dolor. Sed id feugiat risus. Aenean nec nibh in tellus euismod euismod. Suspendisse vestibulum nisl in nibh feugiat, vestibulum tristique turpis pretium. Sed commodo elit tincidunt risus sagittis fermentum. Morbi lobortis pulvinar euismod. Etiam scelerisque, sapien non scelerisque fringilla, lacus nulla scelerisque sapien, ac tempor turpis dui tincidunt dui. Sed pulvinar orci a orci sagittis commodo. Proin vehicula libero sed quam lacinia, ut euismod diam dictum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse porttitor gravida eros ut luctus. Integer quis ipsum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque id odio mi. Etiam sit amet blandit diam. Vestibulum lacus lacus, fermentum quis convallis nec, cursus vitae justo. Praesent laoreet ultricies eleifend. Sed nibh tortor, malesuada non purus fermentum, ornare accumsan nulla. Vivamus elementum dolor vitae euismod convallis. Morbi lectus lorem, faucibus ut elementum id, convallis in ligula. Donec a lacus a mauris interdum molestie at non lectus. Etiam faucibus in sapien a dignissim. Curabitur scelerisque finibus nulla. Aenean gravida consequat accumsan. Quisque id enim in est dictum feugiat. Morbi dolor orci, molestie vel leo et, tincidunt tristique dolor. Aenean venenatis lobortis nulla, a lobortis metus fringilla sit amet. Morbi ac finibus tellus. In neque massa, bibendum non pellentesque sed, imperdiet non dui. Mauris porttitor sagittis laoreet. Maecenas sed ornare quam, quis faucibus arcu. Sed sit amet auctor ipsum, at mollis libero. Praesent non faucibus odio, nec consequat quam. Integer eget enim sit amet nibh malesuada mollis. Sed faucibus condimentum congue. Aenean tortor libero, pharetra sed magna sed, fermentum imperdiet magna. Suspendisse dictum lacinia sodales. Aliquam luctus purus purus, ut ornare ipsum tincidunt quis. In sit amet justo non felis laoreet consectetur eget eu turpis. Nullam ornare magna quis quam suscipit, in euismod ligula eleifend. Etiam at libero pellentesque, lobortis neque in, tristique eros. Aliquam non nisi lectus. Phasellus eu nisl tortor. Proin a ultricies leo. Morbi at diam et nibh iaculis dictum sed a nunc. Donec euismod gravida lorem quis tincidunt. Nam tristique neque sagittis orci faucibus, ac gravida turpis aliquam. Donec bibendum imperdiet odio. In luctus quis dolor eu fringilla. Vivamus eleifend. 4fn9zhxpq5cedbsvdr7a2i5ilqols16 740217 740214 2026-05-02T22:57:20Z User97104 72884 740217 wikitext text/x-wiki '''Lorem ipsum''' dolor sit amet, consectetur adipiscing elit. Cras at enim sed erat fermentum hendrerit vel vel diam. Sed luctus risus et odio lobortis tincidunt. Donec dictum neque vitae elit bibendum, dictum porttitor turpis dapibus. Morbi posuere sapien eu vulputate elementum. Donec rutrum non nibh a vulputate. Nunc et ipsum diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer ultricies velit ligula, et euismod leo mattis et. Curabitur ut porttitor lacus, sit amet scelerisque arcu. In vitae tellus quis augue faucibus consectetur. Ut dui nisl, posuere sit amet augue nec, interdum luctus nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus bibendum, turpis id fringilla lacinia, magna nisi ullamcorper ligula, sed gravida purus elit in turpis. == Vestibulum praesent etiam == Vestibulum eu ullamcorper neque. Nullam facilisis dui mauris, vitae euismod odio tempor vel. Nullam luctus eget est eget vehicula. Aenean fringilla ligula eget felis porttitor, eu maximus arcu laoreet. Etiam ornare nisi sed orci congue, lacinia feugiat diam feugiat. Suspendisse nisi enim, tempus at rutrum quis, interdum et erat. Quisque facilisis ante rutrum pharetra consectetur. Etiam ultricies quam orci, vitae eleifend erat imperdiet eu. In hac habitasse platea dictumst. Nulla at interdum nibh, et congue dolor. Donec ut aliquet mauris, quis volutpat purus. Vestibulum nisi nisl, sagittis eu neque sed, hendrerit placerat mauris. Suspendisse pretium, turpis sed pharetra pulvinar, enim leo tempor purus, vel euismod justo mauris id est. Aenean tristique est eget semper scelerisque. === Mollis nec === Praesent mollis ultrices mauris, et sagittis mi mollis ut. In ac pretium nunc. Fusce ullamcorper elit nunc, in pretium orci pretium imperdiet. Mauris a sapien eget nibh sodales tincidunt. Nulla feugiat feugiat rutrum. Donec laoreet feugiat porttitor. Suspendisse potenti. Vivamus scelerisque tristique tellus eu accumsan. Donec euismod maximus dui at malesuada. Etiam eu vehicula turpis. Cras sit amet sapien sed diam fermentum placerat. Cras ut sagittis velit. Etiam nec blandit neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse potenti. Cras volutpat id turpis sed tempor. Integer leo dolor, accumsan ut scelerisque at, aliquam non elit. Nullam egestas facilisis urna, sit amet commodo nunc laoreet eget. Duis aliquam auctor augue, sit amet efficitur ante lacinia vel. Praesent posuere, velit hendrerit viverra consectetur, justo nulla finibus turpis, sit amet posuere nisl metus non mauris. Maecenas at enim pharetra, tristique erat sed, ultricies leo. Nunc vel sem sit amet massa auctor commodo. Pellentesque feugiat nunc vitae magna fermentum mollis. Nullam id diam et leo ultrices aliquet vel nec felis. Quisque in ornare justo, eu tincidunt nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis lorem enim, sed mattis est gravida in. == Etiam integer in vivamus == === Maximus gravida === Etiam maximus tellus eros, quis congue sapien pellentesque sed. Nam imperdiet gravida volutpat. Donec vitae sodales nunc. Vestibulum augue sapien, aliquet in sem a, fermentum mattis sem. Maecenas id dolor felis. Quisque rhoncus orci et elit porttitor, vitae lacinia tellus scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer gravida vestibulum aliquet. Pellentesque leo purus, laoreet sit amet dolor ut, pretium porttitor nulla. Etiam pretium porta ante, a convallis diam elementum nec. Vestibulum et odio ac elit aliquet fringilla ac eu lectus. Sed vitae turpis magna. Nam tristique libero neque, nec pellentesque lectus rutrum ut. In porta, diam id porttitor hendrerit, velit quam lobortis sem, in tempor nibh dolor consectetur ipsum. Vivamus et mattis nisl. Etiam sapien nulla, cursus quis posuere non, feugiat in justo. Phasellus sagittis, ligula vitae condimentum auctor, purus velit dignissim risus, a eleifend leo eros eu tortor. === Mollia finibus === In mollis mauris ante, ac tincidunt neque faucibus eu. Nullam faucibus risus ut magna rhoncus venenatis. Duis ullamcorper nec risus at pulvinar. In elementum at tortor tincidunt maximus. Nullam vitae gravida dui. Morbi rutrum diam eu nulla porttitor cursus. Fusce vel urna sit amet risus facilisis volutpat vitae non purus. Integer mattis nec nisi eu placerat. Quisque commodo suscipit dui a blandit. Donec sagittis leo arcu, vitae cursus neque sollicitudin eget. Maecenas id sem aliquet, molestie elit bibendum, lobortis felis. Vivamus finibus est ac hendrerit auctor. Phasellus dictum consectetur ex pellentesque dapibus. Aliquam volutpat arcu vitae nibh pretium, sed sodales enim ornare. Sed a erat enim. Aliquam quam elit, rutrum et neque euismod, fermentum faucibus risus. Morbi tincidunt sed mi nec tempor. Integer ullamcorper quam id mauris vulputate vulputate. Pellentesque id auctor sem. == Aenean vivamus pellentesque morbi == === Non luctus === Aenean non purus maximus risus imperdiet mollis. Aenean non dui erat. Morbi aliquet velit quam, quis semper lacus posuere venenatis. Integer id nulla nibh. Donec felis ex, faucibus at sem at, commodo dignissim lorem. Pellentesque ipsum urna, eleifend et felis vitae, viverra tincidunt urna. Ut ex felis, vestibulum et sapien sed, finibus rutrum justo. Donec viverra pellentesque nisl at elementum. Quisque blandit, ipsum placerat scelerisque tincidunt, nibh lacus euismod metus, sed eleifend ipsum libero non enim. Vivamus luctus vestibulum faucibus. Cras tempus felis id odio sodales consectetur. Cras orci nisi, viverra quis mi vitae, pretium consectetur dui. Phasellus euismod felis eu sem ultricies sodales. Integer eget mollis velit, eget pretium purus. Morbi laoreet, dolor ut fringilla egestas, ipsum orci tincidunt tellus, a egestas neque tellus sed purus. Nulla sagittis vitae nibh quis dictum. Aliquam sagittis dolor nibh, eu euismod odio gravida nec. Donec varius efficitur justo. Integer sit amet arcu sollicitudin, scelerisque est sed, accumsan est. === Vel est === Pellentesque vel euismod leo. Nulla mauris sem, vehicula fermentum nibh vel, hendrerit vestibulum tellus. Cras dignissim at lacus in porta. Nunc a vulputate quam, eu pulvinar ex. Sed vitae leo sit amet justo varius varius vel sed elit. Sed viverra orci non erat ultricies, vel tristique magna tincidunt. Aenean viverra ligula ligula. Vestibulum malesuada, eros sed varius aliquam, magna purus laoreet tortor, non tempus dui erat sit amet nunc. Proin accumsan nulla mattis lorem congue dignissim. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Ex ==== Morbi est ex, dictum ac neque nec, iaculis lobortis lacus. Cras sit amet consectetur est, vitae condimentum eros. Maecenas non sapien ligula. Nam laoreet eget eros in blandit. Quisque hendrerit velit at nisl tincidunt volutpat. Phasellus ac felis nisi. Proin mattis ante ac magna porta placerat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. == In nullam == In leo velit, lacinia in ligula quis, semper maximus dui. Pellentesque cursus congue dolor ut tristique. Fusce accumsan placerat facilisis. Vivamus pellentesque purus ut nisl laoreet accumsan. Nunc in mi vehicula leo ultrices sodales id ac dui. Fusce gravida at ante sed tincidunt. Maecenas at dui bibendum, condimentum tellus at, faucibus est. Donec molestie in est posuere aliquet. Donec id aliquam arcu, in cursus sem. === Nec === Nullam nec vulputate enim, quis efficitur libero. Mauris sit amet cursus sem, at ultrices metus. Duis sit amet aliquet diam, eget faucibus neque. Duis consequat rutrum auctor. Proin ullamcorper vehicula ex sed finibus. Nulla efficitur sem non eros varius dapibus. Maecenas posuere tortor at tempus dignissim. Nunc varius in dolor ut interdum. Morbi imperdiet urna in felis congue pellentesque. Donec dictum a quam nec venenatis. Nam id vestibulum ipsum, nec elementum orci. Quisque dignissim tincidunt dolor, et maximus augue bibendum eget. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam interdum placerat scelerisque. Nam tristique varius tempus. == Maecenas aliquam vivamus quisque aenean == === Id erat et === Maecenas id elit felis. Maecenas felis velit, aliquam volutpat felis non, efficitur elementum purus. Donec lobortis ultricies vehicula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget nisl viverra, dapibus nisl consectetur, venenatis nisi. Sed et turpis gravida, dignissim mauris ut, faucibus elit. Sed viverra quam id magna lacinia, id congue tellus luctus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque sodales ac leo sed iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras hendrerit, magna mattis tempus laoreet, augue nunc vehicula odio, vitae dapibus erat leo nec enim. Phasellus vel ex arcu. Sed ut fringilla augue. Aliquam erat volutpat. Nulla suscipit lectus metus, nec aliquet diam lobortis id. Aenean et mattis diam, in molestie lectus. Curabitur faucibus enim semper lectus molestie, a tincidunt nisl efficitur. Vestibulum tortor sem, mattis sit amet semper at, cursus ut arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam ut mi ut neque egestas varius. Nam sollicitudin finibus dapibus. Sed cursus iaculis mi in sagittis. Vestibulum cursus eros a blandit hendrerit. Cras vitae efficitur nisi. Suspendisse eu odio vel sapien consectetur condimentum. Integer rutrum ullamcorper ligula tincidunt varius. Praesent nec pellentesque massa. Phasellus nec fringilla nunc. Mauris finibus purus non vulputate tempus. ==== Tellus ==== Vivamus et tellus massa. Morbi fringilla sapien eu felis luctus vehicula. Duis arcu dolor, fermentum quis gravida et, imperdiet id urna. Maecenas turpis elit, ultricies nec purus eu, egestas ornare nunc. Pellentesque sagittis, lectus a semper dignissim, mi ipsum pulvinar eros, in viverra urna sapien ac nibh. Fusce ex ipsum, pulvinar eu purus nec, viverra pellentesque lectus. In sodales varius lectus, ut faucibus massa suscipit sed. Integer dictum, leo tempus sagittis varius, augue quam feugiat elit, sit amet iaculis turpis quam eget neque. Cras elit arcu, volutpat eget tempus vitae, ultricies sit amet sem. Nullam eu molestie quam. Nullam non velit vel dolor ultrices elementum quis id velit. Sed et ligula mauris. Ut libero lacus, viverra vel faucibus sit amet, varius sit amet mauris. Morbi ultrices facilisis pulvinar. Donec dictum risus sit amet leo tristique porta ut sed nisl. === At posuere === Quisque at tellus posuere, posuere orci vitae, consequat velit. Ut nisl nisl, consequat at posuere in, pulvinar id ante. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi nisi justo, posuere vitae mi a, feugiat faucibus ex. Aenean eu odio felis. Vestibulum eros metus, accumsan nec risus ut, facilisis finibus nibh. Pellentesque bibendum id urna sed tempus. Sed in ornare orci. Aliquam cursus condimentum mollis. Aenean tempor venenatis quam in condimentum. Pellentesque id elit in eros eleifend malesuada vitae ac magna. Sed vel est sit amet mi porttitor consequat quis id purus. Maecenas sit amet eros tristique, pellentesque tortor ac, fringilla dolor. Aenean posuere nunc ac ipsum blandit venenatis. Ut vestibulum felis non lectus vestibulum, et tincidunt lacus vehicula. Vestibulum aliquet quis justo et fermentum. Sed sed enim lobortis lacus fermentum pretium. Proin consequat velit non dolor eleifend, nec maximus dui mattis. Donec pellentesque leo arcu, eget vestibulum velit varius in. Aenean et viverra urna, feugiat faucibus ligula. Suspendisse efficitur commodo mi, tristique bibendum velit vehicula nec. Duis iaculis non risus ut ornare. == Vivamus nunc nulla nunc == === Dictum commodo === Vivamus dictum nisi ac quam fringilla sagittis. Vestibulum augue felis, gravida ac blandit ac, faucibus congue turpis. Integer fringilla lacus lectus, nec egestas sapien vestibulum vitae. Curabitur eu nibh malesuada, dapibus est vitae, sagittis mi. In est tortor, pulvinar at aliquet in, suscipit dignissim ipsum. Suspendisse dignissim ligula vel bibendum aliquam. Nam quis rutrum odio. Quisque sagittis nibh vitae lorem accumsan consequat. Morbi congue malesuada suscipit. Curabitur in luctus diam. Duis tempor et leo sed euismod. Etiam lacinia vehicula ligula sit amet pulvinar. ==== Sit ==== Nunc commodo sit amet mauris sit amet pretium. Nam venenatis eu dui sit amet hendrerit. Vivamus ac enim porta, tempor arcu at, venenatis neque. Donec quis urna in nisl molestie tincidunt. Morbi finibus vitae ex a posuere. Proin condimentum dignissim tempus. Suspendisse rutrum diam massa, non aliquet lacus maximus non. Nulla lorem neque, scelerisque eget velit non, consequat condimentum sem. Aenean vel odio erat. Cras aliquam in quam vehicula tristique. Phasellus aliquam lacinia fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc vestibulum congue magna, ac congue diam suscipit in. === Cursus porttitor === Nulla cursus ornare tempus. Duis tempor ligula risus, a placerat dolor bibendum eleifend. Duis id rutrum eros, eget ultricies mi. Duis vitae quam magna. Aliquam sollicitudin, felis sit amet viverra condimentum, odio libero commodo mi, id accumsan neque lacus sit amet tellus. Nunc facilisis eget sem sed pharetra. Pellentesque tempus tincidunt libero quis mattis. Vivamus consectetur finibus libero eget malesuada. Lorem ipsum dolor sit amet, consectetur adipiscing elit. ==== Varius ==== Nunc porttitor varius nisi molestie tristique. Vivamus accumsan mi eu metus consectetur, id gravida risus luctus. Donec ullamcorper malesuada placerat. Mauris varius ante scelerisque, laoreet lacus vitae, ullamcorper ipsum. Integer non sodales massa. Aliquam ac fermentum massa. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum vitae risus ultrices, volutpat urna eget, semper urna. Sed faucibus turpis in turpis congue, id laoreet ante tincidunt. Nulla sit amet ante blandit, pellentesque ante quis, feugiat enim. Sed tristique venenatis vehicula. Sed vel tellus et orci facilisis cursus vel nec quam. Ut vitae ipsum ante. Aliquam sit amet molestie mi, ut vestibulum risus. Donec ac lacus mauris. == Maecenas aliquam nulla proin vestibulum phasellus == === Pharetra nec sollicitudin === Maecenas pharetra auctor sem a aliquet. Donec fringilla eleifend quam vitae euismod. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas luctus nisi quis lectus vestibulum tempor. Donec dapibus sem mauris, non rhoncus neque rutrum id. Nunc sollicitudin sollicitudin enim. Aliquam vitae massa velit. Cras nibh est, rhoncus euismod faucibus sit amet, finibus vel tortor. Morbi scelerisque urna mi, ut suscipit sem iaculis eu. Quisque in lorem diam. Sed eget leo condimentum, ultrices ex eget, iaculis tortor. Cras convallis erat at leo lacinia laoreet. Praesent mattis accumsan pharetra. ==== Diam at ==== Aliquam nec diam risus. Pellentesque eu dui eros. Donec faucibus maximus egestas. Nam pulvinar suscipit nisi sit amet luctus. Proin gravida eleifend ex id placerat. Maecenas iaculis felis ipsum, ac rutrum nulla cursus nec. Vestibulum laoreet arcu in nibh vehicula congue. Suspendisse ac porttitor nisi. Sed fermentum nibh lacus, sit amet tincidunt orci mattis nec. Aliquam auctor turpis quis malesuada lacinia. Nam tempor tortor sem, sit amet semper nisi molestie at. Praesent at rhoncus dolor. Vestibulum a lacus eu dolor malesuada hendrerit a vitae elit. In vel pellentesque mauris. Cras ac quam et sem ultricies tincidunt. Nulla sollicitudin at sapien nec tempor. Sed mollis quis augue id faucibus. Integer eget pharetra metus. Donec vel ullamcorper purus. Cras elit est, porta quis tincidunt vestibulum, facilisis at est. Ut semper porttitor erat, vitae lacinia tellus scelerisque eu. Fusce massa tellus, consectetur quis neque vitae, viverra eleifend ipsum. Nam sed congue neque. Nulla imperdiet justo eget lacus elementum malesuada. === Vitae laoreet ac === Proin vitae metus enim. Cras feugiat ornare erat, sed efficitur leo sodales in. Quisque dictum et leo at tincidunt. Curabitur non lacus ut turpis suscipit interdum sit amet eget metus. Donec quis ante justo. Mauris faucibus, lorem ornare porttitor posuere, ante nibh ullamcorper arcu, vel finibus orci elit vel erat. Nunc leo erat, sagittis et tincidunt id, dapibus nec risus. Ut et nunc scelerisque, varius quam eget, auctor nisl. Ut quis augue in diam dapibus malesuada nec vitae elit. Cras viverra fermentum quam non auctor. ==== Dui ultricies ==== Vestibulum laoreet dui sit amet rutrum posuere. Aliquam aliquam elementum turpis, sit amet tincidunt leo efficitur non. Sed nec mauris aliquam massa congue tempus tempus non quam. Quisque tincidunt tellus at augue suscipit vulputate. Nam augue nisi, consectetur ac tempor et, ultrices sit amet est. Fusce eu urna eget nisl rhoncus vulputate. Nulla facilisis augue sit amet augue fermentum finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. In volutpat enim quis nisi interdum, in semper nulla luctus. Suspendisse interdum ut odio nec rhoncus. Curabitur quis enim sodales, iaculis quam vitae, iaculis magna. Suspendisse potenti. Sed feugiat pulvinar facilisis. Praesent lorem nibh, mattis eu felis id, rutrum condimentum sapien. Phasellus ac ultricies turpis, sed vulputate erat. Curabitur sed lorem eget sem ultricies sodales quis a mi. Aenean justo nibh, varius eu magna non, vehicula porttitor lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla egestas nisi tellus, et consequat velit molestie non. Sed convallis augue ut lectus venenatis rutrum. Vivamus ultricies auctor nulla, faucibus ultricies lacus sodales ac. In vel erat porttitor, cursus leo ut, bibendum diam. Nam vel augue a elit sodales euismod. Aenean vel scelerisque nisl. Donec sed orci nec nibh porttitor tempus ut ut velit. == Fusce in nunc nunc == Fusce iaculis fringilla diam, id condimentum ante tincidunt sed. Nunc sollicitudin vitae nibh et venenatis. Integer in ex sit amet dolor volutpat vehicula sit amet at augue. Curabitur efficitur pharetra interdum. Nunc euismod volutpat magna, et elementum sem lacinia ac. Sed eu magna feugiat justo vulputate posuere ac ac mi. Pellentesque eu dictum leo, facilisis ultrices ligula. Maecenas tincidunt laoreet odio. Donec maximus risus eget risus malesuada, id tincidunt lacus malesuada. Curabitur non imperdiet leo. Duis vel convallis enim. Pellentesque tristique sem at nibh pharetra, vel aliquet neque suscipit. Aliquam dolor mauris, placerat a bibendum a, sollicitudin sollicitudin erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur nec est in erat ultricies facilisis. Curabitur eget vestibulum leo. === Vitae viverra aliquam === In vitae sodales neque, in commodo neque. Sed sollicitudin auctor metus et iaculis. Nam ultricies sagittis vehicula. Nulla iaculis fringilla elit at interdum. Donec at tortor faucibus, imperdiet nulla vitae, vestibulum purus. Mauris sed ullamcorper ante, eget imperdiet nibh. Duis sit amet urna leo. Curabitur egestas nibh ut laoreet elementum. Mauris tincidunt leo arcu, eu pharetra felis mollis at. Donec lacus erat, egestas et egestas lobortis, lobortis sed leo. Nunc viverra libero elementum ligula maximus, ut congue enim sagittis. Fusce et est diam. Sed facilisis odio eget sem mattis sagittis. Integer tincidunt orci vitae libero porta ullamcorper. Nunc mauris lorem, lacinia in mollis sit amet, malesuada nec elit. Proin aliquam sapien in dolor tristique, pulvinar volutpat lectus aliquam. Phasellus consequat ullamcorper massa at porta. Integer et pellentesque ante. Duis ac dolor ipsum. Donec sagittis magna eget ex lobortis consequat. Phasellus consectetur tortor volutpat diam cursus vehicula. In in efficitur ligula. Nunc aliquam vitae est quis bibendum. Phasellus porttitor lectus vitae egestas rutrum. In vel imperdiet libero. Ut eget mattis ante, eget ultricies mauris. Nulla vestibulum faucibus metus sed bibendum. Integer facilisis dapibus elit ut cursus. Nullam iaculis tempus ante non commodo. Nullam placerat feugiat elit. Proin cursus nisi turpis. == Etiam pellentesque praesent suspendisse suspendisse == === Sit vel === Etiam sit amet urna nec ligula commodo tempus. Fusce venenatis velit vitae arcu porta, sed eleifend neque egestas. Morbi sit amet nunc a lacus mattis luctus. Proin eget dolor sodales risus lobortis tempor. Etiam vulputate finibus neque. Phasellus non felis eget ligula auctor varius. Fusce enim mauris, vestibulum eu cursus id, suscipit id nisi. Sed magna leo, eleifend sed ultrices nec, efficitur eu ex. Ut sit amet egestas sapien, a viverra velit. Duis sit amet neque nec odio commodo sollicitudin. Nam elementum tincidunt varius. Quisque imperdiet finibus quam a sagittis. Duis vel enim sed ligula accumsan ullamcorper. Proin sit amet augue ac risus vestibulum porttitor. Vestibulum et lorem dictum, eleifend sapien a, elementum sem. ==== Odio ==== Pellentesque vel odio hendrerit, congue enim at, tincidunt quam. Suspendisse at bibendum nunc, a malesuada risus. Donec tempor felis quam, sit amet interdum odio dignissim at. Pellentesque nec semper odio, in condimentum libero. Quisque sed tellus facilisis, fringilla turpis vel, pulvinar mi. Sed feugiat pretium orci, sit amet dignissim lorem cursus sit amet. In hac habitasse platea dictumst. Nullam maximus ex sit amet erat mattis, at sodales turpis molestie. Nam maximus eros est, sed mollis libero ullamcorper eu. Vivamus porttitor at orci vel scelerisque. Nullam finibus purus quis ex pharetra, vitae porta nisi scelerisque. Aliquam posuere ullamcorper dui sed luctus. === Vulputate mollis a === Praesent vulputate eget enim eu feugiat. Curabitur suscipit diam erat, in facilisis nisi scelerisque at. Cras nec libero ut sem condimentum iaculis. Integer vitae imperdiet metus. Nulla aliquet felis vitae pulvinar egestas. Quisque mattis nunc augue, ut dignissim elit luctus vel. Pellentesque consequat blandit euismod. Fusce rutrum accumsan lacinia. Nunc efficitur, nibh eu porttitor vehicula, tortor est luctus augue, a sollicitudin elit sem vel ante. Nullam dapibus nisl odio, ut molestie eros vestibulum quis. Donec hendrerit, urna vel accumsan imperdiet, odio neque aliquam velit, et dictum magna nisi a risus. Proin iaculis tortor sagittis arcu placerat, sed tempor enim pulvinar. Morbi vitae vulputate nulla, id condimentum nibh. ==== Tortor ==== Suspendisse mollis tortor felis, vel bibendum elit malesuada vitae. Aliquam consequat, velit nec ornare gravida, nisl justo bibendum tellus, ut cursus urna lacus quis nulla. Sed gravida vestibulum elit nec sollicitudin. Sed vitae vestibulum ex, a malesuada massa. Vestibulum lacinia lacinia fringilla. Pellentesque nec ultricies enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sit amet lectus elit. Phasellus neque risus, blandit id finibus vel, ullamcorper vitae nibh. Phasellus sem odio, volutpat et sapien at, viverra scelerisque lorem. Integer nec maximus ipsum. ==== Magna ==== Suspendisse a magna bibendum, molestie turpis non, placerat tellus. Nunc ut purus non tellus ultricies finibus in vel ipsum. Sed at aliquet arcu. Etiam tincidunt ullamcorper turpis vitae pellentesque. Quisque quis nisl tortor. Curabitur sed dictum metus. Ut iaculis magna sodales velit malesuada, eget auctor ipsum fermentum. Aenean molestie tortor sit amet orci molestie convallis. Sed eleifend est nec felis vestibulum, vitae cursus enim ultrices. Morbi sagittis sed nisi sed accumsan. == Donec vestibulum ut donec nam sed curabitur == Donec at faucibus libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pretium dui ut risus mollis, a molestie ligula euismod. Curabitur eu erat pharetra, rutrum tortor vitae, dignissim dui. Maecenas viverra egestas turpis ut faucibus. Pellentesque aliquam fermentum tortor eu hendrerit. Sed metus mauris, dictum ac aliquet aliquam, malesuada at tortor. Donec venenatis libero sed mauris mollis suscipit. Maecenas consectetur eleifend rhoncus. === Ante elit === Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Duis hendrerit commodo velit id varius. Aenean ut tincidunt tortor. Phasellus ut laoreet turpis. Nulla scelerisque est a tincidunt eleifend. Praesent nec fermentum nisi. Donec suscipit lacus at sagittis aliquam. ==== Magna ==== Ut elit magna, interdum at commodo a, sagittis vel leo. Vestibulum aliquet est efficitur ligula pellentesque posuere. Sed vel aliquam libero, a tempor ligula. Praesent commodo, diam non ullamcorper gravida, ligula magna placerat velit, ut condimentum lorem nunc at tellus. Nunc cursus lorem sed ipsum dapibus sodales. Donec venenatis efficitur est nec lacinia. Etiam semper, lacus elementum aliquam sagittis, dui mauris mattis turpis, vitae mattis augue erat ut est. Fusce a tortor lectus. Morbi sed dui a arcu mattis finibus rutrum vel odio. Aenean eleifend faucibus leo, at condimentum nisi euismod at. Fusce pulvinar ante in odio aliquam, at lacinia nisi viverra. Fusce urna leo, pharetra eu malesuada quis, sollicitudin at lectus. === At euismod === Donec at neque rutrum, volutpat leo dictum, hendrerit tellus. Ut aliquam, quam nec malesuada imperdiet, tortor sem pharetra massa, quis tempus eros tortor vel libero. Phasellus in erat enim. Nunc at dapibus leo, id auctor massa. Proin et augue ante. Phasellus semper fringilla tortor nec cursus. Sed vehicula ex dignissim, blandit nibh at, tristique mauris. Nulla eu nisl vel elit mattis imperdiet. ==== Viverra ==== Nam euismod viverra condimentum. Duis et scelerisque diam. Curabitur imperdiet enim arcu, at elementum arcu venenatis ac. Vivamus venenatis arcu eu orci consectetur, a suscipit lacus tristique. Fusce vel lorem elementum, sollicitudin ipsum ut, interdum augue. Sed convallis varius velit, pretium volutpat odio venenatis eu. Sed id euismod augue. Duis volutpat, elit sed auctor eleifend, orci lectus iaculis mi, vel porttitor erat quam a augue. Etiam in mi consectetur, vehicula nunc sed, aliquam justo. Phasellus suscipit bibendum tellus nec pulvinar. Nulla vulputate in libero in rutrum. === Egestas a === Sed egestas eros nec ex aliquam, eget porta ligula euismod. Duis vitae erat non erat ornare facilisis quis eu justo. Nunc et mi a magna pretium eleifend eget pretium est. Nulla vel consectetur ante. Integer non dui a nisl tincidunt auctor. Phasellus quis ex magna. Phasellus sollicitudin tellus et aliquet facilisis. Aliquam arcu orci, lobortis in turpis vel, pulvinar vehicula ligula. Praesent tortor purus, faucibus quis tortor ut, luctus consectetur neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam sed turpis ac mi vestibulum finibus. Maecenas ullamcorper accumsan velit, sed porta neque tempor ornare. Praesent blandit ultrices lorem vel imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras feugiat luctus felis eu aliquet. Ut quis pellentesque diam, eget facilisis augue. ==== Est ==== Curabitur a est eu ipsum lobortis ultrices eget at erat. Curabitur venenatis convallis velit sed mollis. Morbi congue luctus quam, non semper nisi dignissim quis. Aenean eleifend enim ultrices nunc ullamcorper porta. Integer magna felis, vestibulum a suscipit a, pharetra ut leo. Sed eget magna non purus gravida feugiat. Morbi feugiat lorem orci, ac commodo orci viverra ut. Vivamus euismod felis at dolor accumsan fringilla. Nullam ut massa sed turpis imperdiet tempus et non quam. Sed ut urna vel risus tempus finibus. Nulla ut metus iaculis, molestie arcu id, tempor libero. Nam laoreet non nisl ut iaculis. Praesent aliquam mauris velit. Maecenas fermentum vulputate tincidunt. Suspendisse vitae ante a turpis hendrerit pellentesque vel eget tortor. Mauris fermentum nibh leo, ac tristique tellus ultricies a. == Integer in integer pellentesque donec == Integer venenatis, ligula iaculis efficitur eleifend, justo turpis finibus tortor, eget accumsan nulla orci non eros. Etiam dictum ipsum ac dui commodo vehicula. Vivamus vel ultrices leo, quis tempus urna. Aenean finibus felis lacus, at iaculis erat tempor a. Etiam nec cursus diam, nec tincidunt dolor. Sed hendrerit faucibus turpis eget blandit. Donec a nunc id quam faucibus semper. In non blandit urna. Vivamus consectetur quis nunc eu lobortis. Aliquam consequat mauris at lorem venenatis, a rhoncus sapien facilisis. Cras nisl nulla, tincidunt consectetur elit eget, pretium vestibulum massa. Integer vitae nisi sit amet purus aliquam ultricies sit amet sit amet elit. Proin vel lorem ipsum. Praesent a dui dolor. Nullam eu blandit felis. Maecenas massa quam, venenatis sed lorem vel, accumsan sollicitudin nisl. === Accumsan elementum rhoncus vitae === In accumsan dapibus quam non gravida. Praesent pellentesque est libero, nec accumsan erat venenatis id. Morbi sagittis posuere tortor, sit amet fringilla sapien iaculis in. Nulla facilisi. Morbi urna purus, sollicitudin ut bibendum vitae, congue non nibh. Aliquam orci quam, tincidunt in bibendum ut, congue quis tortor. Proin varius, dolor id semper tincidunt, leo tortor ullamcorper dui, et pharetra mi nisl id nulla. Quisque eu egestas elit. ==== Condimentum quam ==== Integer elementum condimentum lacus, id venenatis sem dictum quis. Phasellus sed posuere ante, at vehicula dui. Sed nec semper tortor, vitae mollis ante. Quisque turpis eros, tempus vel egestas a, dapibus vitae justo. Praesent magna augue, pharetra eu velit et, sagittis pellentesque sapien. Duis suscipit egestas risus a sagittis. Proin mattis lacus eu lorem fringilla congue. Proin aliquam gravida enim, sed feugiat metus malesuada id. Pellentesque rhoncus quam sem. Fusce et quam cursus, sodales dui ac, commodo tortor. Cras quis urna at sapien vehicula vulputate vel at ex. Ut iaculis mauris nec rutrum rhoncus. Suspendisse dapibus, erat in bibendum fermentum, nunc diam rutrum lacus, non varius tellus libero et tortor. Nullam vel lacus non neque condimentum commodo convallis at sapien. Aenean ornare pellentesque nibh ut pellentesque. Cras ligula massa, rhoncus nec accumsan vitae, fringilla pretium ante. Quisque sit amet velit dignissim, ullamcorper justo quis, euismod neque. Vivamus ac finibus neque, vel volutpat eros. Duis luctus at tortor sed fringilla. ==== Ante ==== Donec vitae ante non nibh tristique viverra non id odio. Morbi tincidunt bibendum vestibulum. Aliquam erat massa, lacinia et bibendum in, aliquam quis elit. Pellentesque ut purus leo. Aenean fermentum ipsum ut neque varius interdum. Sed vitae malesuada nisl. Pellentesque volutpat, neque eget mattis pellentesque, quam justo viverra nulla, vel gravida felis tortor vel dui. Phasellus sit amet eros id arcu eleifend fringilla. Nam rhoncus erat lacinia magna iaculis placerat. Suspendisse convallis consectetur ante ac finibus. Duis ultricies commodo diam, et tempus metus aliquam non. Vestibulum et aliquet arcu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque suscipit mauris id elementum eleifend. Praesent consectetur est eu metus porta scelerisque. Donec tincidunt tellus ut condimentum ornare. == Sed quisque orci vestibulum == Sed interdum arcu eget tristique sollicitudin. Nam sit amet orci id sapien condimentum bibendum at euismod magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus tincidunt lacus a gravida mattis. Nam commodo sem ut justo porttitor tristique. Sed tincidunt lacinia mauris sed dapibus. Suspendisse vel nunc vitae odio ultricies interdum. Nulla id lobortis sapien, vel lacinia augue. In et aliquet ligula, nec dignissim nisl. Fusce eget semper ipsum, a venenatis sapien. Aenean nec commodo nibh. Suspendisse commodo lectus iaculis justo vehicula, vitae imperdiet purus lacinia. Integer tincidunt neque id enim sollicitudin tempor. Sed viverra volutpat velit id sodales. Fusce eget fermentum tellus, eget malesuada tortor. === Dolor varius consectetur === Quisque dolor tortor, vestibulum in lectus eget, elementum egestas ex. Quisque malesuada commodo orci, sit amet dapibus nisi lobortis nec. Curabitur eleifend, metus a mattis eleifend, arcu lacus ornare metus, a finibus enim nisl et libero. Fusce vehicula vitae sapien sed rutrum. Proin magna magna, volutpat ac lectus eget, tempus posuere magna. Nulla condimentum volutpat orci, placerat aliquam metus porttitor quis. Nullam quam orci, feugiat id purus sed, suscipit bibendum nibh. Sed nisl urna, cursus in finibus bibendum, sodales ac urna. Sed vitae bibendum justo. In cursus et est vel cursus. Integer viverra massa sed hendrerit tincidunt. Donec et dolor sed augue eleifend mattis sed in nulla. Ut laoreet enim augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec at mi molestie, aliquam ex eget, interdum orci. Proin porta leo vitae est tristique, eget rutrum est aliquam. Proin porta pulvinar nunc, sit amet pellentesque libero pulvinar eget. Vivamus et tincidunt ex. Donec a eros placerat tellus ultricies dignissim vitae non tellus. Proin dapibus ornare libero, eu blandit mi blandit et. Praesent rhoncus et eros in suscipit. Proin id efficitur lectus. Nullam mollis odio semper, bibendum lectus quis, venenatis erat. Phasellus sed ultrices purus. Integer ultricies iaculis lorem id interdum. Proin sed nisl quis neque ultricies facilisis sit amet non lectus. Donec mattis risus lectus, ac elementum erat scelerisque non. Nulla ac leo malesuada, sodales eros pellentesque, pulvinar leo. Nulla at nunc nibh. ==== Lectus ==== Vestibulum consectetur lectus eu ultricies porttitor. Donec consectetur vestibulum malesuada. Phasellus a erat non elit egestas aliquet. Phasellus a nibh id dui rhoncus aliquam. Etiam aliquam magna tellus. Cras sit amet vulputate risus. Maecenas enim urna, blandit nec augue vitae, congue dapibus turpis. Fusce porttitor mauris at efficitur sodales. Donec ex felis, vehicula a sapien a, viverra pellentesque felis. Nunc iaculis suscipit sem, a auctor sapien aliquet vel. == Quisque donec nulla == Quisque lobortis augue sed malesuada lacinia. Aenean venenatis feugiat vestibulum. Vivamus posuere dui urna, vel scelerisque ex pretium sed. Duis quam mauris, congue vitae tellus in, malesuada posuere ipsum. Praesent consequat orci eget velit tristique, non ultrices nisi lobortis. Aliquam massa felis, interdum pulvinar leo ut, eleifend vestibulum magna. Nam lacinia pharetra ultrices. Maecenas pulvinar malesuada consectetur. Etiam venenatis tempus lectus. Nulla a tincidunt tortor. === Pretium in === Donec pretium pellentesque tincidunt. Cras nec neque eu arcu convallis porttitor. Phasellus dolor metus, egestas convallis lacus eu, mollis posuere nulla. Aliquam a eleifend tellus, eget congue metus. Donec libero enim, pellentesque sed enim at, tristique euismod nunc. Donec fringilla lectus a efficitur scelerisque. Suspendisse pretium nulla imperdiet ex faucibus, a viverra velit euismod. Nam eget eros non purus volutpat egestas. Nullam consectetur ac nunc in feugiat. Vivamus a imperdiet ante. Aliquam tempus, felis ut auctor efficitur, turpis mauris egestas arcu, feugiat malesuada velit felis a magna. ==== Turpis ==== Nulla in turpis sit amet dui dignissim sagittis. Pellentesque eget urna lectus. Maecenas eu fringilla libero. Ut hendrerit libero faucibus tellus dapibus, non semper neque varius. Sed eget venenatis sapien, quis finibus orci. Sed tincidunt pellentesque placerat. Cras vel est ornare, ultrices lacus nec, pharetra ex. Mauris sit amet nulla vitae nisl tristique dignissim rutrum at tellus. == Nam ut curabitur nullam quisque etiam == === Molestie eget === Nam molestie vestibulum nisl sit amet euismod. Sed cursus pellentesque varius. Sed bibendum libero sit amet elit placerat, id commodo mauris facilisis. Nunc tincidunt, libero sed accumsan condimentum, lorem ligula pellentesque ex, vitae pretium mauris nibh non libero. Vestibulum non elementum lacus, sed fermentum lorem. Sed molestie pharetra neque. In euismod sit amet tellus sit amet viverra. Nullam ornare bibendum mollis. ==== Fermentum ==== Ut eget fermentum mauris, eu efficitur metus. Sed varius euismod nulla. Proin pulvinar justo mauris, nec auctor lorem tincidunt non. Quisque sit amet aliquet nunc. Duis quis nisl ut nibh semper aliquet non vitae neque. Ut faucibus nibh ut arcu condimentum, eu suscipit nulla mollis. Morbi nec neque egestas, egestas sem et, fringilla augue. Etiam pharetra, magna et lobortis scelerisque, lacus nisi gravida metus, volutpat dignissim lorem elit ac metus. Fusce nec enim in nunc blandit fermentum eu eu mauris. In quis aliquet leo. Duis risus felis, mattis vitae lobortis a, lobortis et erat. Donec semper turpis metus, sit amet vestibulum tortor dictum vitae. Sed pretium cursus nulla. Nullam pellentesque vitae est et vulputate. Aliquam lorem est, congue elementum maximus a, lobortis a nibh. Sed ac porta velit. === Rhoncus sagittis === Curabitur rhoncus scelerisque risus nec viverra. Duis condimentum quam ac tortor dictum posuere. Mauris ullamcorper elementum efficitur. Fusce dapibus consectetur velit, vitae eleifend dolor elementum nec. Duis pulvinar interdum posuere. Nunc augue magna, fringilla eu odio in, consequat laoreet augue. Vestibulum ut sem condimentum, tempus metus vitae, ullamcorper est. Vestibulum nunc nulla, faucibus placerat mi sed, congue posuere felis. Curabitur nec ornare felis, quis vehicula risus. Praesent tristique urna ut malesuada semper. Donec quam tellus, fringilla nec efficitur ac, mattis nec nisl. Aliquam convallis, dui sit amet consectetur tempor, magna ante lobortis elit, nec cursus ex arcu eu dolor. ==== Leo ==== Nullam sagittis leo nec purus auctor imperdiet. Nam maximus tempor sem vel lobortis. Pellentesque feugiat purus venenatis neque tincidunt, eget imperdiet risus condimentum. Cras sed tempor est. In augue mauris, consectetur vel erat at, tempus scelerisque lacus. Sed gravida urna eget enim laoreet tempus. Vestibulum pellentesque cursus tellus, semper fermentum arcu sollicitudin quis. Nulla non placerat ex, interdum tincidunt turpis. Integer eu lorem at nunc sollicitudin finibus eget id sapien. Donec aliquam dolor augue, eget maximus eros auctor id. Pellentesque et est ac odio dignissim dapibus. Vestibulum nec tellus facilisis, dictum turpis vel, cursus ante. Vivamus bibendum tortor semper, consequat mauris ut, ullamcorper arcu. Vivamus non dui in augue rhoncus aliquam. === Eget ac === Quisque eget quam velit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus vitae pretium magna, facilisis mollis sapien. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus dictum diam, lobortis aliquam mi pulvinar et. Nunc ornare, odio a blandit aliquet, dolor massa blandit dui, vitae lobortis odio ligula bibendum mauris. Sed molestie, ante vitae fringilla vulputate, felis metus euismod nulla, nec ultrices arcu lectus ac nibh. ==== Nisi ==== Etiam ac nisi a nisl consequat vestibulum quis ut eros. Donec elit ligula, lacinia in maximus non, aliquam ut massa. Sed vitae diam hendrerit, commodo dui et, facilisis sapien. Maecenas erat urna, consequat a tempor vitae, gravida in lectus. Ut maximus sollicitudin sem id dapibus. Nullam id dolor tortor. Aliquam erat volutpat. Proin nec tristique ante. Ut finibus felis ac dapibus malesuada. Nunc egestas molestie urna ac placerat. Vestibulum tempor nec urna sit amet finibus. Quisque consequat convallis sem, quis consectetur lectus blandit non. Etiam risus metus, feugiat at eleifend eu, mattis quis quam. Integer sit amet tempus orci. Cras in lacus non enim rhoncus consectetur. Pellentesque rhoncus in metus id dictum. Nulla sed lectus felis. Morbi est quam, vestibulum ut fermentum vel, aliquam eget tortor. Praesent ut finibus enim, nec congue risus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris dictum velit at massa sagittis, a vulputate arcu lobortis. Etiam felis elit, tempor id lacinia sit amet, malesuada in sapien. Donec lacus augue, pulvinar eget augue quis, finibus convallis mauris. Phasellus lorem augue, ultricies sit amet auctor a, maximus eu urna. Cras vel felis quis neque fringilla accumsan. Curabitur magna tortor, varius nec nisl at, sagittis aliquam magna. Aliquam id nunc semper, efficitur lorem eu, pharetra purus. Nulla sed vulputate massa. Nam blandit purus quis lectus molestie, venenatis bibendum velit cursus. Suspendisse varius orci et nunc mollis, vitae vestibulum leo lacinia. Ut imperdiet ut odio vel tempor. Nulla ante nunc, vulputate nec interdum nec, interdum id ligula. Duis ullamcorper est eu velit bibendum egestas. Proin lacinia metus dolor, id imperdiet nulla scelerisque et. Fusce varius augue tristique mauris congue, sit amet feugiat nibh ultricies. Proin ornare, felis a vehicula elementum, sem nunc porta ante, at pretium libero massa cursus mi. Morbi sem sem, pellentesque ut quam nec, mattis consectetur quam. Fusce sit amet lobortis felis. Suspendisse est ante, dictum vel malesuada vel, vulputate et purus. Suspendisse vitae ultricies enim. Nunc mollis blandit eleifend. Donec dapibus congue aliquam. Duis purus sem, porta vel purus ut, rhoncus eleifend ante. Morbi finibus faucibus augue vel laoreet. Vestibulum quis pellentesque turpis, eget molestie ex. Pellentesque sed lorem non augue congue placerat. Nullam finibus egestas quam, quis maximus est pulvinar sed. Praesent nec orci sem. Vivamus ullamcorper tincidunt molestie. Nunc sit amet ornare libero, et blandit ante. Vestibulum tempor ac ligula ut venenatis. Nunc enim sem, rutrum id elementum gravida, dapibus in massa. Nunc risus est, dictum eget mattis ac, faucibus vel ipsum. Cras vulputate porta lobortis. Praesent consequat consectetur libero, et hendrerit dolor cursus id. Nulla felis nunc, lacinia non pellentesque eu, dictum maximus ligula. Donec vel elit id quam lobortis ornare. Vivamus a augue vitae ex vulputate dignissim. Nam tempus magna et purus porttitor fermentum. Sed in finibus eros. Nam quis tortor ac tortor vehicula elementum vel a orci. In hac habitasse platea dictumst. In dictum orci commodo nunc gravida, eget porta neque tempus. Ut laoreet risus non ullamcorper semper. In euismod id diam ac tristique. Cras nec risus aliquet, fringilla tellus ut, imperdiet dolor. Pellentesque at lobortis turpis, convallis pretium risus. Curabitur non nisl ante. Curabitur at ex eget nulla eleifend gravida sed id libero. Quisque feugiat semper lacus, in dapibus lacus fringilla ac. Aliquam feugiat, nulla aliquet euismod pellentesque, erat libero sodales arcu, ut commodo nulla nibh egestas augue. Aliquam bibendum pellentesque diam eu luctus. Vivamus blandit urna magna, sit amet ullamcorper mi interdum vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla non nisi eget turpis consectetur fringilla. Donec mattis, nunc nec viverra varius, neque arcu pellentesque est, vitae egestas risus urna ac metus. Pellentesque ornare volutpat facilisis. Maecenas congue dignissim neque, ut bibendum orci hendrerit in. Etiam efficitur nisi mattis nibh faucibus mattis. Duis vel diam at tellus semper eleifend. Vivamus nec nibh facilisis, cursus nisl eget, hendrerit enim. Nam ullamcorper lobortis metus nec auctor. Vivamus eget tortor nisi. Integer laoreet suscipit nisl id porta. Mauris quis vestibulum elit. Praesent tellus justo, volutpat eu porta at, hendrerit eget nisi. Curabitur nec nulla ac metus posuere aliquam vitae at felis. Donec a pretium purus. Phasellus ligula enim, ullamcorper at velit vitae, porta congue nisi. Etiam ac est eu metus sagittis ultrices. Ut facilisis congue lorem eget bibendum. Maecenas vestibulum suscipit dolor, non lacinia tellus blandit aliquet. Maecenas id posuere nibh. Donec sed tristique metus. Nullam elementum sollicitudin tellus, a volutpat est feugiat faucibus. Fusce consectetur nulla metus, id elementum ligula iaculis ut. Sed ac lectus elit. Nam sed leo porta, pellentesque dui sit amet, dapibus metus. Morbi facilisis egestas euismod. Sed sollicitudin, enim et feugiat ultricies, lectus nulla scelerisque risus, quis volutpat ante dolor condimentum felis. Curabitur vitae augue vehicula, malesuada lorem vel, hendrerit enim. Pellentesque dapibus interdum accumsan. In hac habitasse platea dictumst. Nullam dictum sodales volutpat. Nullam euismod nibh sit amet tortor interdum euismod. Nulla quis magna mollis, lacinia dui ut, pulvinar nisi. Aenean fermentum pellentesque nulla, in imperdiet quam egestas et. Ut consequat purus nisl. Praesent semper ac est non fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque tortor justo, semper sed est ut, pulvinar sagittis leo. Suspendisse consectetur rutrum pretium. Donec eu ligula purus. Ut elit nisi, pretium et vestibulum a, iaculis et nulla. Donec ullamcorper feugiat urna, accumsan pulvinar lorem. Aenean a vestibulum tortor. Cras facilisis sit amet arcu sed varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis congue feugiat tincidunt. Fusce et lacinia lorem, at elementum risus. Morbi faucibus scelerisque euismod. Proin ac sagittis ipsum. Vestibulum euismod auctor nisl et faucibus. Nulla aliquam, enim a mattis tristique, ipsum ligula efficitur enim, feugiat euismod justo tellus quis nibh. Phasellus ut tincidunt lorem. Praesent at tempus eros. Pellentesque hendrerit mauris at libero ultricies, maximus dapibus nibh porttitor. Vivamus ornare et mauris nec volutpat. Sed nibh lorem, tempor vitae pulvinar non, placerat id ipsum. Cras et ex ex. Proin suscipit nibh gravida sagittis fermentum. Sed tincidunt elementum convallis. Etiam tempor dictum ex, quis fringilla dui faucibus sit amet. Fusce maximus ultrices dui nec laoreet. Praesent vel sem in tortor ultrices pellentesque in et est. Quisque sagittis magna et velit suscipit pellentesque. Aenean nec mattis eros, et luctus libero. Phasellus quis tortor tincidunt, pellentesque mauris vehicula, tempor magna. Etiam quis commodo sem. Nullam id mauris magna. Pellentesque quis turpis a metus lobortis dignissim. Donec a neque semper, rhoncus erat nec, vestibulum justo. Proin laoreet erat sit amet augue pretium, sed auctor nisl consectetur. Proin feugiat, nulla eu pellentesque ullamcorper, urna orci aliquam eros, id consequat ex purus vel leo. Proin gravida nibh purus. Suspendisse augue nisl, bibendum eget mauris ut, hendrerit tempus sem. Nullam eget imperdiet metus, sit amet lacinia odio. Aenean congue suscipit libero suscipit efficitur. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed nec accumsan nibh, vitae convallis ligula. Etiam vehicula leo quis fermentum condimentum. Maecenas vehicula ultrices magna nec porttitor. Integer non tortor vel sapien efficitur volutpat quis in metus. In feugiat a lacus tempus gravida. Cras interdum sit amet odio sit amet sodales. Vivamus non mauris ligula. Pellentesque cursus sit amet libero sed consequat. Duis quis molestie nunc. Nullam eleifend arcu vitae rutrum hendrerit. Cras sit amet odio congue, lacinia justo vitae, efficitur nisi. Suspendisse pretium sodales mauris sed sollicitudin. Nulla sit amet facilisis erat, nec auctor diam. Donec eu ullamcorper diam. Integer laoreet urna varius vestibulum accumsan. Duis congue elit in vulputate consectetur. Quisque iaculis risus nisi, nec viverra est consectetur id. Sed bibendum et orci quis cursus. Quisque a euismod justo. In venenatis leo a bibendum tristique. Quisque a ex justo. In sagittis lorem sed massa mattis, non ultricies dui venenatis. Maecenas accumsan hendrerit quam ut imperdiet. Aenean ultrices finibus lorem ac posuere. Sed viverra pretium arcu. Nam eu turpis vel metus venenatis pharetra a a metus. Curabitur non elit lorem. Sed vestibulum sit amet tortor non venenatis. Phasellus suscipit dolor nunc, sed elementum nisl mattis in. Nullam dignissim interdum volutpat. Quisque luctus hendrerit nibh non posuere. Ut convallis quis justo rutrum cursus. Etiam semper interdum nisl eget efficitur. Quisque laoreet urna quis lacus mollis, quis ultricies urna volutpat. Cras a congue leo. Integer mattis, arcu quis ornare convallis, risus ante accumsan erat, id volutpat orci ligula in nulla. Aliquam nec mollis massa. Etiam et nulla quis augue facilisis viverra. Mauris in leo auctor, feugiat purus sed, ultricies lacus. Suspendisse imperdiet augue ut ligula pretium, in accumsan augue lobortis. Phasellus molestie convallis lobortis. Aliquam erat volutpat. Aenean ultricies leo nec justo semper laoreet. Sed vitae lorem fermentum turpis elementum sodales eu eget lectus. Aenean placerat, nibh non malesuada sagittis, diam sem dignissim tortor, lacinia tempus sem mauris sit amet urna. Cras hendrerit odio augue, quis dapibus turpis interdum ut. Vivamus in posuere lorem, sed consectetur augue. Integer blandit neque viverra, commodo nisi sit amet, placerat lorem. Praesent aliquam enim in pellentesque lobortis. Pellentesque non posuere enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis eget orci lobortis, faucibus est ut, congue eros. Aliquam et ex in elit molestie eleifend a at odio. Quisque sit amet aliquam metus. Suspendisse potenti. Maecenas convallis ornare odio, a fermentum neque porttitor vitae. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec lacus diam, rhoncus at scelerisque nec, ornare in tellus. Fusce orci nibh, tempor at turpis quis, convallis malesuada felis. Praesent congue mattis tortor. Mauris malesuada, dolor in ultricies aliquet, velit dolor tempor dolor, quis commodo nisi enim eu nulla. Praesent auctor at nisl eget congue. Integer condimentum magna a magna facilisis, id pretium arcu varius. Pellentesque bibendum tellus in leo scelerisque, sollicitudin eleifend metus condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum mattis tellus vestibulum tempor ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu dictum metus. Quisque ipsum mi, sodales sit amet scelerisque eu, ultrices sed nunc. Mauris bibendum lacus ut blandit ornare. Suspendisse a arcu gravida, maximus ante quis, fermentum dolor. Ut ut lorem commodo, aliquet erat sit amet, placerat dolor. Phasellus id sapien eros. In condimentum efficitur nibh vitae ultrices. Fusce congue sed nibh iaculis luctus. Mauris lobortis lectus orci, sed efficitur enim convallis ullamcorper. Sed sed arcu id elit interdum porta. Praesent dignissim auctor consectetur. Phasellus leo ipsum, facilisis non ex eget, sodales tristique mauris. Fusce ac luctus felis. Integer ac metus mi. Nam facilisis, eros quis dapibus vestibulum, nibh orci luctus dolor, eget lobortis ligula turpis nec urna. Curabitur convallis, lectus eleifend imperdiet interdum, felis sem cursus velit, non scelerisque tortor libero quis tortor. Fusce neque ipsum, bibendum et mauris vel, dignissim sagittis mi. Aliquam vel pulvinar risus. In eget efficitur tellus, non auctor elit. Nullam eu lectus urna. Pellentesque congue nisi vel semper imperdiet. Duis a sagittis dolor. Proin bibendum magna a felis feugiat placerat. Proin et bibendum magna. Mauris sagittis est quam, sed elementum urna lobortis a. Etiam in augue venenatis, elementum mauris ac, scelerisque arcu. Nunc sit amet mi nisl. Fusce blandit felis a justo ultrices varius. Vestibulum hendrerit facilisis leo, sit amet vestibulum tortor malesuada ut. Etiam nibh arcu, pellentesque sit amet leo sit amet, suscipit pretium erat. Praesent scelerisque quam libero, ut tristique metus tristique a. Integer venenatis ligula cursus, sodales velit eu, tempor lorem. Sed ante ex, porttitor sit amet dui mattis, aliquet tristique diam. Pellentesque molestie varius iaculis. Phasellus viverra pellentesque ipsum in mollis. Morbi tempus odio magna, ut ornare risus congue id. Etiam luctus elementum enim eu tempor. Sed mattis metus ac aliquam pretium. In sit amet eleifend erat. Maecenas lacinia eu nunc non scelerisque. Aliquam finibus sapien non enim efficitur, sit amet aliquet ex aliquam. Integer pulvinar, dui a interdum ultrices, justo orci venenatis orci, vel condimentum nulla dolor vitae mauris. Vivamus posuere faucibus purus at consectetur. Nulla dignissim libero in ex semper, at aliquet magna tincidunt. Nam facilisis sit amet libero a porta. Aenean laoreet, orci quis egestas scelerisque, erat nibh efficitur libero, vitae ultricies ipsum massa ut velit. Phasellus pharetra egestas diam at aliquam. Nulla ac tellus non tellus molestie euismod sit amet sed libero. Praesent quis interdum nunc, at rhoncus lacus. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur pharetra, nulla non lacinia consequat, orci est interdum nisi, eu aliquet urna velit eu sapien. Nunc sodales condimentum purus ut sagittis. Sed orci metus, eleifend et finibus ac, laoreet et sapien. Pellentesque erat arcu, tristique sit amet odio a, lobortis vehicula ligula. Quisque rutrum lectus non lectus sodales suscipit. Suspendisse et mauris et mi imperdiet scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim ligula vel nisi varius finibus. Suspendisse tempor nibh vel finibus mollis. Nam pulvinar rutrum sagittis. Aenean ligula ex, feugiat a odio non, tempor condimentum erat. Praesent cursus leo quis justo blandit, ut aliquam sapien tempus. Aliquam tempor porta turpis, vehicula lobortis risus lacinia quis. Quisque et purus in risus mattis rhoncus. Sed in condimentum mauris. Nulla sed velit eu magna euismod pulvinar. In ullamcorper libero dui, vel ultricies sem fringilla et. Donec eget sagittis enim. Ut ut nisl laoreet, congue nibh nec, volutpat nibh. Aenean eget feugiat urna. Ut hendrerit justo quis mi mattis, vel sodales neque hendrerit. Quisque rhoncus ex non augue venenatis placerat. Mauris at magna tempor, lacinia erat eget, egestas quam. Phasellus viverra dolor ac ligula semper porta. Quisque egestas ligula mattis pulvinar ullamcorper. Duis placerat vehicula ex, quis dictum purus vehicula quis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Curabitur ultrices ut orci vel tempus. Aliquam ultrices molestie sapien, ut condimentum enim consequat vel. Curabitur bibendum ornare orci, et egestas nisi euismod at. Proin ut mi a sapien pharetra dignissim non ac erat. In augue ligula, ullamcorper id semper vitae, rutrum non tellus. Donec libero odio, condimentum malesuada ullamcorper eu, aliquam non urna. Proin lobortis, odio sed pellentesque mattis, quam libero volutpat risus, ullamcorper mattis erat orci eget lorem. Pellentesque imperdiet erat cursus consequat imperdiet. Curabitur congue vel orci ut fringilla. Duis quis ante in turpis vulputate sodales. Duis blandit ante justo, et sodales magna laoreet id. Phasellus blandit vehicula ipsum, non suscipit eros dictum sed. Integer malesuada sed ante sed feugiat. Praesent porta volutpat elit, non rutrum orci cursus vel. Fusce et lacus eget magna consectetur tempor quis et augue. Proin et rutrum purus. In bibendum hendrerit viverra. Morbi sed volutpat odio. Donec eget justo sit amet metus mollis efficitur. Suspendisse bibendum ac ipsum id iaculis. Sed ut sagittis orci, in blandit mauris. Quisque interdum commodo volutpat. Nullam vel est eget sapien tempus ullamcorper. Nullam sed dictum dolor, non eleifend sapien. Morbi vulputate lectus lorem, vitae semper ex dapibus ut. Proin vulputate, dui eu eleifend congue, lorem velit eleifend justo, ac mollis nibh mi vel risus. Quisque suscipit tristique ipsum pharetra dictum. Vestibulum blandit neque orci, a vulputate elit feugiat eu. Fusce fermentum magna lectus, nec semper nisi tristique vitae. Cras efficitur pharetra lectus. Proin sit amet risus velit. Fusce quis lectus sodales nibh feugiat varius. Sed varius, leo eget iaculis sagittis, urna quam tempor tellus, id tempor erat diam euismod leo. Suspendisse ipsum nisi, semper in aliquet et, interdum non tortor. Phasellus vehicula, sapien non tempor maximus, metus erat porta risus, suscipit gravida mauris dolor ac enim. Praesent sit amet tellus neque. Donec venenatis dictum bibendum. Praesent mattis orci massa, eget varius nisl aliquam nec. Nulla commodo et mauris ut pellentesque. Proin commodo, tellus vel vestibulum interdum, enim diam vulputate sapien, eget lacinia ipsum lectus vel diam. Aenean eleifend ligula et orci efficitur, sed scelerisque nisi lacinia. Mauris venenatis, elit in tristique gravida, odio velit lobortis augue, ut pretium diam ipsum vitae justo. Cras sit amet pellentesque turpis. Donec ac pretium sapien. Mauris neque arcu, iaculis a sagittis quis, elementum vitae tellus. Aenean sit amet interdum diam. Phasellus nibh ligula, interdum in nisl nec, ultricies luctus sapien. Integer eu eleifend urna, sit amet euismod neque. Aliquam id sagittis tortor. Curabitur in sagittis enim, quis lobortis diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dignissim purus eu auctor ultricies. Proin laoreet diam et magna tempor, in congue ex tincidunt. Nunc vel cursus tellus, eget blandit odio. Cras metus magna, pulvinar eu tristique finibus, pellentesque id tortor. Vestibulum cursus ut odio vitae ultricies. Integer at tellus varius, dapibus augue quis, mattis elit. Nullam malesuada in lectus nec finibus. Praesent sed massa metus. Etiam gravida tristique feugiat. Curabitur blandit erat ac scelerisque placerat. Nam bibendum dapibus ex nec sagittis. Nullam malesuada fringilla lorem, id posuere metus varius aliquam. Aliquam porttitor a velit ut auctor. Vivamus tincidunt tempor pretium. Pellentesque ac faucibus felis. Nunc vulputate ut urna quis mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris in purus et mauris efficitur lobortis semper at mi. Praesent sollicitudin est a nibh facilisis pellentesque. Pellentesque vitae accumsan nisl. Ut porttitor tellus non mi tempor porta. Phasellus magna orci, bibendum quis sollicitudin nec, iaculis ac ipsum. Donec tellus ipsum, egestas quis ante vitae, dictum suscipit risus. Sed turpis orci, elementum et tellus et, iaculis tincidunt lacus. Nullam gravida vulputate enim, at semper ligula. Maecenas efficitur molestie leo id malesuada. Ut eu sodales nunc. Nunc et leo non ligula dignissim laoreet. Phasellus id lorem quam. Sed porttitor quis lorem quis congue. Duis laoreet orci erat, sed sagittis ipsum egestas id. Duis volutpat dui ac urna consectetur dictum. Mauris ac purus faucibus, laoreet nunc a, bibendum purus. Pellentesque sagittis tempus nulla id faucibus. In urna velit, iaculis et nisl ac, mollis gravida leo. Sed dignissim elit rhoncus, maximus ex nec, tempor mi. Nulla id dui quis nulla blandit pretium. Duis vestibulum pellentesque accumsan. Sed dignissim dapibus risus at ultricies. Maecenas scelerisque lacus at arcu viverra faucibus. Phasellus at quam leo. Integer sit amet volutpat orci. Aliquam consectetur lorem vitae libero tristique, vel sollicitudin tortor mattis. Sed commodo mauris sed neque volutpat, id ultricies metus laoreet. Aliquam sed nibh sem. Quisque vehicula, massa et porta scelerisque, dolor urna elementum leo, at congue massa est a justo. Fusce vitae elementum tellus, vel condimentum erat. Quisque molestie, velit ac varius lacinia, enim tellus porttitor sapien, et laoreet dolor quam at erat. In vitae dapibus tortor. Mauris in libero luctus, gravida nisi in, porta velit. Vivamus venenatis turpis ut malesuada dictum. Pellentesque a dapibus leo. Phasellus auctor a lectus vitae porttitor. Donec pellentesque facilisis pretium. Sed placerat, ligula sit amet consectetur blandit, nisi leo semper lacus, vitae dictum est lacus nec velit. Morbi commodo molestie diam a sodales. Praesent sed aliquam mauris. Aliquam vitae nisi sed orci ullamcorper pharetra. Nunc at elementum ante, quis scelerisque quam. Praesent auctor cursus pretium. Ut dignissim massa eget nulla volutpat aliquam. Etiam maximus lacinia ultricies. Integer non aliquam risus. Curabitur at accumsan nulla. Nullam varius varius metus eu vestibulum. Suspendisse ac ligula velit. Curabitur placerat, ante sed dapibus congue, odio neque varius purus, et varius metus enim nec odio. Vestibulum aliquet laoreet purus a posuere. Sed eget vehicula nibh, ac lobortis tellus. Phasellus eleifend fermentum ornare. In libero tellus, dapibus sed interdum sed, aliquam in purus. Nam interdum quis neque et tincidunt. Aenean odio ante, iaculis sed leo nec, venenatis molestie velit. Sed ipsum nisl, mollis eget aliquam sed, semper vitae lectus. Nam placerat nisl sed pulvinar ultrices. In id nisl ac felis mollis dapibus. Sed condimentum feugiat malesuada. Nam a felis ac dui pretium fringilla gravida at leo. Pellentesque aliquet porta turpis, ac mollis dolor pulvinar in. Duis vitae nunc a neque dignissim euismod ac non erat. Quisque non mauris ac massa malesuada dictum eget ac ipsum. Curabitur maximus dui id dolor ornare facilisis quis porttitor augue. Nunc pellentesque tellus et risus malesuada, ut bibendum diam gravida. Suspendisse placerat ultricies dictum. Sed pulvinar sapien a tellus dignissim venenatis nec id metus. Ut porta lacus sodales, semper diam maximus, efficitur sapien. Curabitur sollicitudin posuere leo, et molestie leo consectetur vitae. Pellentesque vel porta leo. Sed odio velit, porta eu mattis sed, dapibus a purus. Duis auctor, dui in blandit semper, leo eros dignissim nibh, eu convallis ex massa at odio. Proin sodales nisi mauris, et lacinia metus lobortis ac. Donec eget ullamcorper ligula, sed posuere nibh. Nullam finibus metus vel tellus blandit, et semper enim consectetur. Nunc ac auctor tellus. Phasellus in ex id tellus hendrerit ultricies. Aliquam odio quam, ultricies sit amet quam in, rutrum commodo mi. Praesent facilisis rhoncus bibendum. Donec non nisi sit amet erat tristique pretium at in erat. Nulla facilisi. Sed luctus quam et lacus accumsan, varius vestibulum ipsum ultricies. Curabitur fermentum faucibus nunc et feugiat. In vitae lectus rutrum, sollicitudin odio in, semper enim. Vivamus ac sodales felis. Pellentesque turpis purus, feugiat sit amet turpis nec, posuere mollis urna. Aenean sed mi eleifend, fringilla urna eu, ultrices nulla. Phasellus non lacus ut nulla condimentum gravida. Nulla purus risus, lobortis vitae dui at, fringilla suscipit tortor. Maecenas maximus, nibh et hendrerit congue, odio nibh consequat ipsum, vel ullamcorper lorem ante nec diam. Donec rutrum massa id tortor pretium, vel imperdiet tortor accumsan. Nullam sit amet vehicula urna. In consectetur justo ac magna suscipit, at varius velit pharetra. Fusce convallis enim eu cursus tincidunt. Nam non neque ac leo viverra fringilla sed varius turpis. Sed finibus nibh quis purus tempor laoreet. Maecenas faucibus pellentesque ex quis eleifend. Vestibulum ultrices justo mi, sit amet varius urna gravida vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean fermentum facilisis orci id tincidunt. Donec vehicula metus vitae volutpat rutrum. Sed et hendrerit erat, sit amet lobortis mauris. Maecenas pellentesque dui risus, a placerat dui cursus ut. Aliquam ullamcorper egestas justo, a varius dolor. Etiam elementum aliquam sapien quis sagittis. Maecenas at convallis magna, vitae pellentesque urna. Vestibulum malesuada, nisi in efficitur laoreet, massa ex tristique turpis, in varius arcu mi id purus. Duis rutrum egestas facilisis. Donec et mi ut tortor cursus semper. Suspendisse potenti. Ut faucibus tortor nunc. Fusce sodales quam sit amet purus maximus, id hendrerit purus volutpat. Integer iaculis, justo id dapibus dignissim, tortor ante hendrerit felis, imperdiet vulputate lectus quam sed nibh. In eu hendrerit ex. Nam ligula nisi, viverra vitae facilisis sit amet, facilisis eu augue. Nullam auctor est nec eros laoreet, vel tristique libero rhoncus. Nullam a odio sit amet nulla egestas pulvinar eu eu sem. In placerat ac est ut scelerisque. Morbi nec hendrerit neque. Vivamus velit odio, interdum et finibus scelerisque, fringilla at lacus. Mauris sit amet tortor malesuada, mollis ipsum faucibus, euismod lorem. Ut id aliquam magna. Cras vel commodo neque, rutrum rutrum erat. Nunc in orci bibendum, laoreet enim quis, placerat metus. Mauris accumsan tempor velit vel sodales. Maecenas ornare purus sem, vel consequat dui faucibus sed. Cras rutrum ac tellus sed varius. Pellentesque facilisis libero nisi, in tincidunt felis gravida sit amet. Phasellus a interdum purus, eu sodales ex. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In convallis ex ut metus blandit aliquet. Proin vitae consectetur nulla. Praesent mattis, urna sit amet lacinia aliquet, sapien mauris pellentesque libero, egestas scelerisque sem quam ut massa. Nunc vitae porta sapien. Aenean fringilla placerat lacinia. Ut egestas ligula quis velit elementum congue. Praesent tincidunt consectetur nisl eget maximus. Praesent in aliquet libero, at tempor elit. Vestibulum tellus est, ornare nec est tempus, sodales varius turpis. In dignissim quis odio ut pharetra. Sed pulvinar sollicitudin massa at bibendum. Aliquam vulputate justo id vehicula malesuada. Ut sapien lorem, iaculis vitae mauris ac, posuere eleifend diam. Sed aliquet ex quis odio scelerisque, sed consectetur elit tempus. Curabitur vitae ultrices risus. Praesent eu augue in risus ullamcorper porta. Maecenas vulputate nisl nibh, ut tincidunt lacus posuere in. Nunc ac arcu lacinia, ultrices quam sed, scelerisque dolor. Quisque aliquam, arcu eget efficitur vestibulum, nibh justo aliquam leo, in porta eros justo at sem. Quisque fringilla dictum mauris, nec consequat nulla cursus at. Vestibulum congue, nulla vitae dictum hendrerit, felis orci euismod arcu, nec laoreet enim nibh eu sapien. Cras fringilla purus nisi, vel consequat justo mollis ultrices. Donec gravida, massa quis varius dignissim, nisl quam lacinia purus, non porttitor massa urna vitae nibh. Sed sit amet euismod sem. Nam ut arcu nec diam porttitor congue ut ac felis. Praesent facilisis ultricies elementum. Duis a tincidunt mauris. Phasellus in dapibus tortor, dignissim placerat leo. Aenean volutpat facilisis enim, vel laoreet purus. Integer tincidunt mattis lectus quis vulputate. Maecenas maximus quam dui, sit amet dapibus justo suscipit quis. Donec ornare consectetur quam, ut tincidunt mi iaculis eu. Nam vitae urna at est faucibus accumsan in et elit. Morbi neque ligula, cursus in luctus nec, tempus mollis lorem. Aliquam a mi orci. Ut id ante iaculis, tristique lorem eget, molestie ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis luctus libero eget lacus commodo ultrices. Integer vitae auctor libero. Proin et magna lobortis, pharetra arcu tincidunt, luctus est. Quisque eget vehicula lectus, eu malesuada dolor. Maecenas luctus malesuada dolor, vitae sollicitudin elit pellentesque sit amet. Nunc feugiat tincidunt aliquet. Pellentesque sed pulvinar lorem, sed egestas nisi. Mauris viverra, nunc vitae varius vulputate, felis augue bibendum nibh, eget fringilla ipsum tellus nec enim. Maecenas sed elit a diam congue tempus. Duis ac erat diam. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In molestie arcu et fringilla scelerisque. Suspendisse finibus turpis ex, in laoreet nibh malesuada nec. Donec elementum consequat nisi vulputate consequat. Proin id pulvinar risus. Proin ullamcorper ipsum eros, porttitor feugiat turpis tempus in. Aliquam blandit ante eget purus sollicitudin eleifend. Nulla vel quam erat. Maecenas pretium vel arcu quis condimentum. Maecenas vitae magna viverra, finibus purus vitae, hendrerit orci. Nulla ut nisi vel magna accumsan rutrum. Quisque aliquet ligula eget lacus facilisis tincidunt. Fusce non leo dapibus, tincidunt nisl et, auctor justo. Morbi aliquet metus at libero auctor, molestie elementum quam sodales. Maecenas interdum aliquam mauris, non scelerisque leo feugiat et. Fusce porta quis ipsum non molestie. Mauris auctor diam luctus erat pellentesque, vel sodales nisl condimentum. Integer elit nisl, tincidunt a molestie id, sagittis sit amet nibh. Etiam et porta purus. Sed nec risus non sapien egestas congue eu sed lectus. Ut diam mauris, sollicitudin id turpis vel, pretium malesuada lorem. Cras pretium mi ut nisi sodales, eu consectetur metus suscipit. Donec condimentum nunc erat, a tristique nisi ullamcorper sit amet. Donec nec condimentum velit, nec fermentum justo. Phasellus ac sem vel nisi ornare tristique. Nullam gravida, tellus at malesuada ornare, ipsum orci laoreet nibh, nec fringilla sem nulla a lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse potenti. Curabitur luctus rutrum aliquet. Etiam condimentum velit nibh, ac efficitur ex dignissim eu. Integer iaculis augue purus, ac commodo enim viverra in. Cras erat justo, efficitur in metus ullamcorper, lacinia commodo quam. Curabitur sollicitudin ex ac dui congue aliquam. Fusce a arcu sem. Suspendisse elementum, dolor vel vestibulum venenatis, tellus risus dapibus elit, eget rutrum felis est et massa. Ut feugiat placerat sapien in feugiat. Praesent porta gravida lectus ut maximus. Sed mattis ex tincidunt, iaculis lacus vitae, luctus massa. Quisque condimentum fermentum turpis quis iaculis. Pellentesque fringilla urna pretium turpis efficitur, id lacinia orci condimentum. Duis tristique enim velit, nec imperdiet nisl euismod sit amet. Aliquam quis risus diam. Aenean aliquam luctus orci, nec laoreet velit malesuada sit amet. Maecenas vulputate est nec enim laoreet, in aliquet tortor auctor. Praesent nisl sem, malesuada ac odio vel, tincidunt consectetur leo. Nullam in neque libero. Fusce maximus nisl est, eget blandit leo condimentum sed. In maximus, est eget tincidunt semper, magna sapien ullamcorper tortor, sed mollis orci sapien in elit. Ut tincidunt accumsan orci, quis iaculis nibh blandit ac. Phasellus luctus auctor arcu, eu ultrices eros laoreet et. Vivamus velit lectus, iaculis et laoreet ac, pulvinar id tellus. Cras ac felis a nibh pharetra pellentesque eu rhoncus ipsum. Nulla vehicula risus dolor, id bibendum felis interdum sed. Nulla sed sem facilisis enim pellentesque ornare eu quis nulla. Sed arcu ipsum, ultrices at massa id, efficitur ultrices mauris. Fusce malesuada nisi eu nisl maximus, sit amet fermentum massa mollis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi et elit sem. Aliquam nec lorem eget nulla consectetur sagittis sit amet at diam. Phasellus erat justo, interdum ut vestibulum eget, semper sed ex. Sed sit amet orci ut enim tempor ultrices sit amet ac felis. Maecenas varius metus tincidunt ligula maximus, a accumsan lectus laoreet. Cras massa augue, congue sit amet mi non, consectetur semper enim. Proin pellentesque congue enim. Morbi cursus elit et dui placerat, id scelerisque lectus luctus. Donec non dui eget erat cursus egestas ac et lacus. Vestibulum facilisis diam et neque rhoncus, id consectetur ligula auctor. Suspendisse vitae dui sagittis, molestie leo rhoncus, faucibus eros. Vestibulum sed sem faucibus, volutpat ligula vitae, scelerisque augue. Nullam eget malesuada metus. Fusce quis purus nulla. Nullam ac gravida ipsum. Curabitur vel lacus ac diam fermentum porttitor. Sed a leo ac justo mollis scelerisque non id ligula. Nullam enim risus, tincidunt eget sollicitudin in, gravida nec elit. Fusce fringilla quis massa in sagittis. Cras sollicitudin tellus ac lacus pharetra rhoncus. Sed at fringilla diam. Suspendisse finibus lectus ac arcu pellentesque tincidunt. Nam congue pharetra quam. Nam sed porta justo. Nulla facilisis malesuada justo, non porta nisl elementum ut. Sed id lectus felis. Suspendisse potenti. Vestibulum in viverra lacus. Integer sollicitudin quam non nisi tincidunt, in gravida sapien venenatis. Nulla id tellus at lorem aliquet aliquam at nec lectus. Proin bibendum fringilla aliquam. Fusce ultrices, libero vel tincidunt pharetra, nulla arcu imperdiet libero, sit amet venenatis risus elit id ligula. Aliquam est nulla, mattis non dictum eget, hendrerit nec massa. Sed vulputate purus nec lectus sodales tempor. Aliquam erat volutpat. Phasellus porta justo mauris, quis laoreet felis gravida in. Nulla at varius erat. Suspendisse congue odio eros, at fermentum tellus posuere vel. Phasellus non odio odio. Phasellus non posuere ante. Aenean turpis massa, posuere non turpis at, placerat pulvinar quam. Aenean pharetra cursus elementum. Donec porta, lorem et facilisis tempus, augue nisl dictum lacus, vitae accumsan erat ipsum nec sapien. Phasellus eget vestibulum sem, quis dignissim enim. Sed vel dui dolor. Maecenas sed suscipit eros. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ac convallis dolor. Praesent condimentum metus iaculis lorem molestie, eget semper felis efficitur. Phasellus condimentum risus at nisi congue tempor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi dolor turpis, tempus in finibus nec, accumsan id arcu. Donec purus lacus, suscipit vitae justo sed, vestibulum dapibus eros. Aenean vehicula suscipit massa sit amet cursus. Sed tempor luctus pellentesque. Vestibulum venenatis eros nulla, a lobortis tortor efficitur in. Morbi consequat, justo eget consectetur accumsan, augue eros posuere elit, ac maximus libero eros et libero. Curabitur fermentum hendrerit nunc eu porttitor. Sed a velit vulputate, blandit arcu id, interdum sem. Sed tempor a tellus quis imperdiet. Proin interdum interdum laoreet. Nam maximus mi eleifend, vulputate velit id, vehicula lacus. Quisque nulla nisl, luctus vitae erat eu, rutrum varius urna. Praesent id odio vitae urna convallis aliquam nec nec purus. Duis venenatis vestibulum dui, ac feugiat sapien vestibulum in. Phasellus luctus accumsan nisl, eget venenatis lacus lacinia id. Morbi fringilla hendrerit ex, sed ultrices lectus mollis non. Donec bibendum molestie auctor. Cras consectetur sagittis sem, ut rhoncus mauris molestie quis. Phasellus magna sem, elementum egestas sollicitudin eu, posuere id ipsum. Nunc tempus metus diam, a lacinia neque tincidunt eget. In fermentum enim mi, accumsan porttitor libero accumsan vitae. Etiam sagittis dapibus elit, eu maximus eros ornare non. Donec ullamcorper arcu quis ex scelerisque interdum. Sed ac maximus arcu. Praesent faucibus est ullamcorper nulla maximus sodales. Curabitur pellentesque augue lectus, non iaculis neque dignissim in. Donec eget purus ut nunc condimentum consequat. Praesent gravida tempus semper. Aliquam pellentesque tempus tortor eu cursus. Proin a elementum sapien, blandit vestibulum dolor. Aliquam quam orci, sagittis quis lorem viverra, tincidunt semper ipsum. Nulla consectetur neque ac enim placerat venenatis. Pellentesque fermentum ultricies urna sed vehicula. Quisque aliquet blandit ipsum, et finibus nibh pharetra quis. Aenean ullamcorper tellus rutrum velit sodales, a eleifend mi maximus. Duis a enim nec felis tincidunt posuere. Donec vel nisl condimentum, scelerisque quam id, interdum urna. Phasellus eget bibendum nisi. Nullam posuere iaculis sapien, ac porttitor nisl condimentum a. Morbi lobortis quis mauris in rhoncus. Maecenas sed porttitor urna. Nulla gravida ante non velit venenatis, id egestas turpis commodo. Sed luctus consequat neque eget varius. Nullam sed dui pretium, ullamcorper libero eget, consectetur massa. Suspendisse et bibendum nisl. Nulla eros odio, venenatis eget lacinia ut, commodo vitae elit. Cras consectetur nisl ut placerat fringilla. Pellentesque id nisl non lorem congue auctor. Nam luctus massa augue, et volutpat quam dapibus ac. Aenean molestie lorem quis dolor fermentum, eu fermentum nisi auctor. Mauris maximus egestas libero id pellentesque. Integer mauris magna, congue sed efficitur sit amet, molestie vestibulum urna. Vivamus sit amet lorem mattis, mollis justo sit amet, congue risus. Morbi mattis lorem eu arcu elementum euismod. Nullam sollicitudin, dui vel lobortis molestie, neque lectus maximus elit, a lobortis urna lectus eu ipsum. Quisque tristique mollis tempus. Nunc pellentesque nunc a congue mollis. Nam finibus tellus eget venenatis ullamcorper. Etiam euismod pharetra lectus sed tincidunt. Integer tincidunt, erat ut eleifend ultrices, turpis elit placerat tortor, at rutrum justo enim sit amet nunc. Nulla tempor enim ex, eget venenatis magna egestas vitae. Praesent sed congue sem. Duis vulputate mi in odio tempor, et aliquam ipsum gravida. Donec ipsum arcu, interdum maximus risus eu, placerat interdum est. Proin pulvinar mauris velit, vel ultricies velit tristique ac. Sed vel velit eros. Mauris sagittis nisi ut mi volutpat, ac laoreet ex elementum. Pellentesque fringilla risus sit amet dui dapibus dapibus. Proin vitae metus sit amet risus dapibus auctor. Quisque non varius est. Nulla vestibulum sodales nulla aliquam sollicitudin. Vivamus posuere, metus eget auctor fringilla, nulla urna semper ex, in lacinia ligula ex id magna. Vestibulum fringilla sem in ex tempor tincidunt. Cras justo nulla, sollicitudin nec massa eget, laoreet gravida nibh. Donec sodales pharetra eros ut egestas. Mauris cursus in tellus ac faucibus. Duis at nisi quis justo pulvinar porttitor vitae et libero. Fusce rhoncus nulla nibh, eu cursus mauris rhoncus at. Quisque faucibus pellentesque leo, at blandit sapien euismod nec. Mauris bibendum lorem sed augue aliquet, sit amet lacinia lacus lacinia. Nulla accumsan erat non mauris dignissim, vel tempor ipsum tincidunt. Quisque consequat bibendum sollicitudin. In hac habitasse platea dictumst. Nam elit leo, tempor sit amet lorem at, ultrices consequat ex. Nullam elit sem, sagittis et orci eget, tristique luctus diam. Phasellus ultrices mi massa. Nam nisi eros, mollis at consectetur non, maximus vel nulla. Nunc at magna et orci tristique faucibus. Morbi fringilla mollis enim vitae auctor. Quisque sit amet vulputate mi, vitae vulputate eros. Aenean sem nulla, vehicula quis velit at, fringilla lobortis risus. Nulla non commodo purus. Fusce in odio ipsum. Proin leo nisl, pulvinar eu vulputate sed, porttitor sit amet justo. In at pulvinar quam. Phasellus tincidunt suscipit iaculis. Cras ut ex arcu. Integer elit nibh, sodales quis odio a, semper feugiat urna. Nulla interdum tellus neque, fringilla tristique odio ornare id. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce vel purus ac turpis condimentum fringilla in pulvinar lacus. Donec ut placerat nisi. Maecenas ultricies, augue ultricies eleifend lacinia, nibh diam dapibus risus, sed imperdiet lacus enim in urna. Duis eu enim vitae justo auctor pellentesque sed volutpat nulla. Mauris iaculis quis velit quis iaculis. Aliquam posuere tellus lectus, nec finibus orci cursus quis. Duis nec massa at massa lobortis dignissim. Donec ornare, lectus a dictum lobortis, neque felis gravida libero, non ultrices justo lacus at dui. Integer eu nisi vel diam bibendum aliquam id fermentum metus. Suspendisse fermentum dolor enim, sit amet fermentum leo laoreet ut. Sed interdum a massa non tincidunt. Maecenas scelerisque varius justo, et dignissim turpis tincidunt in. In eu tortor eros. Donec congue tellus neque, non sodales mi finibus ultricies. Maecenas eget gravida ante. Vestibulum scelerisque commodo felis sit amet semper. Donec rhoncus aliquet nibh, at tincidunt massa eleifend sed. Sed quis diam posuere mauris molestie sodales. Quisque cursus semper purus, et lobortis est commodo sed. Sed faucibus quis tellus vitae rutrum. Etiam turpis lectus, rhoncus vel dapibus vel, luctus in magna. Fusce at dictum ante. Donec aliquam convallis risus, sed sodales lacus finibus pulvinar. Etiam accumsan ornare nisi, at elementum felis sagittis ac. Quisque ac vehicula diam. Aliquam sit amet tempus ipsum, quis ultrices metus. Sed sit amet libero volutpat, tempus massa quis, porttitor ante. Donec laoreet fermentum leo, non aliquet mi maximus at. Nullam auctor, ligula eu venenatis suscipit, tortor est eleifend lectus, vel efficitur risus arcu in mi. Maecenas vitae nunc vel mi tincidunt scelerisque. Nam in diam elit. Mauris mattis ornare libero, et tempor justo laoreet sed. Proin vitae dui sagittis, lacinia ex ut, consequat mi. Aenean quis consectetur urna, in fringilla felis. Mauris id dictum orci, nec mattis dui. Nam dictum imperdiet lorem sit amet consequat. Vestibulum consequat tristique ligula non cursus. Fusce efficitur nunc mattis faucibus laoreet. Nunc sollicitudin orci pretium diam venenatis, et lobortis libero porta. Aliquam eget laoreet tortor, quis luctus felis. Suspendisse rutrum mi at imperdiet placerat. Fusce nisl mauris, laoreet ac risus eu, suscipit luctus lorem. Donec malesuada lectus metus, at luctus risus pellentesque nec. Cras euismod sodales turpis, ac eleifend augue convallis at. Donec dolor orci, imperdiet sit amet ultricies id, laoreet nec arcu. Phasellus quis ligula quis magna fermentum vehicula. Suspendisse ultrices aliquam sem ut dignissim. Quisque porttitor est eget semper bibendum. Morbi suscipit iaculis dui, ac mattis ipsum dignissim a. Duis consectetur suscipit viverra. Donec lacus tellus, suscipit at viverra eget, imperdiet a risus. Proin eleifend, lacus sed feugiat condimentum, massa quam malesuada eros, et tincidunt velit enim cursus nunc. Ut vel tincidunt lectus, sit amet iaculis tortor. Sed laoreet diam non egestas finibus. Mauris interdum orci sit amet augue tempor, vel efficitur massa interdum. Morbi sagittis cursus risus, pharetra scelerisque risus luctus sit amet. Proin lacinia ex nec nulla suscipit, nec elementum erat finibus. Curabitur ut mi elit. Vestibulum laoreet ipsum vel augue tempor, vel pharetra metus lobortis. Donec vel justo est. Aenean convallis dui eget auctor iaculis. Mauris accumsan blandit turpis. Morbi interdum ipsum non dui accumsan placerat. Nam ornare arcu ac ante consequat, vel dignissim mauris facilisis. Etiam a eleifend arcu. Phasellus dolor enim, sollicitudin eu nisi vitae, auctor ultricies turpis. Donec tincidunt nisi vel sem lacinia, quis semper erat gravida. Nulla libero neque, ultrices in erat non, imperdiet blandit libero. Aenean commodo bibendum vulputate. Nulla at ante nulla. Praesent et efficitur elit. Morbi eget odio a sem tincidunt semper. Curabitur pulvinar tortor et nunc tristique consequat. In at eros libero. Phasellus quis accumsan massa. Sed vulputate dolor elit, blandit dictum mauris cursus et. Aliquam ex orci, ornare sed enim quis, ornare dictum nisl. Nunc in ligula vel diam sagittis bibendum. Proin sed tempor neque. Fusce mi purus, lacinia ac risus non, consequat tempus massa. Mauris eget vulputate eros, et gravida erat. Sed scelerisque magna ac lorem tempor, eu congue ante tempus. Suspendisse id rutrum lacus. Proin in velit sed turpis aliquet vehicula sed nec lectus. Duis eu lacinia ante. Sed sit amet dictum erat. Proin commodo tincidunt dui, rhoncus aliquet elit. Mauris quis nulla ut velit tincidunt dignissim in ut lacus. Mauris id volutpat eros. Maecenas felis tellus, aliquam a finibus dignissim, tristique at enim. In volutpat scelerisque dictum. Sed sagittis euismod ex, rhoncus interdum dui tincidunt quis. Pellentesque tempor urna eu eros scelerisque tristique. Duis iaculis vitae arcu non luctus. Mauris leo sapien, faucibus vel neque dignissim, sodales accumsan felis. Aenean in commodo nibh, ut finibus justo. Cras nisl odio, pretium vel ex in, semper efficitur augue. Nulla tortor est, tincidunt in imperdiet quis, gravida non nisi. Morbi posuere libero neque, nec facilisis nunc semper eu. Cras tincidunt mi id eros imperdiet, quis dapibus magna dictum. Maecenas lobortis arcu sit amet felis sodales, id lobortis sem rutrum. Suspendisse quam diam, accumsan ac accumsan id, pharetra et mi. Nunc at ante odio. Vivamus dignissim enim et risus scelerisque convallis at vitae dolor. Nunc aliquam sem vitae enim mattis tincidunt. Aenean nec hendrerit tellus. Sed a mollis nibh. Vivamus sollicitudin mi ut lorem porttitor, sed hendrerit urna laoreet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque blandit metus sed ipsum porta, sed convallis turpis sagittis. Pellentesque sapien lorem, sagittis id accumsan eget, imperdiet ut lacus. Maecenas sed tempus mauris. Phasellus sed dui id justo vehicula pulvinar. Donec quis justo neque. Vivamus at odio urna. Nulla accumsan tortor tempor justo mattis, ultricies lobortis turpis feugiat. Integer in mauris fermentum, accumsan ligula at, interdum nisl. Nullam scelerisque commodo varius. In sollicitudin, dui ut condimentum sagittis, lorem sem porta urna, at lacinia felis mi non metus. Duis quis lacinia odio. Nam at lacus enim. Sed in volutpat magna. In eget velit augue. Proin quam nunc, auctor sed facilisis eu, molestie ac lorem. Nullam rutrum tincidunt ex egestas facilisis. Proin et maximus dolor. Nam condimentum mi quis neque condimentum, non pretium lectus varius. Vestibulum feugiat sem at venenatis euismod. Nulla imperdiet sem in neque suscipit vestibulum. Nunc ac pellentesque ligula. In euismod tellus quis ipsum euismod molestie. Sed in purus malesuada, malesuada erat a, dapibus est. Mauris placerat gravida ipsum vel sodales. Ut quis aliquam diam. Fusce aliquet ac arcu sit amet ultrices. Aenean ac turpis eget nunc porta commodo ac et enim. Phasellus dignissim feugiat tristique. Nunc feugiat vel libero in iaculis. Quisque feugiat eleifend turpis, eu volutpat est. Vestibulum dictum ut metus in interdum. Donec placerat augue lectus, luctus facilisis lacus ultrices non. Curabitur sed aliquam felis. Aliquam sollicitudin in lectus quis pulvinar. Donec vel ligula mollis, condimentum lorem quis, lobortis nunc. Vivamus vitae turpis convallis, auctor dui sed, bibendum ante. Maecenas semper felis eget massa aliquet, eu commodo risus rhoncus. Ut efficitur id sem eu tristique. Morbi quis lorem at ipsum tempor viverra in non sapien. Nunc velit ex, porttitor id tempor sed, viverra vel felis. In lacinia blandit mauris, hendrerit consectetur turpis molestie commodo. Integer in ipsum sed enim tincidunt eleifend ac sit amet dolor. Aenean ornare ante dictum, maximus leo eu, feugiat urna. Praesent nisi sem, viverra eu orci ut, euismod bibendum mi. Mauris dui leo, euismod eu urna at, vehicula congue velit. Integer sollicitudin massa at mauris molestie condimentum. Cras vitae purus justo. Pellentesque semper magna sit amet sapien suscipit maximus. Nullam iaculis scelerisque massa vel tempor. Nam fermentum mauris eu mi bibendum semper. Suspendisse potenti. Donec ullamcorper turpis ut felis mollis, non porta felis porta. Ut sodales malesuada lorem ac pharetra. In blandit odio nibh, nec tempus ligula semper sit amet. Nam euismod tellus eu eros laoreet aliquam. Nullam at tellus urna. Quisque non lacus mi. Nullam gravida, metus porttitor consequat pulvinar, odio eros consequat ligula, egestas faucibus est odio vitae ipsum. Ut tempor vehicula interdum. Etiam interdum semper libero, a fringilla sem fringilla non. Proin at cursus erat. Phasellus at magna feugiat, dictum neque a, ullamcorper nisi. Proin et orci imperdiet, semper lectus eget, rutrum neque. Donec feugiat augue elit, a suscipit leo iaculis quis. Suspendisse ut nulla erat. Nulla justo magna, pulvinar at ante vehicula, elementum volutpat odio. Integer laoreet bibendum nulla in fringilla. Integer semper eu velit at ultricies. Etiam mollis turpis urna, id malesuada nulla faucibus in. Suspendisse vulputate efficitur nisl, eu tempus ipsum lobortis ac. Fusce ac pellentesque mi, ac porta nulla. Donec scelerisque velit ex, nec tristique erat commodo sed. Nullam id ipsum tincidunt, convallis dui auctor, elementum ligula. Pellentesque id tortor non orci iaculis ultrices. In malesuada mauris vel eleifend malesuada. In sit amet lacinia enim. Aliquam erat volutpat. Nam nec mattis lacus. Mauris lobortis justo auctor nibh malesuada pellentesque. Vivamus bibendum nulla at bibendum scelerisque. Phasellus dictum elit gravida semper dignissim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent dignissim enim eros, sit amet varius sapien tempor et. Aliquam erat volutpat. Sed feugiat, sem ut aliquam bibendum, erat purus aliquet urna, in vehicula velit lacus vel nisl. Fusce dictum id lectus quis porttitor. Etiam eu aliquet metus. Mauris vestibulum lorem in dapibus convallis. Integer id dolor sagittis arcu tincidunt tincidunt non et erat. Proin aliquam volutpat tempus. Ut id dignissim velit. Etiam purus massa, tristique nec ipsum eget, porttitor ultrices dolor. Sed tempus nisi ac aliquet interdum. Nunc eu tellus sit amet erat iaculis blandit. In at posuere metus, nec euismod metus. Morbi risus nunc, euismod non diam sit amet, elementum egestas dolor. Vivamus sed arcu ut arcu ultrices dictum a at eros. Suspendisse id felis et neque luctus tristique ac sed magna. Integer fermentum dictum tortor. Integer vitae metus pharetra, sollicitudin leo nec, facilisis dolor. Aenean laoreet ex velit, eget suscipit magna hendrerit vel. Integer nec ornare dolor. Etiam vitae quam sit amet mauris aliquet cursus rhoncus a metus. Donec sit amet bibendum eros. Nam hendrerit finibus nibh, eget pharetra lectus euismod ut. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi feugiat pretium elit, non suscipit sapien dapibus ac. Nam non porttitor ipsum, gravida iaculis dui. Vestibulum vehicula est eu neque ornare, eget semper est ornare. Aliquam erat volutpat. Maecenas et ligula vulputate, tincidunt nulla vel, pulvinar augue. Sed ac ante eu massa posuere auctor in quis leo. Maecenas a diam quam. Pellentesque metus felis, semper id mattis nec, ultricies sed dui. Vivamus ornare nisl ut ultricies imperdiet. Vestibulum congue lacus in metus convallis condimentum. Cras sodales arcu a malesuada semper. Nam rhoncus elit ligula, eu tristique ipsum suscipit non. Phasellus egestas posuere nunc, in dignissim nisl venenatis a. Pellentesque at arcu sed metus feugiat semper ut quis nisl. Maecenas accumsan blandit nisl eu posuere. Duis ac est blandit, vestibulum nunc consectetur, efficitur sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum molestie felis sapien, id vehicula orci rhoncus sit amet. Nulla eu ornare mauris. Proin ut ligula turpis. Ut nec sapien urna. Praesent lectus lorem, dignissim id sem sit amet, vehicula hendrerit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus sit amet vehicula neque, at eleifend risus. Maecenas in ante mollis, hendrerit est sed, pellentesque purus. Curabitur gravida augue lacus, hendrerit porta ligula porttitor a. Aenean euismod lacinia auctor. Maecenas eget sodales lorem, non ornare dui. Donec fermentum neque vitae massa porttitor, non rhoncus enim vestibulum. Suspendisse venenatis eget eros nec ultricies. Curabitur sit amet magna enim. Cras consequat neque eu diam laoreet consectetur. Nulla ante sapien, vestibulum in nibh a, mattis posuere lorem. Phasellus fermentum et erat vitae dictum. In hac habitasse platea dictumst. Vestibulum auctor dolor nulla, quis imperdiet ex tincidunt sit amet. Duis ullamcorper nulla sed neque luctus gravida. Aliquam odio velit, sagittis sed tortor vel, porta fringilla dolor. Sed neque arcu, sagittis vitae ante vitae, placerat imperdiet lacus. Pellentesque consequat tempus ex, nec rutrum odio dapibus vitae. Vestibulum suscipit, elit sed faucibus ultrices, ligula erat finibus odio, vitae bibendum eros arcu eu enim. Ut varius sapien erat, vel accumsan leo tincidunt quis. Mauris malesuada metus ac fermentum pretium. Mauris id lorem quam. Donec orci orci, condimentum eu pharetra ac, varius nec felis. Curabitur nec magna egestas, convallis lacus ultrices, dignissim turpis. Sed porttitor sagittis ligula, id accumsan odio ultricies quis. Integer sit amet quam eu sapien convallis consectetur. Aenean efficitur enim eget venenatis interdum. In suscipit ligula sit amet mauris commodo, eget venenatis lacus accumsan. Curabitur a luctus elit, vitae fringilla nibh. Nulla interdum, lorem maximus vestibulum commodo, odio quam pellentesque est, at placerat odio tortor nec eros. Mauris mollis imperdiet dui, quis vestibulum nisi molestie sed. Nam aliquet ante non egestas cursus. Nullam dapibus, nibh eget tincidunt tristique, mi turpis euismod velit, quis aliquet velit enim vel quam. Nam interdum vitae dui ac ultricies. Etiam maximus aliquam felis, sit amet commodo mi porttitor ac. Sed urna mauris, consectetur et fringilla ac, cursus eget magna. Integer nunc sapien, auctor id vehicula sit amet, molestie eget nunc. Fusce egestas sodales tellus tempor auctor. Praesent placerat egestas fringilla. Donec faucibus id nibh ac vestibulum. Fusce ac nisi mattis, venenatis dolor at, fringilla nibh. Pellentesque in tincidunt arcu, ac pretium nulla. Duis non efficitur mauris, ut tincidunt elit. Sed libero quam, eleifend posuere eleifend nec, interdum quis turpis. In quis vestibulum nibh. Praesent auctor pellentesque libero eget tempor. Morbi libero ipsum, consequat eget quam eget, commodo bibendum est. Praesent arcu eros, egestas in vulputate at, vestibulum vitae sapien. Duis laoreet ante quis nisl tristique lobortis sit amet ut turpis. Cras orci eros, fermentum nec pretium vitae, convallis ut tortor. Sed gravida dolor sapien, accumsan tincidunt tellus eleifend ut. Nam sem justo, ornare non tempus in, fringilla a justo. Proin a tellus molestie, hendrerit ante eu, consequat nisi. Maecenas sagittis a metus id varius. Nulla malesuada, ante interdum placerat ornare, magna felis rhoncus nulla, et placerat justo arcu ullamcorper mauris. Phasellus scelerisque lacus leo, at tincidunt ligula ultricies sit amet. Etiam rutrum diam quis augue eleifend condimentum. Pellentesque ex nibh, finibus sed semper quis, accumsan at metus. Sed eget nisl ut magna lobortis consectetur id quis augue. Maecenas posuere justo purus, gravida facilisis tellus dapibus id. Quisque tortor arcu, varius eget tellus nec, euismod maximus erat. In hac habitasse platea dictumst. Morbi pulvinar hendrerit dignissim. Integer accumsan dui eget sapien blandit ultricies. Mauris a porta diam. Donec massa justo, efficitur vel vehicula sit amet, porta in enim. Nullam condimentum ipsum vestibulum egestas gravida. Mauris ut nisi ornare, eleifend nulla ut, elementum tortor. Aliquam vulputate sapien nec porttitor dignissim. Pellentesque elementum accumsan tellus, nec egestas turpis scelerisque a. Suspendisse lectus diam, dictum vitae sagittis et, cursus vitae eros. Pellentesque laoreet libero vitae fringilla vulputate. Cras vitae nisl ut turpis cursus vehicula. Nullam facilisis viverra tellus, ac convallis odio pharetra eu. Duis ut magna eleifend, commodo ex eu, auctor nibh. Aliquam erat volutpat. Etiam posuere arcu purus, suscipit vulputate leo dapibus vitae. Aliquam turpis turpis, suscipit vitae imperdiet vel, porta nec eros. Nulla aliquet turpis eu lorem euismod posuere. Vivamus tristique ligula in arcu aliquam, nec auctor quam tincidunt. Donec at tortor at augue pretium faucibus. Maecenas dui velit, mollis nec congue id, molestie et leo. Donec porttitor dignissim consectetur. Sed a porta eros, elementum semper risus. Mauris non tortor tellus. Aliquam sit amet massa lectus. Ut auctor rutrum nisl sit amet semper. Vivamus efficitur sem turpis, at bibendum orci semper varius. Sed ultricies ipsum lectus, ut ultrices ex finibus eget. Ut eget turpis sit amet ligula bibendum mollis. Proin ut interdum ex. In enim diam, sagittis eget nisi in, sollicitudin fringilla urna. Pellentesque at orci lacinia, aliquet risus in, lacinia turpis. Aliquam pulvinar faucibus nunc sit amet ullamcorper. Nullam tristique varius sapien id dapibus. Phasellus viverra augue sapien, ac laoreet eros dapibus sit amet. Nam hendrerit nisl nec dapibus pharetra. Donec iaculis neque in nisl accumsan, id semper ligula ultrices. Sed luctus tempus ligula, quis mattis augue luctus a. Curabitur id diam nec ipsum efficitur blandit a sit amet odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dignissim, lectus ac consectetur tempor, lectus eros vestibulum sapien, eget mattis metus lorem at neque. Curabitur sit amet ullamcorper tellus, vitae posuere odio. Integer in orci malesuada, condimentum metus id, luctus magna. Sed eu orci vitae diam tempus mollis. Donec venenatis neque non urna molestie, sed suscipit velit tristique. Nulla sed diam lorem. Aliquam massa magna, pretium non faucibus id, tristique ut tortor. Vivamus ut convallis nibh. Integer dictum elit ut ex sagittis, quis feugiat ipsum lacinia. Nulla purus leo, porta non bibendum id, condimentum sed urna. Donec varius sagittis tempus. Sed dapibus ligula vel purus ullamcorper scelerisque. Nunc egestas volutpat euismod. Aliquam dapibus egestas dolor nec posuere. Fusce rhoncus sem sed aliquet dignissim. In porta libero non nunc vehicula, vitae dictum dui dictum. Fusce vel tempor nunc. Aliquam posuere odio ut mi tempus, ac feugiat orci luctus. Integer facilisis ornare ante at suscipit. Praesent quis tortor urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque in tincidunt erat. Nam vel nulla euismod dui mattis dapibus sit amet nec nisi. Aliquam cursus laoreet facilisis. Praesent quis pulvinar urna. Vivamus semper massa massa, et mattis magna cursus tincidunt. Morbi interdum non lacus in vestibulum. Pellentesque lobortis tempor enim quis lacinia. Aliquam erat volutpat. Donec efficitur interdum ante, non elementum lectus euismod at. Nunc pharetra neque nec ex porta sodales. Duis at est sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean iaculis nunc eu venenatis viverra. Nulla sed elit id velit sodales feugiat. Donec in enim ac nisl laoreet tristique. Sed tincidunt pellentesque augue mattis vulputate. Fusce quam augue, lacinia vestibulum tempus blandit, vulputate non odio. Aenean pellentesque mauris vel urna dapibus placerat. Vestibulum molestie turpis eget odio iaculis, at facilisis metus consequat. Sed eget nisi nisi. Sed dui sapien, fermentum fermentum augue eu, varius commodo nisl. Suspendisse venenatis auctor est vitae posuere. Etiam aliquam ligula leo, vitae condimentum sem maximus vel. Sed tempor nulla justo, quis eleifend arcu pharetra at. Sed suscipit nunc tempor massa fermentum, sit amet aliquet elit finibus. Donec consectetur malesuada porttitor. Etiam tempor egestas diam et consectetur. Aenean quis lacinia ligula. In congue commodo dui, id aliquet velit dapibus non. Nunc mattis purus ipsum, vel egestas dolor finibus ac. In at ullamcorper eros, quis pellentesque dolor. Sed id feugiat risus. Aenean nec nibh in tellus euismod euismod. Suspendisse vestibulum nisl in nibh feugiat, vestibulum tristique turpis pretium. Sed commodo elit tincidunt risus sagittis fermentum. Morbi lobortis pulvinar euismod. Etiam scelerisque, sapien non scelerisque fringilla, lacus nulla scelerisque sapien, ac tempor turpis dui tincidunt dui. Sed pulvinar orci a orci sagittis commodo. Proin vehicula libero sed quam lacinia, ut euismod diam dictum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse porttitor gravida eros ut luctus. Integer quis ipsum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque id odio mi. Etiam sit amet blandit diam. Vestibulum lacus lacus, fermentum quis convallis nec, cursus vitae justo. Praesent laoreet ultricies eleifend. Sed nibh tortor, malesuada non purus fermentum, ornare accumsan nulla. Vivamus elementum dolor vitae euismod convallis. Morbi lectus lorem, faucibus ut elementum id, convallis in ligula. Donec a lacus a mauris interdum molestie at non lectus. Etiam faucibus in sapien a dignissim. Curabitur scelerisque finibus nulla. Aenean gravida consequat accumsan. Quisque id enim in est dictum feugiat. Morbi dolor orci, molestie vel leo et, tincidunt tristique dolor. Aenean venenatis lobortis nulla, a lobortis metus fringilla sit amet. Morbi ac finibus tellus. In neque massa, bibendum non pellentesque sed, imperdiet non dui. Mauris porttitor sagittis laoreet. Maecenas sed ornare quam, quis faucibus arcu. Sed sit amet auctor ipsum, at mollis libero. Praesent non faucibus odio, nec consequat quam. Integer eget enim sit amet nibh malesuada mollis. Sed faucibus condimentum congue. Aenean tortor libero, pharetra sed magna sed, fermentum imperdiet magna. Suspendisse dictum lacinia sodales. Aliquam luctus purus purus, ut ornare ipsum tincidunt quis. In sit amet justo non felis laoreet consectetur eget eu turpis. Nullam ornare magna quis quam suscipit, in euismod ligula eleifend. Etiam at libero pellentesque, lobortis neque in, tristique eros. Aliquam non nisi lectus. Phasellus eu nisl tortor. Proin a ultricies leo. Morbi at diam et nibh iaculis dictum sed a nunc. Donec euismod gravida lorem quis tincidunt. Nam tristique neque sagittis orci faucibus, ac gravida turpis aliquam. Donec bibendum imperdiet odio. In luctus quis dolor eu fringilla. Vivamus eleifend. 8ud6bkf5uzdltdvpqs1xu30g3itsqwj Sandbox 0 68971 740202 736975 2026-05-02T21:59:43Z User97104 72884 740202 wikitext text/x-wiki <noinclude>{{Sandbox}}Example is the best band ever and I'm seeing if this makes a suggestion pop up. gqck9j4w63r7pufg8b1qapkvg7l77d8 740203 740202 2026-05-02T22:01:10Z User97104 72884 740203 wikitext text/x-wiki <noinclude>{{Sandbox}}Example is the best band ever and I'm seeing if this makes a suggestion pop up. (Statement Level: Orange) This material has no citations. This material is obviously the best test for the Revise Tone filter. tbyep0nrr2ntfvs35cyc3v6vv0unfrv 740204 740203 2026-05-02T22:01:31Z User97104 72884 740204 wikitext text/x-wiki <noinclude>{{Sandbox}}Example is the best band ever and I'm seeing if this makes a suggestion pop up. (Statement Level: Orange) This material has no citations. This material is obviously the best test ever for the Revise Tone filter. (Statement Level: Yellow) tvlx8thji1ucvjf84objtlgutagok3f User:Pywikibot-oauth/edit test 2 82578 740340 739578 2026-05-03T11:39:21Z Pywikibot-oauth 29170 740340 wikitext text/x-wiki 1717938323.983468 1717938325.9381392 1717938327.6745121 1717938345.265466 1717938346.1106002 1717938350.5920074 1717938353.0482574 1717953288.8608625 1717953293.9055603 1717953292.1927369 1717953292.2962074 1717953294.2398 1717953312.240725 1717953316.1704223 1717953317.268496 1717953318.2313948 1717997567.7045777 1718009302.675245 1718009303.0268657 1718009305.1731467 1718009309.4585795 1718009328.7909298 1718009333.1985834 1718009383.5844293 1718009385.1342936 1718009386.2813547 1718009388.613266 1718009398.8815582 1718009408.5800366 1718009439.4752173 1718009607.9868848 1718009609.3225954 1718009610.7008185 1718009611.3111014 1718009614.7206109 1718009619.8805332 1718009633.8648026 1718009654.4389236 1718013612.7444367 1718013615.4898036 1718013616.8618758 1718013617.578818 1718013628.183184 1718013640.3193917 1718013648.6140828 1718013688.6004112 1718016374.1180348 1718016375.439417 1718016376.2004616 1718016380.8626587 1718016404.172379 1718016421.9062774 1718017148.5199714 1718017151.167183 1718017152.579374 1718017154.8653364 1718017156.385661 1718017173.681575 1718017176.016188 1718017200.9282327 1718018372.899415 1718018659.6671212 1718018660.4208403 1718018662.0027812 1718018664.5138478 1718018682.755611 1718018686.6985393 1718018704.9304743 1718021145.9996097 1718021148.1332645 1718021148.8790848 1718021151.64248 1718021152.3035438 1718021183.5700638 1718021188.2089362 1718021194.6740658 1718021912.815989 1718021915.923219 1718021917.6584659 1718021919.7312863 1718021921.5385063 1718021940.462804 1718021956.3317823 1718021965.900075 1718022675.5741732 1718025361.51236 1718025362.1419137 1718025363.549265 1718025365.794714 1718025367.0023723 1718025381.4007874 1718025386.8869488 1718025390.1932719 1718025420.3657703 1718026112.6940236 1718026114.5253518 1718026116.9373848 1718026119.4845717 1718026120.817934 1718026123.051878 1718026136.3197055 1718026140.8453245 1718026145.4011593 1718026163.7837195 1718029773.4831073 1718029774.3958006 1718029775.4855509 1718029776.785981 1718029781.6460838 1718029783.6814554 1718029795.5788717 1718029798.7532082 1718029803.2993777 1718029839.3786342 1718088780.7319355 1718088783.1151495 1718088785.5244112 1718088786.0638566 1718088790.2916877 1718088800.889361 1718088810.884886 1718088814.4438264 1718088814.2049983 1718098333.8518348 1718098334.492469 1718098335.9334357 1718098338.9121008 1718098351.4070423 1718098360.9338825 1718098363.3991063 1718098388.9819927 1718098502.7364287 1718098783.731209 1718098785.4471197 1718098788.7367818 1718098790.8354266 1718098793.2723055 1718098796.6948872 1718098804.8592188 1718098809.4647124 1718098817.6042728 1718098830.9912333 1718099231.027644 1718099234.4692736 1718099235.052649 1718099236.3166866 1718099255.4998035 1718099256.26313 1718099258.3496053 1718099280.7436473 1718111091.2757294 1718111094.233729 1718111096.5565636 1718111103.6016734 1718111108.502889 1718111116.434526 1718111142.8487227 1718114486.9111218 1718114488.8848925 1718114492.5300286 1718114505.449661 1718114508.5768387 1718114513.384398 1718114557.7346702 1718120951.709677 1718120954.2943966 1718120955.4632218 1718120962.1287925 1718120969.2791822 1718120975.7068148 1718120983.0374181 1718120998.2290237 1718167739.5514672 1718167741.361884 1718167744.7950137 1718167745.417929 1718167757.8886697 1718167765.954192 1718167775.6431954 1718168307.9341757 1718168309.0630918 1718168310.747874 1718168311.1551263 1718168311.824176 1718168328.8877923 1718168329.1683598 1718168332.8930173 1718168334.318795 1718170628.1888835 1718170631.9050498 1718170632.746343 1718170634.9433777 1718170636.927007 1718170654.1273365 1718170656.173754 1718170657.3509326 1718170659.621824 1718170887.5461829 1718204836.6592476 1718204841.3648756 1718204842.685919 1718204846.9438975 1718204855.260591 1718204857.186586 1718204866.7263968 1718204946.7416897 1718206153.2249477 1718206154.0826955 1718206156.8141618 1718206166.206424 1718206170.4542036 1718206189.6599023 1718206193.0557477 1718206209.0511112 1718206394.678831 1718206399.1699252 1718206403.0055304 1718206416.9370177 1718206422.3951635 1718206426.1713943 1718206481.3811412 1718207931.4095542 1718207936.0076962 1718207937.0227344 1718207938.648662 1718207951.2997663 1718207962.9280522 1718207970.8110354 1718207986.3565502 1718270206.6322293 1718270208.396686 1718270209.8471525 1718270212.1417482 1718270212.8735263 1718270225.4295442 1718270229.9387715 1718270233.8893638 1718270249.8745449 1718278524.21183 1718278526.7441041 1718278529.0446036 1718278530.6510525 1718278533.3816156 1718278541.910818 1718278549.337206 1718278552.886615 1718278569.0438437 1718287801.4408586 1718287803.4836357 1718287804.9007418 1718287808.1488054 1718287808.4518878 1718287822.867423 1718287826.7880008 1718287855.8315911 1718297766.9014719 1718297767.4670007 1718297769.5687966 1718297772.4048378 1718297777.3219984 1718297790.6331906 1718297792.4884562 1718297795.184645 1718302176.0627773 1718302177.5144217 1718302178.8230069 1718302194.8260093 1718302201.1135983 1718302206.1642869 1718302218.1861632 1718302219.3047798 1718336718.1941583 1718365268.4987638 1718365269.641732 1718365270.5083897 1718365271.728583 1718365274.002535 1718365291.8463135 1718365294.8545115 1718365301.4906988 1718365315.3869822 1718365505.726982 1718448902.0726335 1718448904.9608967 1718448905.7732697 1718448907.9344823 1718448914.5668309 1718448928.1298878 1718448928.9807873 1718448930.3379903 1718448930.331011 1718454069.948404 1718454073.9749632 1718454076.1152103 1718454077.8158538 1718454080.9835265 1718454093.4771943 1718454096.5800304 1718454103.1700485 1718454102.7764804 1718456201.0723767 1718456201.771049 1718456204.8900273 1718456223.2486367 1718456226.5021062 1718456230.0176444 1718456234.8390899 1718459952.221978 1718459952.9086947 1718459954.7137554 1718459957.011037 1718459957.8085938 1718459970.2652814 1718459973.344553 1718459980.3818643 1718459980.794316 1718467221.4074085 1718467223.9760313 1718467225.2852647 1718467226.4534006 1718467227.5403411 1718467238.6423047 1718467245.6560714 1718467249.314935 1718467250.7741568 1718470146.792804 1718470150.8378944 1718470152.434354 1718470155.6266527 1718470156.4344456 1718470167.0206006 1718470170.511652 1718470178.847092 1718470180.4159863 1718477476.8284774 1718477478.9504488 1718477480.2399306 1718477483.233796 1718477495.1057756 1718477505.138055 1718477508.230259 1718477509.4137573 1718479108.4211571 1718515652.3761146 1718515657.7088983 1718515658.6416357 1718515660.4557362 1718515660.9534945 1718515671.641125 1718515676.942455 1718515679.664335 1718515691.044993 1718516411.4838226 1718517061.1334279 1718517064.36412 1718517066.351747 1718517067.9823635 1718517070.1635823 1718517078.9948351 1718517089.3589723 1718517090.8877964 1718517687.892127 1718517688.3769186 1718517689.950249 1718517694.0879142 1718517702.0483367 1718517711.8517518 1718517713.7155662 1718517722.782742 1718517837.657381 1718531410.3578694 1718531413.2360501 1718531413.7496576 1718531414.6364017 1718531415.9476206 1718531419.6359458 1718531428.8146567 1718531435.9711194 1718531436.9587393 1718531438.3370793 1718536061.2031472 1718536064.3968182 1718536065.9384258 1718536068.7385488 1718536072.2085466 1718536082.2379959 1718536083.1270118 1718536090.3124897 1718536093.951949 1718541954.3876143 1718541956.0022333 1718541956.941455 1718541957.5561693 1718541958.0702612 1718541975.0538633 1718541980.5246894 1718541981.3653994 1718542008.4670186 1718636379.6202543 1718636381.1092196 1718636382.0674365 1718636383.378525 1718636390.121835 1718636402.868477 1718636403.469083 1718636414.6279762 1718636448.2600234 1718638626.856629 1718638627.783421 1718638633.7572656 1718638635.0484576 1718638639.7305253 1718638645.3893626 1718638654.4974911 1718638655.9837 1718638656.509398 1718638675.2028575 1718730999.6562796 1718731002.9459317 1718731004.5080602 1718731005.8755076 1718731020.2701058 1718731025.4137113 1718731062.9800775 1718744024.6903846 1718744025.9837515 1718744028.94272 1718744030.9566023 1718744042.0349915 1718744050.1404827 1718744054.1966991 1718773967.0703459 1718773968.0080812 1718773970.3090975 1718773970.3435733 1718773971.079693 1718773995.5025868 1718773996.6876066 1718773997.3720262 1718773999.1633239 1718886004.5143113 1718886004.9995835 1718886009.3486383 1718886011.502742 1718886020.6752129 1718886021.2545116 1718886026.1455162 1718886031.2892191 1718886086.0996928 1718961575.2159712 1718961577.248636 1718961579.266859 1718961584.0054727 1718961585.5416117 1718961596.9843493 1718961608.302492 1718961614.6889198 1718961616.3877892 1718968603.7748945 1718968607.0690818 1718968607.9450648 1718968609.6774971 1718968612.2656987 1718968614.1366622 1718968625.3810906 1718968629.4604537 1718968641.5719926 1718968681.1329365 1718968682.261607 1718968683.5617135 1718968684.106964 1718968688.5447705 1718968690.5267246 1718968697.4459171 1718968705.5173635 1718968709.6065145 1718968741.2709723 1719060263.9319239 1719060265.1403356 1719060266.340842 1719060269.3961422 1719060283.8203645 1719060288.0482583 1719060294.2719293 1719060297.7118967 1719061420.802171 1719061422.6048853 1719061423.7334316 1719061425.0414433 1719061433.5318284 1719061439.1523328 1719061445.326212 1719061461.978173 1719061880.7222142 1719061882.552266 1719061884.4065745 1719061884.964865 1719061892.874263 1719061895.8984957 1719061904.7980072 1719061914.2728014 1719061944.038279 1719062152.8865724 1719067189.487594 1719067190.1866813 1719067191.4030895 1719067193.725632 1719067202.8044908 1719067204.7037551 1719067216.787414 1719067229.7356596 1719067909.3010273 1719067911.3103838 1719067911.9389522 1719067912.7892058 1719067915.1173623 1719067926.6543186 1719067935.485951 1719067939.5406718 1719067944.3043442 1719145650.792378 1719145652.1845744 1719145652.8407626 1719145655.4633198 1719145657.428794 1719145666.624809 1719145677.3898938 1719145679.7491868 1719145690.3449385 1719151844.203008 1719151847.829848 1719151852.1046011 1719151856.2039797 1719151862.2484019 1719151867.8664546 1719151870.772161 1719151874.5618086 1719155047.2379646 1719155049.7190826 1719155050.821006 1719155051.5469427 1719155054.5321891 1719155064.8799038 1719155067.3398724 1719155073.8036382 1719155105.9072046 1719155891.186099 1719155894.1741269 1719155894.702736 1719155901.2573574 1719155905.927427 1719155918.0138943 1719155919.6432118 1719155949.5647342 1719171489.1549513 1719171489.9106762 1719171494.0356336 1719171499.7293534 1719171510.372511 1719171513.5158641 1719171519.8476577 1719171642.8685024 1719242605.7242808 1719242606.3999186 1719242608.330176 1719242609.081625 1719242620.0841155 1719242626.622884 1719242632.7130654 1719242646.629726 1719242788.043846 1719246563.8788664 1719246565.1245325 1719246565.523271 1719246567.5838163 1719246568.6878052 1719246574.7292345 1719246582.940538 1719246594.208879 1719246624.0132446 1719246646.4423573 1719255511.0461993 1719255514.2679725 1719255514.8902783 1719255533.9694326 1719255535.7519948 1719255561.5833826 1719255600.0428908 1719257206.277582 1719257207.5948808 1719257208.5332088 1719257212.2003682 1719257229.9038367 1719257240.7883828 1719257257.7664475 1719257412.6408064 1719298510.1701732 1719407566.2328699 1719407567.4559505 1719407569.9593308 1719407575.7728598 1719407593.567035 1719407593.8329344 1719407631.4438539 1719407673.9627962 1719490893.0374126 1719490894.4612806 1719490897.4321358 1719490899.1701922 1719490902.0502431 1719490917.8597374 1719490927.1120436 1719490982.7129836 1719491028.2046077 1719658980.759956 1719658982.1867814 1719658983.3265736 1719658984.8375463 1719659006.3760595 1719659008.233768 1719659038.1869128 1719659053.6470735 1719661510.9347355 1719661511.5324843 1719661512.9147425 1719661515.870037 1719661516.9088366 1719661518.3048205 1719661522.8482125 1719661535.0718417 1719661567.8569882 1719661598.4858406 1719662437.4862742 1719662439.475177 1719662440.519351 1719662443.9609544 1719662448.8941991 1719662457.9865503 1719662477.7968066 1719662501.4439266 1719662505.5643024 1719664452.6829715 1719664453.517005 1719664456.0385885 1719664456.5487328 1719664460.285548 1719664473.429615 1719664480.2840178 1719664517.5621357 1719664520.4785154 1719673276.6724093 1719673278.5594711 1719673280.2434716 1719673283.1366646 1719673309.672662 1719673317.2102964 1719673336.6643648 1719673370.991012 1719677715.7309895 1719677719.557844 1719677720.011801 1719677725.3283927 1719677734.3811567 1719677734.578576 1719677747.991037 1719677779.4570024 1719677795.2211277 1719677944.121938 1719677947.0342872 1719677952.954374 1719677957.6550858 1719677967.588756 1719677985.8510435 1719678003.8949015 1719678018.1203597 1719678487.7313912 1719678490.4696572 1719678491.3958938 1719678496.5990489 1719678498.2562368 1719678509.3167796 1719678516.4686754 1719678547.306207 1719678562.7342274 1719678689.5803418 1719678690.270386 1719678691.1140273 1719678692.451933 1719678692.9669394 1719678705.9989023 1719678720.7839897 1719678754.5303414 1719678801.921674 1719679196.1161187 1719679702.7277484 1719679704.884765 1719679705.6118531 1719679707.7974935 1719679710.1557584 1719679723.6905518 1719679734.038543 1719679770.7907984 1719679818.6751614 1719680158.875494 1719680161.4341679 1719680162.4199877 1719680164.2232368 1719680183.9374866 1719680187.663405 1719680221.9159675 1719680235.5601242 1719680708.6096206 1719680709.4699545 1719680715.619083 1719680732.265567 1719680736.4170895 1719680736.932406 1719680738.4691868 1719680769.77296 1719680780.7043424 1719688562.565408 1719691360.4738486 1719691361.0909443 1719691362.8320959 1719691367.614035 1719691371.838276 1719691382.4826112 1719691388.392583 1719691424.3254218 1719691437.8558855 1719691910.8170524 1719691911.8364177 1719691915.5230062 1719691918.5787246 1719691955.9031386 1719691959.146336 1719691960.9298646 1719691962.9000072 1719691972.0988379 1719691975.7922778 1719691986.8865433 1719691997.4708471 1719692032.7521966 1719692053.8494172 1719738721.563538 1719738723.4371152 1719738723.5942557 1719738724.4970622 1719738725.1963532 1719738734.7646797 1719738743.3773084 1719738751.5416954 1719738786.870921 1719738799.769176 1719739777.2650309 1719739778.3169456 1719739779.938744 1719739783.1745806 1719739797.9755929 1719739804.799515 1719739835.4536004 1719739865.0080156 1719740957.4115753 1719740963.4064841 1719740968.0831258 1719740970.203206 1719740970.6358604 1719740983.8126853 1719740998.5138216 1719741026.1598616 1719741034.488669 1719742149.5130558 1719742150.1764612 1719742151.1998274 1719742152.22184 1719742155.7655077 1719742158.0400107 1719742174.5534735 1719742189.252219 1719742216.181138 1719742226.4915278 1719742546.869991 1719742549.0948424 1719742550.334266 1719742552.9718885 1719742554.7338808 1719742557.8963645 1719742562.7436194 1719742573.797242 1719742619.708493 1719742625.194558 1719745259.5410144 1719745261.4883902 1719745262.6057122 1719745263.6752841 1719745286.9080038 1719745289.0641947 1719745328.0916362 1719745349.6027694 1719752167.7671835 1719754514.0760689 1719754514.9256747 1719754516.3132918 1719754536.5157144 1719754539.9762955 1719754596.3803048 1719754599.82873 1719760133.5291634 1719760134.2539825 1719760140.7209601 1719760151.467467 1719760154.502864 1719760158.4525688 1719760203.6156392 1719760312.8365571 1719824939.5139902 1719824940.8243928 1719824942.4226027 1719824943.062349 1719824944.140916 1719824961.630868 1719824966.442031 1719825010.3715134 1719825038.4196992 1719830109.6348207 1719830110.8810217 1719830111.422231 1719830112.20914 1719830117.347853 1719830121.7140367 1719830130.0074415 1719830146.1857674 1719830188.7506788 1719830204.6365817 1719836492.969278 1719836494.6186726 1719836494.6443224 1719836496.742013 1719836523.180333 1719836638.187037 1719836688.0424724 1719839171.3108604 1719841448.5217607 1719841450.4651759 1719841452.4335685 1719841454.0664856 1719841473.2166533 1719841481.9279184 1719841536.3091393 1719841562.9440105 1719841673.1179872 1719842581.891341 1719842582.7098043 1719842584.522381 1719842586.1380289 1719842590.3433087 1719842610.3571744 1719842611.8049507 1719842666.4960856 1719842712.4774687 1719847508.6857514 1719847509.3525307 1719847510.6604362 1719847528.2575898 1719847536.007867 1719847606.7301466 1719847623.6523726 1719847741.2522056 1719993027.9122436 1719993029.0979218 1719993030.7474782 1719993032.9349523 1719993050.6589947 1719993060.693691 1719993090.2760384 1719993113.2468278 1720004323.8437161 1720004327.9480708 1720004329.254853 1720004333.9301894 1720004357.6504843 1720004375.2054017 1720004385.1751335 1720004400.7738714 1720006892.066838 1720018543.5467849 1720018544.207071 1720018548.11588 1720018550.9547276 1720018552.9559293 1720018553.8820128 1720018567.2008767 1720018573.33096 1720018636.918563 1720018725.3587666 1720020012.144781 1720020015.209173 1720020018.3855567 1720020018.6251917 1720020021.5434313 1720020041.9798167 1720020046.4386566 1720020090.0238922 1720020103.3348067 1720095888.5110908 1720095894.3936722 1720095898.7496827 1720095914.40975 1720095932.5874338 1720095936.788244 1720095992.5494847 1720095997.6260736 1720096068.6120174 1720096142.000555 1720113393.4267867 1720113393.9954696 1720113394.5428329 1720113395.3445654 1720113410.3803558 1720113416.6878488 1720113463.1089094 1720113474.4864273 1720178905.152999 1720264983.1573057 1720264984.7289004 1720264991.1436696 1720264996.5567691 1720265012.2315247 1720265016.7129402 1720265054.6461728 1720265068.45914 1720268414.5574844 1720268456.0846417 1720268457.8302736 1720268459.1110072 1720268462.6664674 1720268464.0216665 1720268485.1050167 1720268489.3534741 1720268530.802286 1720268547.8900359 1720269854.7584038 1720269858.775462 1720269869.3305595 1720269883.1087477 1720269894.0281174 1720269941.6018271 1720269968.3731894 1720281992.4461744 1720281996.0212932 1720281997.9298186 1720281999.0800533 1720282019.8583853 1720282022.7717931 1720282064.3937569 1720282089.4292839 1720282979.3870595 1720282980.70788 1720282981.8929803 1720282983.583917 1720283006.0254724 1720283021.6412923 1720283063.0679586 1720283076.427101 1720283146.0883942 1720283148.7675686 1720283150.0253646 1720283151.398002 1720283166.69723 1720283172.1708326 1720283237.126988 1720283251.5744073 1720347929.6809032 1720347930.5536857 1720347931.5924973 1720347933.0147126 1720347950.2618797 1720347962.1530797 1720348006.9132035 1720348019.4262323 1720355684.7588637 1720355688.9037657 1720355690.8150926 1720355694.2809334 1720355695.3445952 1720355734.9794688 1720355736.9226706 1720355738.5939343 1720355743.7059312 1720355745.7016191 1720355746.3900065 1720355755.6159356 1720355767.7396665 1720355817.6985352 1720355825.541677 1720362535.8521876 1720362539.7770073 1720362541.6408083 1720362542.6222377 1720362543.7119908 1720362546.4056485 1720362566.697002 1720362575.465509 1720362600.9130247 1720362615.262974 1720429846.2601721 1720429851.2459822 1720429853.3674114 1720429856.5243065 1720429860.0182812 1720429866.6442153 1720429867.3754158 1720429928.3265693 1720429965.3328753 1720430013.1402261 1720437341.4689736 1720437343.9167843 1720437348.867465 1720437350.1222687 1720437367.6023335 1720437368.6960366 1720437438.242683 1720437464.6256282 1720441473.9818053 1720441475.3272228 1720441476.3406963 1720441478.8895733 1720441479.7282956 1720441491.7034128 1720441500.936126 1720441578.124788 1720441600.7416165 1720508030.779806 1720508034.720798 1720508035.3622708 1720508037.7463782 1720508042.6894598 1720508044.9407175 1720508056.5278485 1720508062.3510454 1720508121.945859 1720508141.6810555 1720723150.2531953 1720723152.0034084 1720723153.4047132 1720723154.3587787 1720723155.6927114 1720723160.229176 1720723181.9268985 1720723192.2047257 1720723210.7215843 1720723229.6315517 1720871823.769133 1720871824.6627216 1720871825.5460563 1720871826.1253562 1720871827.6929772 1720871844.2957664 1720871850.666975 1720871928.7215664 1720871949.1951418 1720874547.0185373 1720969499.4983323 1720969501.5016003 1720969503.052767 1720969503.8038156 1720969508.6751223 1720969518.3859234 1720969527.5263083 1720969531.275996 1720969576.9711084 1720969596.8234456 1721145106.3810425 1721145106.911887 1721145108.9086998 1721145111.0675786 1721145113.3288937 1721145132.1856048 1721145140.2767642 1721145184.267049 1721145216.828088 1721305209.7903893 1721305213.3784285 1721305214.8135803 1721305215.1242259 1721305221.4533546 1721305238.789072 1721305264.8440905 1721305426.81819 1721305485.3038528 1721379138.4693382 1721379141.1253483 1721379142.7651606 1721379147.1431847 1721379162.4500675 1721379163.127343 1721379224.7573798 1721379237.1989245 1721406788.94073 1721406793.3566136 1721406795.4649131 1721406831.6017003 1721406852.2838242 1721406869.9846714 1721406899.919841 1721406912.9084558 1721488399.1502702 1721488401.390993 1721488404.5964868 1721488406.046398 1721488407.5913856 1721488418.311122 1721488424.1997676 1721488427.7730663 1721488504.7484682 1721488525.566082 1721496591.4225824 1721496594.500339 1721496599.4931395 1721496601.0831027 1721496602.28746 1721496625.780832 1721496643.8198357 1721496652.6943266 1721496667.8110917 1721565388.2224255 1721565388.8312228 1721565390.4933197 1721565390.6252916 1721565391.4323554 1721565393.3962724 1721565407.8343496 1721565420.1680913 1721565454.1642957 1721565478.4827487 1721574226.567986 1721574228.2650464 1721574229.2136655 1721574230.5642936 1721574234.564178 1721574240.1197848 1721574253.3657877 1721574304.1189775 1721574326.7021465 1721576971.9406857 1721576974.0474002 1721576977.079685 1721576977.6775851 1721576978.880478 1721576992.2445269 1721577004.8481708 1721577048.988025 1721577065.7160993 1721578295.2526956 1721578298.8162296 1721578299.1991253 1721578300.0686698 1721578302.5384188 1721578304.4118538 1721578321.6604548 1721578324.0449317 1721578440.7719927 1721578479.2742977 1721580017.9542558 1721580019.2280664 1721580020.8857832 1721580021.9373968 1721580024.704843 1721580052.6509597 1721580055.1464536 1721580089.107742 1721580100.2947977 1721650930.8342354 1721650933.5484543 1721650947.093313 1721650950.4567475 1721651005.5955992 1721651481.2783616 1721651559.495912 1721674276.1086073 1721674278.513514 1721674281.290339 1721674283.639705 1721674288.2609918 1721674305.2613103 1721674311.6022947 1721674338.3399606 1721674362.5169706 1721718314.6641715 1721718316.3952758 1721718319.9596653 1721718325.270815 1721718343.0735612 1721718347.1543753 1721718393.3736312 1721718415.8997684 1721910087.0128944 1721910090.1194847 1721910091.1340427 1721910110.6500988 1721910114.7352288 1721910330.7036839 1721910348.0335593 1721910916.43767 1721910918.2617009 1721910918.9612172 1721910920.6596704 1721910923.7422097 1721910927.19123 1721910944.6203954 1721910956.9221787 1721911128.751464 1721911158.3159337 1721912339.4567149 1721912343.9946265 1721912346.3522673 1721912360.1102629 1721912367.2019844 1721912498.5683155 1721912514.5882468 1721987679.8209765 1721987700.8785155 1721987702.3838289 1721987704.0928543 1721987708.7966185 1721987717.842413 1721987731.7817628 1721987743.6735523 1721987755.6558464 1721987776.7134225 1722009022.164185 1722009023.5288925 1722009026.1637077 1722009026.7395837 1722009028.985516 1722009044.6780007 1722009057.0580795 1722009102.7638628 1722009128.2290883 1722011314.4384987 1722011317.0866902 1722011323.0479326 1722011329.1328695 1722011330.6450853 1722011345.1625364 1722011363.1033154 1722011367.4035761 1722011409.0791147 1722011437.4246118 1722083518.8362637 1722083520.1399145 1722083521.4632201 1722083524.563069 1722083525.399378 1722083531.860173 1722083547.3582554 1722083597.739719 1722083631.056319 1722085677.4967399 1722085679.4884202 1722085679.9108589 1722085688.0438259 1722085689.9928405 1722085695.2417676 1722085703.2458162 1722085704.999607 1722085764.2840428 1722085781.77046 1722095979.0386055 1722095980.0828955 1722095981.032806 1722095983.626646 1722095984.984198 1722095999.230339 1722096005.4851468 1722096059.4911695 1722096071.8962398 1722100536.4515254 1722100539.4221365 1722100542.5566645 1722100544.0714207 1722100545.4322321 1722100564.5859752 1722100566.014869 1722100615.2521555 1722100643.20215 1722149013.9013457 1722149015.767447 1722149016.9281707 1722149017.5551665 1722149018.389765 1722149027.7650094 1722149036.6032405 1722149045.8741276 1722149104.189777 1722149107.7602215 1722155521.3010793 1722155522.2409105 1722155523.7213988 1722155528.6886873 1722155542.7506652 1722155672.0228562 1722155681.411199 1722157757.768678 1722157761.2266603 1722157778.985823 1722163153.3098607 1722163155.395189 1722163156.2589576 1722163174.1873949 1722163180.5309765 1722163215.403878 1722163256.7635057 1722165512.4110675 1722174536.351207 1722174538.6816373 1722174539.4588919 1722174542.5816898 1722174554.7090611 1722174566.311441 1722174613.8005621 1722174624.0169446 1722242650.1910343 1722242651.618098 1722242654.8140075 1722242656.8090444 1722242658.0002894 1722242674.320784 1722242686.162094 1722242716.8431196 1722242745.6145446 1722244920.0555336 1722244922.2241864 1722244924.9416807 1722244978.3089955 1722244980.8752184 1722244981.2110722 1722244982.3846757 1722244999.3691816 1722245010.4448211 1722245063.3641362 1722245069.0751998 1722246449.8212233 1722252759.7456295 1722252763.403051 1722252765.549591 1722252766.465789 1722252781.9618795 1722252789.6683662 1722252834.8567882 1722252846.037899 1722255909.6763847 1722255912.8771906 1722255917.6040564 1722255933.7703345 1722255940.327634 1722255954.335101 1722256095.858246 1722256171.285489 1722256831.1770594 1722258348.349472 1722258350.8484561 1722258351.7297373 1722258355.2572641 1722258358.1317604 1722258378.183615 1722258391.2777941 1722258439.4786732 1722258458.8920097 1722258747.4458783 1722258748.4867609 1722258752.014911 1722258753.2976851 1722258776.3941264 1722258780.365012 1722258828.8410087 1722258856.5356793 1722266281.154913 1722266283.9311874 1722266286.8559344 1722266287.742336 1722266295.0477529 1722266307.5419962 1722266318.8401215 1722266368.3401177 1722266390.6271458 1722267600.9945157 1722267613.3273997 1722267615.6415715 1722267629.8862028 1722267646.5896106 1722267701.1500127 1722267710.70105 1722268060.4806027 1722269798.3464947 1722269799.06523 1722269803.173558 1722269805.006228 1722269806.2911599 1722269826.6815646 1722269830.208888 1722269887.5769298 1722269901.5990813 1722271938.8490343 1722271940.654133 1722271942.2798257 1722271945.2685156 1722271954.4873567 1722271960.5731528 1722271970.4570544 1722272032.061529 1722272039.191121 1722285046.130592 1722285053.13936 1722285050.3333395 1722285054.3085802 1722285072.0029724 1722285089.6750438 1722285139.903813 1722285151.8262293 1722286556.865009 1722286557.787786 1722286559.4217722 1722286560.8234248 1722286566.8899527 1722286568.9542303 1722286587.239442 1722286591.8479471 1722286650.8837395 1722286670.6716592 1722287811.6441412 1722287814.9035003 1722287820.1875937 1722287823.045072 1722287833.3711326 1722287840.8799474 1722287847.3387156 1722287910.7062888 1722287933.3743765 1722346814.3318946 1722346815.3555522 1722346816.5075314 1722346819.4600098 1722346823.8913958 1722346840.9840052 1722346852.0418973 1722346901.757354 1722346936.7027256 1722353424.4027636 1722353455.8584085 1722353475.5796852 1722353476.625922 1722353478.1814175 1722353479.2128873 1722353505.9890182 1722353514.8506823 1722353529.4125268 1722353573.6369014 1722357662.938199 1722357666.437098 1722357669.5629907 1722357674.895245 1722357683.176122 1722357690.5174837 1722357699.457917 1722357752.839344 1722357818.180176 1722515375.864221 1722515382.8253098 1722515441.5088887 1722515444.4139678 1722515473.4817035 1722515494.5169368 1722515550.025863 1722515705.8252301 1722515774.3782804 1722703516.6385605 1722703523.7818244 1722703524.9584632 1722703528.4236033 1722703541.265863 1722703551.7528145 1722703605.1434042 1722703617.285085 1722861260.5651002 1722861274.2730734 1722861282.853552 1722861327.648218 1722861328.7040336 1722861341.652638 1722861366.9537344 1722861368.267377 1722861411.8933487 1722957515.2378643 1722957517.9867597 1722957521.0474427 1722957525.66109 1722957526.7974 1722957542.7545946 1722957550.747547 1722965766.1494622 1722965766.9189792 1722965769.080297 1722965775.1350465 1722965776.436328 1722965802.8354776 1722965805.2216742 1722972230.2460885 1722972232.4957376 1722972238.2461116 1722972239.310697 1722972262.4442368 1722972265.5337362 1723119651.996149 1723119671.2755423 1723119674.4815555 1723119675.2286239 1723119700.4973273 1723119732.5752525 1723119837.029244 1723125159.3408673 1723125161.305721 1723125164.671936 1723125185.5027578 1723125201.5769818 1723125281.7976792 1723127344.0401428 1723127345.030985 1723127347.6052334 1723127348.2776942 1723127355.4759185 1723127366.430687 1723127376.5442193 1723127502.6736557 1723127507.9946194 1723127511.6701398 1723127524.3709917 1723127555.333043 1723127624.4754634 1723129978.2325845 1723129980.065203 1723129989.2464702 1723129990.1236107 1723129996.6202312 1723130005.8243701 1723130021.1074052 1723130113.5195165 1723131899.804144 1723131902.20493 1723131905.102239 1723131908.9329078 1723131909.5538316 1723131934.1060607 1723131952.547817 1723132075.5102296 1723132076.8952231 1723132078.9014304 1723132080.5638356 1723132102.4776583 1723132117.5459423 1723132197.1211262 1723134185.454269 1723134186.0828547 1723134188.3349106 1723134189.4652045 1723134190.480767 1723134193.0541909 1723134220.2506118 1723134222.9765935 1723134307.4119363 1723135892.3347054 1723135893.8114343 1723135897.6299603 1723135903.8710804 1723135921.066215 1723135931.0387099 1723136009.1816049 1723136902.2131515 1723136903.9931657 1723136906.1799746 1723136908.3397403 1723136933.3292496 1723136934.7258308 1723137040.877315 1723193766.4798963 1723198497.489374 1723198503.6559103 1723198506.1072052 1723198506.6462848 1723198511.2412324 1723198523.283447 1723198540.268096 1723198601.4533756 1723293918.052099 1723293919.0126128 1723293921.7233214 1723293922.8796544 1723293924.7155743 1723293939.8329105 1723293957.6624916 1723294023.1734905 1723295716.4582942 1723295718.1176283 1723295719.1733673 1723295720.8703227 1723295731.279886 1723295742.4269278 1723295756.1501608 1723295824.8342354 1723296063.7411687 1723296066.0409968 1723296066.9913926 1723296068.4480395 1723296085.9844544 1723296101.2945962 1723296154.130692 1723297450.4546869 1723297453.313314 1723297454.6593533 1723297461.3677888 1723297464.9280722 1723297483.7273545 1723297489.243885 1723297555.934929 1723303640.0538623 1723303641.0859456 1723303666.7665021 1723303674.4819245 1723303792.3911774 1723307055.669447 1723307057.516665 1723307060.937572 1723307065.154463 1723307068.336204 1723307091.879684 1723307102.205826 1723307165.0516765 1723421891.6107564 1723421892.2079666 1723421895.6024501 1723421904.3759992 1723421905.757803 1723421926.5555098 1723422032.8409994 1723457214.2616053 1723457215.15762 1723457217.5868185 1723457254.1931028 1723457260.4853334 1723457313.550356 1723500944.139548 1723500947.844652 1723500950.5009212 1723500972.7893791 1723500986.8719485 1723501045.8168595 1723503249.5519896 1723503250.7019823 1723503252.239709 1723503256.149816 1723503282.5018637 1723503291.6707165 1723503344.7708678 1723617445.5637114 1723617446.120923 1723617447.710768 1723617452.9640238 1723617459.3619127 1723617479.1712415 1723617484.4352062 1723617573.3607473 1723639240.4812639 1723639242.4700098 1723639244.217371 1723639244.9857624 1723639250.0838876 1723639283.742886 1723639306.2462215 1723639394.4827173 1723724470.8341424 1723724471.7962675 1723724472.5649292 1723724483.1117017 1723724489.4274752 1723724504.6824448 1723724742.2423058 1723789488.737526 1723789491.9785106 1723789495.1937232 1723789507.179287 1723789523.8786826 1723789529.5911324 1723789585.4323795 1723969218.427382 1723969221.6018429 1723969222.467898 1723969226.3746696 1723969227.7480848 1723969244.946983 1723969259.1996505 1723969327.049781 1724070102.5254915 1724070104.030959 1724070106.3740706 1724070118.5323465 1724070172.053344 1724070490.7402184 1724143306.904538 1724143311.0641122 1724143311.7600024 1724143315.4748845 1724143317.400293 1724143319.5802855 1724143336.301159 1724143339.2931793 1724143433.1847665 1724158542.3415682 1724158543.136938 1724158545.9649029 1724158546.7066395 1724158551.6076107 1724158570.2962599 1724158577.4562912 1724158661.8227847 1724202592.9038768 1724202628.7645361 1724202629.7426107 1724202639.145731 1724202640.2604976 1724202644.7802536 1724202694.4860175 1724202703.172851 1724202742.1755662 1724320027.2917662 1724320030.2812905 1724320030.9599948 1724320034.4022193 1724320039.9547336 1724320064.6408205 1724320067.8799412 1724320155.4411907 1724322006.8179777 1724322017.021479 1724322100.0275319 1724326816.9750662 1724326835.2257452 1724326839.3397768 1724326858.9847226 1724329530.0523298 1724329531.5851007 1724329532.342777 1724329534.3340228 1724329538.6644125 1724329562.7337675 1724329568.038632 1724329693.312654 1724329728.0111637 1724339828.4843464 1724339832.2171478 1724339834.2105722 1724339836.9052422 1724339842.2160335 1724339853.4929526 1724339860.8692455 1724339927.5192857 1724339972.5675364 1724340171.2986777 1724675112.2099783 1724675112.7536762 1724675113.8609295 1724675130.883486 1724675142.509672 1724675455.240375 1724675476.4276843 1724678442.9240308 1724678443.7646422 1724678447.3701274 1724678450.5327325 1724678471.2342534 1724678481.0344825 1724678614.5176039 1724678662.635488 1724678840.4042537 1724678843.25312 1724678844.0742831 1724678845.7958224 1724678874.517959 1724678879.3479588 1724679030.4941568 1724679097.7171695 1724679895.7099562 1724679898.7889495 1724679900.2195878 1724679903.5279362 1724679921.7844772 1724679928.0266182 1724680045.960651 1724680117.7574298 1724740336.2182548 1724764054.1148956 1724764103.170195 1724764105.5358524 1724764109.538788 1724764111.6916456 1724764113.9705515 1724764139.067442 1724764156.787153 1724764158.9183803 1724764238.4044094 1724931783.1112685 1724931828.8406136 1724931831.20521 1724931839.6174808 1724931841.0950983 1724931846.149007 1724931877.815933 1724931883.4549878 1724931894.0296752 1724931917.710784 1725133164.072982 1725133164.7953568 1725133170.7556214 1725133188.4473302 1725133196.307781 1725133275.3370075 1725133289.371418 1725140712.2051272 1725140713.0222561 1725140716.4887998 1725140718.6381378 1725140720.004144 1725140722.1596622 1725140742.347565 1725140743.618021 1725140797.1206677 1725140803.9172254 1725200633.529623 1725200635.044884 1725200636.8651588 1725200641.4771197 1725200643.175392 1725200662.855143 1725200670.1966913 1725200712.189818 1725200725.6398485 1725200829.3296444 1725207335.0009885 1725207337.3394368 1725207367.0959451 1725207368.6036494 1725207370.6801124 1725207377.3880663 1725207384.7640123 1725207401.538926 1725207505.5956042 1725207507.5365038 1725208502.6187615 1725208505.7267725 1725208507.542662 1725208509.9724796 1725208534.7410796 1725208545.9173281 1725208588.1209402 1725208594.0258324 1725209079.5139468 1725209108.9646592 1725209109.9745634 1725209110.8624318 1725209112.8804767 1725209118.5993817 1725209193.2443478 1725209221.8756156 1725281554.7296872 1725281556.2016904 1725281558.0330102 1725281580.3035154 1725281584.1793041 1725281687.167911 1725281764.955561 1725300224.2238321 1725300225.9345813 1725300229.3170836 1725300230.516357 1725300256.3338172 1725300308.0946443 1725300319.4941478 1725300320.8204544 1725540715.3032386 1725540717.9711885 1725540719.1833887 1725540720.432735 1725540722.1555789 1725540749.0875998 1725540751.213678 1725540972.8921459 1725541015.92986 1725631426.7354417 1725631427.6936705 1725631428.2327724 1725631448.6708682 1725631463.0081913 1725631515.3664324 1725631557.198132 1725822506.3782604 1725822507.5937872 1725822511.661547 1725822512.4515877 1725822515.9412503 1725822535.2268958 1725822593.0592098 1725822598.4597292 1725822607.1766093 1725884435.798726 1725884436.3909311 1725884437.4291615 1725884469.482712 1725884481.8351278 1725884647.5585947 1725884675.1920853 1726143690.4869845 1726143691.3081863 1726143693.3989668 1726143694.4958773 1726143701.1455789 1726143712.3017654 1726143722.4283848 1726143981.2912416 1726144071.9595954 1726302858.4009302 1726675441.8821027 1726675447.1515436 1726675455.56139 1726675468.5214655 1726675479.9343245 1726675529.4341502 1726675578.1315203 1726734255.6599536 1726734258.0744572 1726734261.6568701 1726734263.415758 1726734271.322075 1726734284.6144738 1726734293.6049356 1726734342.2983801 1726734368.8190172 1726829047.453488 1726829048.2625833 1726829050.5636995 1726829053.7786524 1726829056.1417718 1726829059.8768687 1726829083.4874034 1726829086.4730258 1726829091.3235495 1726838086.3674679 1726838087.5454314 1726838090.5266967 1726838091.309051 1726838095.503319 1726838121.7484057 1726838162.286817 1726852924.4158013 1726852947.8678963 1726852969.8119648 1726907944.1144762 1726907946.9047077 1726907954.4580448 1726907957.356998 1726907970.7593565 1726907975.3553808 1726924569.5547562 1726924570.11676 1726924570.6655016 1726924578.9927793 1726924582.2498786 1726924584.8417032 1726924592.4838006 1726924599.1381044 1726924608.6165662 1727094178.8340871 1727094183.3336067 1727094187.5304337 1727094188.7281716 1727094190.2004 1727094197.5468636 1727094204.1370888 1727094213.1934218 1727094224.8191156 1727252538.2230966 1727252545.1595104 1727252559.3410785 1727252560.3491113 1727252585.4905877 1727252604.2638414 1727252611.335605 1727252619.5693839 1727252647.0808942 1727252666.8197966 1727355171.5528011 1727355172.1388216 1727355175.9172277 1727355179.5949962 1727355187.6415644 1727355189.9619722 1727355195.9563243 1727355209.6537554 1727355213.1416783 1727355738.2683496 1727355739.447531 1727355740.8816657 1727355743.0290265 1727355744.3655899 1727355754.689045 1727355768.3128917 1727355773.5655093 1727355789.0512674 1727356845.3867826 1727356849.4635057 1727356851.768166 1727356853.750152 1727356856.3031561 1727356857.9159436 1727356884.2286303 1727356893.986862 1727356913.6343558 1727357844.6776798 1727357847.1814015 1727357851.3251064 1727357863.0378542 1727357870.5985737 1727357881.012939 1727357912.1287177 1727358935.303634 1727358935.9912815 1727358939.3313124 1727358940.3998544 1727358946.4800787 1727358950.667642 1727358960.9032006 1727358974.1791952 1727359005.7682602 1727364185.5690017 1727364186.335221 1727364188.1669273 1727364191.111278 1727364197.9766107 1727364218.0347583 1727364224.4208484 1727364229.735253 1727698959.124807 1727698960.0979502 1727698961.8392282 1727698964.5413785 1727698973.0976288 1727698995.476023 1727699001.1445177 1727699001.8644443 1727951197.7174723 1727951205.6155488 1727951210.6008136 1727951211.924095 1727951214.3595564 1727951239.830181 1727951260.4132447 1727951282.1391022 1727951287.3107123 1727951295.984193 1727957717.7947898 1727957718.6923344 1727957719.9319725 1727957723.2567813 1727957732.4791858 1727957738.5735471 1727957757.3239744 1727957770.9410255 1727958071.3421822 1727958072.6552424 1727958073.4494936 1727958090.4808335 1727958092.377394 1727958098.803949 1727958119.8236375 1727958131.9921308 1728033605.927856 1728033610.166473 1728033618.1204672 1728033619.478822 1728033631.886684 1728033633.5909014 1728033647.518328 1728059474.6622338 1728059487.5971162 1728059514.2836185 1728059537.8234003 1728059539.5742385 1728059555.2033007 1728059577.58866 1728059591.8590653 1728122909.0253503 1728122911.2703123 1728122912.2143638 1728122914.4684803 1728122915.4730194 1728122922.2035043 1728122922.9835937 1728122933.4255273 1728122953.6694286 1728129579.751556 1728129580.3356383 1728129581.3151999 1728129582.1964667 1728129585.9221125 1728129596.659089 1728129602.1400926 1728129611.0264146 1728129613.638498 1728133448.9883578 1728133449.627583 1728133452.256095 1728133453.6784909 1728133457.0713844 1728133462.6810381 1728133480.493868 1728133484.297163 1728133484.900972 1728194810.3820596 1728194811.8586535 1728194812.9597461 1728194816.63949 1728194820.2523391 1728194824.9291325 1728194832.8092308 1728194835.9376342 1728194853.9915667 1728234031.697532 1728234033.8452804 1728234034.8792348 1728234036.522442 1728234038.732697 1728234046.88053 1728234057.2472894 1728234062.2539334 1728234066.9047368 1728303707.3891773 1728303708.2521691 1728303714.9815907 1728303722.5586314 1728303772.3002484 1728303773.1410623 1728303776.6379309 1728303786.609231 1728303836.3226495 1728303846.5049798 1728337169.0340455 1728337170.1327274 1728337174.211485 1728337191.5496802 1728337192.9797745 1728337194.4701893 1728337207.912653 1728537193.6512961 1728732945.4463923 1728732948.6507535 1728732952.2837873 1728732953.691373 1728732955.2932432 1728732956.524756 1728732968.339935 1728732970.5543928 1728732982.2182877 1728737744.7459152 1728737748.98257 1728737752.1383252 1728737761.0445974 1728737812.1413603 1728737818.6112876 1728737826.940009 1728737872.9231803 1728737875.5850608 1728743498.7469113 1728743499.9835532 1728743500.5865278 1728743504.0295928 1728743513.9563892 1728743516.4044924 1728743521.059433 1728743536.4969213 1728743539.457314 1728743942.3254461 1728743947.0616877 1728743948.5496256 1728743952.4485714 1728743956.8069415 1728743972.981716 1728743974.955076 1728743988.2777052 1728745978.289991 1728745979.4105432 1728745981.1054873 1728745981.9421353 1728745985.224251 1728745992.1692357 1728746008.6597588 1728746010.1733787 1728746063.5124123 1728746211.8122053 1728746213.9458363 1728746217.8126671 1728746218.3260763 1728746223.4439285 1728746235.339829 1728746237.54506 1728746240.7656617 1728746242.9190016 1728746253.7251363 1728833700.0260398 1728833701.4446497 1728833702.2353542 1728833703.9480202 1728833708.9518077 1728833713.0262654 1728833714.4510262 1728833723.400574 1728833731.5921385 1728833736.895667 1728835384.371322 1728835385.962284 1728835387.0517457 1728835387.7445607 1728835388.9590096 1728835392.4119325 1728835399.9746296 1728835407.122815 1728835417.8316333 1728835431.4600117 1728836544.9717374 1728836547.9728825 1728836549.3966005 1728836551.46428 1728836552.6611505 1728836564.7708545 1728836575.8413124 1728836577.6584494 1728836582.209422 1728920255.0991843 1728920258.0877094 1728920266.047279 1728920267.7859914 1728920269.8180747 1728920271.430736 1728920272.3737376 1728920275.7158494 1728920285.1150532 1728920313.6354492 1729006711.7335062 1729006718.0533266 1729006720.2043796 1729006723.6731513 1729006726.5683281 1729006733.0146976 1729006754.30765 1729006776.9883995 1729010354.851715 1729010356.3835125 1729010372.5242126 1729010386.5633569 1729010392.79671 1729010395.8405745 1729033820.8557181 1729033823.9684222 1729033826.6887953 1729033828.8346639 1729033829.7552333 1729033835.2953548 1729033851.8851895 1729033867.2496648 1729033873.9356413 1729092755.8003762 1729092757.4442213 1729092760.2669573 1729092762.2494287 1729092763.1737988 1729092776.6677477 1729092783.585181 1729092795.4211159 1729092802.884515 1729093404.8581364 1729093406.1022863 1729093409.6069078 1729093413.4827905 1729093415.0146415 1729093437.0040774 1729093443.9370294 1729093455.6258225 1729093917.3740594 1729093924.7103052 1729093926.2689004 1729093934.4847856 1729093939.4272058 1729093949.0355246 1729093972.820219 1729094446.2924614 1729094448.044019 1729094450.5190663 1729094452.3579662 1729094454.1246204 1729094455.875043 1729094467.1689668 1729094470.4615102 1729094494.8975074 1729094518.1359916 1729104871.5899901 1729104874.876859 1729104876.8862448 1729104877.7222195 1729104879.6530187 1729104887.6756997 1729104891.0999753 1729104907.2810287 1729104915.628079 1729257860.7060654 1729257865.0598102 1729257865.908288 1729257870.1832783 1729257884.2104728 1729257890.3658347 1729257893.8982866 1729257898.6145709 1729332868.8884962 1729332875.6134863 1729332877.9988463 1729332879.5559447 1729332893.679242 1729332894.9814157 1729332920.3224845 1729332947.9222736 1729332968.8512816 1729334085.642702 1729334088.3801568 1729334092.1009166 1729334092.9905782 1729334094.3209932 1729334098.021537 1729334103.7886531 1729334113.7123656 1729334126.603184 1729334133.2773445 1729339236.7112806 1729339237.2109628 1729339239.8039072 1729339241.923618 1729339245.3853216 1729339246.3951786 1729339250.5824714 1729339262.8487272 1729339267.2262473 1729339292.2161791 1729342907.005911 1729342912.4427733 1729342919.0908499 1729342920.2621865 1729342922.3985302 1729342932.4808924 1729342939.7966642 1729342947.7565434 1729342958.935519 1729345509.0483184 1729345510.2446895 1729345512.228264 1729345513.2745836 1729345515.4445262 1729345516.5309505 1729345523.1481001 1729345530.791648 1729345543.021134 1729345564.3512073 1729352269.5894463 1729352271.1257896 1729352272.4453163 1729352278.0577192 1729352281.2217155 1729352286.6776705 1729352298.173631 1729352299.0579467 1729352314.2006667 1729352316.07831 1729355762.6713998 1729355763.7223508 1729355767.140102 1729355768.0427616 1729355770.2150545 1729355779.3283195 1729355787.676488 1729355806.501878 1729358508.6128478 1729358509.3026485 1729358510.1842167 1729358513.0574265 1729358515.126321 1729358516.7900476 1729358525.60399 1729358529.4947524 1729358545.4960544 1729358552.3557 1729367046.3978016 1729367049.017654 1729367050.0929554 1729367051.2651315 1729367056.071756 1729367056.814972 1729367063.5559955 1729367071.520121 1729367080.6116037 1729412704.8927162 1729412706.355342 1729412708.0568678 1729412710.6722658 1729412715.3055286 1729412720.817641 1729412735.5620499 1729412740.1556945 1729412750.209623 1729506881.5077236 1729506882.998659 1729506885.2772717 1729506887.9168231 1729506889.3227882 1729506890.270235 1729506908.287083 1729506917.0852423 1729506922.2671366 1729506925.880165 1729562000.486412 1729562002.1365795 1729562003.450998 1729562005.5320075 1729562013.7140665 1729562014.851959 1729562027.823392 1729562030.9649224 1729562037.4399283 1729772628.024384 1729772632.1716542 1729772633.3096597 1729772641.8233664 1729772643.2488031 1729772652.314984 1729772667.7016115 1729772677.9223237 1729774190.9545734 1729774191.597862 1729774193.9808326 1729774202.2812762 1729774205.5565357 1729774211.2316782 1729774216.5960338 1729774227.0569327 1729774234.6505063 1729956626.8351767 1729956628.2261896 1729956630.6545267 1729956631.7810423 1729956632.7964118 1729956641.0736098 1729956646.7477207 1729956656.1438482 1729956677.1112947 1729963223.1188562 1729963225.7192516 1729963230.0806804 1729963236.5373201 1729963237.9832456 1729963238.6328769 1729963240.6313212 1729963249.340651 1729963252.4305904 1729963258.9741237 1730041013.5380948 1730041015.6442053 1730041026.0668254 1730041067.7284575 1730041076.675968 1730041087.8943112 1730041095.5179813 1730041129.9984517 1730041146.4527524 1730042544.7177842 1730042546.114285 1730042549.491665 1730042552.6548748 1730042554.1026793 1730042562.970534 1730042566.0576777 1730042566.737246 1730042578.9335535 1730044922.608126 1730044923.2814202 1730044926.6715765 1730044933.286997 1730044938.2111177 1730044945.0962775 1730044958.992743 1730044964.1534376 1730108564.953472 1730108566.2638736 1730108567.4402096 1730108574.8510845 1730108575.9162414 1730108588.8945043 1730108595.2026105 1730108647.3785403 1730118135.637466 1730118140.5202587 1730118141.2257318 1730118144.1956835 1730118148.371045 1730118151.6871338 1730118166.2305794 1730118184.2650702 1730118203.2182014 1730179976.65268 1730179977.939642 1730179978.7225032 1730179980.8295987 1730179988.8647323 1730179989.9527414 1730179998.2916584 1730180000.8676643 1730180007.775465 1730180025.6631205 1730218898.9072146 1730218905.6026793 1730218909.059037 1730218910.3365545 1730218915.8225565 1730218926.8502307 1730218932.3286083 1730218939.3001914 1730275298.8027234 1730275301.4654057 1730275303.1072261 1730275304.0636823 1730275317.381003 1730275320.6247735 1730275333.5557346 1730275380.380172 1730280384.1852689 1730280384.8983238 1730280385.6372325 1730280388.6256185 1730280390.6127968 1730280396.4061003 1730280405.0505073 1730280422.5386162 1730280426.1869366 1730280430.868838 1730284674.686032 1730284680.906267 1730284682.2430077 1730284685.2335389 1730284689.0890508 1730284689.7998638 1730284702.695149 1730284715.6218622 1730284722.7031624 1730374527.1452029 1730374527.7010581 1730374529.5714324 1730374532.335925 1730374539.5056646 1730374545.225128 1730374562.1102057 1730374571.857448 1730380728.7295353 1730380731.150879 1730380732.6688063 1730380736.5049667 1730380739.8626847 1730380754.6919937 1730380764.2745686 1730380770.4302964 1730409100.9300206 1730409102.331282 1730409102.9998615 1730409105.8457847 1730409117.0779421 1730409125.186845 1730409140.8327959 1730413799.680919 1730425798.490704 1730425799.8475976 1730425804.5104012 1730425807.6398041 1730425811.7750034 1730425823.3259237 1730425830.182246 1730425831.0041034 1730477208.939486 1730477210.362072 1730477213.3330104 1730477222.7644532 1730477250.6180503 1730477271.8797004 1730477278.7356114 1730477311.7083013 1730477344.9664245 1730551466.2613475 1730551468.1558676 1730551468.6379552 1730551471.574293 1730551485.292978 1730551714.9587398 1730551721.064079 1730551770.7810545 1730551772.724341 1730551779.172007 1730551783.5625727 1730551785.240131 1730551795.530203 1730551816.602113 1730551843.3321774 1730568764.139239 1730568766.4208605 1730568768.0659432 1730568770.7483375 1730568775.3193119 1730568777.1212685 1730568778.2512453 1730568786.6107159 1730568792.1702764 1730568803.3814995 1730572393.2263505 1730572394.2957191 1730572396.1838949 1730572403.882823 1730572407.1082404 1730572415.5606542 1730572418.9502246 1730572426.7249322 1730573493.4395432 1730573494.498661 1730573497.7063038 1730573499.4742029 1730573503.44434 1730573505.044457 1730573507.062294 1730573514.6670637 1730573527.9402637 1730573529.6573448 1730646276.7328491 1730646278.8141346 1730646279.7373104 1730646286.0035422 1730646292.8514357 1730646295.655658 1730646306.019205 1730646327.7861974 1730647912.8937979 1730647913.7561932 1730647916.4450212 1730647919.0412316 1730647921.0074391 1730647926.6910808 1730647930.057654 1730647933.496736 1730647936.6280458 1730647949.4988215 1730807242.5316253 1730807244.3396552 1730807245.8609428 1730807251.8184936 1730807261.783787 1730807265.3647041 1730807272.387132 1730817468.565808 1730817471.377723 1730817472.8056078 1730817482.5650048 1730817497.1087816 1730817499.4315834 1730817503.9007418 1730817513.8748765 1730817523.1081626 1730821401.8298514 1730821406.4129963 1730821407.9715912 1730821409.6416264 1730821412.768464 1730821421.6235604 1730821427.8204122 1730821437.4782767 1730821442.916009 1730822472.9151068 1730822478.4528308 1730822479.8638492 1730822482.0061872 1730822486.754859 1730822490.588171 1730822506.739088 1730822513.804522 1730899260.7787814 1730899264.2263396 1730899273.500649 1730899292.8726277 1730899303.721257 1730901723.905749 1730901742.118694 1730901753.511005 1730903054.6751752 1730903055.8458865 1730903057.2122521 1730903074.4498112 1730971745.8499439 1730971747.5699441 1730971749.1461153 1730971751.4877 1730971759.2653332 1730971761.1175764 1730971775.4306664 1730971783.5866497 1730971803.5608537 1730981972.6511354 1730981973.328158 1730981974.8271549 1730981977.8909194 1730981987.2681918 1730981999.041532 1730981999.8671234 1730982008.7539716 1730982044.559671 1731056397.2586415 1731056402.036135 1731056411.9442914 1731056451.7027507 1731056453.9502587 1731056486.1215286 1731056487.0533705 1731056515.2322998 1731056532.1200871 1731144519.888281 1731144520.509171 1731144523.3933926 1731144527.078465 1731144531.4000866 1731144542.6378856 1731144549.7665086 1731144686.2622302 1731144689.2599902 1731144690.9398296 1731144695.6028743 1731144699.6347964 1731144707.2914085 1731144712.291652 1731144721.7356853 1731144727.467037 1731148127.8145342 1731148129.112714 1731148131.860765 1731148136.942361 1731148141.6284542 1731148154.7230666 1731148155.9279375 1731148162.3672278 1731148397.0358782 1731148397.522588 1731148400.5981908 1731148402.4493976 1731148410.2816496 1731148419.8652954 1731148428.1873734 1731148429.6606069 1731148718.409702 1731148723.2307727 1731148724.7611856 1731148725.445875 1731148728.9497018 1731148733.7036128 1731148749.5031757 1731148755.6574883 1731148767.156155 1731154967.4147255 1731154971.837443 1731154972.7053823 1731154979.110837 1731154980.2745206 1731154994.0468187 1731154998.1615376 1731155002.669648 1731167622.600458 1731167626.352391 1731167629.0613265 1731167632.2916656 1731167638.0113463 1731167644.7619684 1731167645.7460804 1731167653.387026 1731171025.7433338 1731171028.1454437 1731171032.2400746 1731171041.9862351 1731171043.0770853 1731171055.3759856 1731171055.877064 1731171075.172642 1731229412.1347032 1731229415.2789226 1731229416.5422425 1731229418.095707 1731229431.661456 1731229433.0100691 1731229437.1850004 1731229442.8717866 1731229613.1210473 1731229613.8068168 1731229614.5309494 1731229621.1576624 1731229628.7896118 1731229631.4962785 1731229637.5075917 1731229639.5613863 1731229654.606807 1731481286.7534761 1731481288.5645113 1731481290.766877 1731481291.8198197 1731481302.1982982 1731481308.6676452 1731481327.047522 1731481331.2523713 1731593220.8888807 1731593224.1370466 1731593225.8446 1731593231.513437 1731593235.6293445 1731593265.1321702 1731593265.8563323 1731593266.696744 1731593298.358575 1731859628.3740964 1731859630.484212 1731859631.553499 1731859633.175853 1731859634.8326163 1731859637.6302872 1731859651.440454 1731859654.1323884 1731859662.2396228 1731859672.9553397 1731861962.1777155 1731861964.292851 1731861977.7196784 1731861979.7432628 1731861986.7312233 1731861990.4504364 1731922884.9139953 1731922887.2335374 1731922887.9522748 1731922888.5676258 1731922897.286149 1731922906.193417 1731922913.8000236 1731922923.4335632 1731922945.7963576 1731932203.806244 1731932204.5280297 1731932207.3690157 1731932210.3461585 1731932213.994411 1731932222.5832834 1731932223.471831 1731932249.044136 1731932265.9347122 1731932501.2521935 1731932508.8772318 1731932513.0450733 1731932542.3964057 1731932553.9959211 1731932563.2576783 1731932594.0971456 1731933170.9760642 1731933172.4696252 1731933173.7094665 1731933178.535318 1731933182.5050938 1731933185.610432 1731933197.295215 1731933222.811717 1731933232.5881987 1731935401.3611374 1731935413.0451057 1731935414.2300546 1731935416.9610739 1731935429.9369838 1731935445.890509 1731947718.9175668 1731947721.6089666 1731947723.2720885 1731947726.3099442 1731947732.5519915 1731947734.7302103 1731947746.6716468 1731947754.0796657 1731947759.056394 1731963042.2459922 1731963043.3076453 1731963047.4277034 1731963050.4457273 1731963051.789089 1731963059.3552227 1731963066.1642108 1731963898.3942215 1731963899.426723 1731963902.774446 1731963908.7706244 1731963913.0985982 1731963916.1861327 1731963930.2955592 1731965728.4651444 1731965729.8994205 1731965734.3784678 1731965735.846021 1731965741.7106583 1731965743.9287534 1731965753.8558125 1731965761.6160433 1731965769.8767486 1731997802.2921572 1731997810.3072803 1731997821.0103588 1731997823.6369407 1731997842.411579 1732005461.3886943 1732005463.7190425 1732005471.0041788 1732005474.6214101 1732005485.6469896 1732005499.9193833 1732008487.1600018 1732008491.797435 1732008494.5423522 1732008502.4767828 1732008514.2675614 1732008528.0170114 1732031510.4307609 1732031512.470964 1732031513.5795474 1732031515.2409818 1732031523.700186 1732031555.7789493 1732031561.1792595 1732031575.9569871 1732031604.1394897 1732031631.6602669 1732033181.5732715 1732033187.0737615 1732033188.6749732 1732033191.9551766 1732033194.1693351 1732033205.2199373 1732033222.024943 1732033223.8429763 1732041367.0638227 1732041374.360133 1732041375.0871248 1732041386.533412 1732041429.4158008 1732041455.4944332 1732041459.8669043 1732041465.4243455 1732041515.1712544 1732263466.6664398 1732263467.7951367 1732263471.1644146 1732263479.6797717 1732263480.2140698 1732263498.7567801 1732263522.56127 1732264323.2435894 1732288770.6208334 1732288780.6333094 1732288792.343384 1732288797.264224 1732288809.1924157 1732288813.6531975 1732288817.9377081 1732288820.9671955 1732288828.0163698 1732383770.9811113 1732383772.019344 1732383775.677074 1732383783.7112272 1732383785.2454233 1732383791.2049956 1732383804.3264155 1732383828.7691948 1732383855.2422316 1732384005.5223076 1732384006.78085 1732384009.1067138 1732384011.001988 1732384016.0497475 1732384029.856547 1732384038.54369 1732384056.9650784 1732433695.8831894 1732433732.9025521 1732433748.8732421 1732433783.7346292 1732441728.9562159 1732441754.4433556 1732441782.3504713 1732441805.516257 1732451639.3175128 1732451643.1642468 1732451645.2693274 1732451751.4095888 1732452561.6061358 1732452576.3843272 1732452603.0346284 1732452616.329989 1732453335.171801 1732453347.7624328 1732453388.8228903 1732453412.1198726 1732457617.6644711 1732457618.7323854 1732457625.315965 1732457629.101936 1732461125.5489106 1732461128.287391 1732461141.5258722 1732461147.4306962 1732467075.7547572 1732467084.6461084 1732467091.89446 1732467122.5807369 1732468773.0488203 1732468802.825153 1732468813.33293 1732469872.8794227 1732469876.575231 1732469902.8869994 1732469955.3939478 1732470377.6167781 1732470396.1452968 1732470423.8126786 1732470445.830942 1732470991.45309 1732470993.7259717 1732471013.3167658 1732471018.7096245 1732471036.7073948 1732471039.5707095 1732471044.3352518 1732471062.9311054 1732520037.0320818 1732520040.5129967 1732520042.1200364 1732520044.3863719 1732520044.986072 1732520057.2194798 1732520065.5948634 1732520087.8231437 1732520095.1079488 1732536734.1849625 1732536735.187456 1732536736.589417 1732536744.997573 1732536746.8804607 1732536754.527193 1732536760.801082 1732536778.5082223 1732536779.565857 1732553889.4913087 1732553891.8560991 1732553893.615305 1732553897.2921178 1732553899.525495 1732553901.1819782 1732553905.777386 1732553917.4970317 1732553923.9444463 1732562315.4978662 1732562315.966834 1732562318.6292334 1732562322.6073444 1732562327.6694388 1732562346.4216428 1732562356.2182302 1732562357.001847 1732593967.9975262 1732593968.631301 1732593969.3510222 1732593972.3546522 1732593977.7886488 1732593979.985906 1732594000.434706 1732594015.288365 1732594036.3076348 1732616945.9189374 1732616946.8032322 1732616950.1755753 1732616952.190844 1732616956.7188 1732616973.3852801 1732616981.3340652 1732617007.8578043 1732650478.146098 1732650478.8655012 1732650482.054069 1732650483.2019038 1732650491.7780273 1732650501.0392954 1732650504.1629848 1732650520.974529 1732719992.060976 1732719992.9039497 1732719993.6523044 1732719994.3609269 1732719997.193117 1732720008.3417926 1732720024.2752085 1732720025.8679025 1732720054.9436398 1732721005.8010385 1732721008.0343213 1732721010.1515133 1732721017.508236 1732721021.39178 1732721024.1566527 1732721030.3488595 1732721041.7503881 1732721047.331507 1732722433.5197935 1732722435.6278255 1732722439.5679765 1732722441.9508731 1732722446.9056737 1732722454.7095733 1732722468.0639024 1732722477.8043704 1732871671.3932276 1732871672.2253082 1732871678.2360198 1732871684.9135783 1732871686.3062546 1732871687.5788589 1732871689.2884448 1732871707.1721458 1732871713.4964151 1732871719.3099146 1732948701.823288 1732948705.645968 1732948712.4570334 1732948715.2281327 1732948716.8692715 1732948724.1452303 1732948740.629487 1732951478.1179664 1732951478.6306114 1732951481.6304414 1732951482.4399962 1732951490.939268 1732951498.3275948 1732958893.428547 1732958894.411381 1732958918.0187109 1732958927.3729992 1732959282.7071395 1732959313.630829 1732959320.7503846 1732959748.9811394 1732959770.8425634 1732960101.9984646 1732960107.534045 1732960138.5458903 1732960145.0319757 1732962593.7243786 1732962599.6971328 1732962601.0662632 1732962606.605405 1732962608.2602785 1732962610.6957266 1732962611.941968 1732962618.4101582 1732962624.4917603 1732962628.754138 1732970526.5556984 1732970538.7876263 1732970550.6137106 1732970566.5419803 1732970857.9357018 1732970861.2015047 1732970880.6689203 1732970901.5037766 1732975118.6913564 1732975121.714272 1732975124.1275043 1732975126.7590756 1732975127.902717 1732975136.1045487 1732975144.8489838 1732975152.0163014 1732975166.8195279 1732985289.0232406 1732985292.5707827 1732985298.2890525 1732985300.096001 1732985304.9423993 1732985310.3897424 1732985316.3400378 1732985320.7302096 1732985330.646815 1733080179.8714154 1733080182.2174754 1733080183.7056813 1733080187.129284 1733080187.6562762 1733080197.6049402 1733080206.2771382 1733080214.914623 1733080229.6740513 1733140064.208817 1733140065.2534864 1733140065.9737613 1733140069.2690368 1733140070.786767 1733140075.0304115 1733140081.696741 1733140093.7225945 1733140106.7209074 1733140109.0243447 1733143242.2514603 1733143248.2144585 1733143249.4314134 1733143251.6573458 1733143256.0222833 1733143259.6437476 1733143267.2247188 1733143270.0791595 1733143277.795833 1733143286.3701718 1733154982.5744405 1733154986.1220756 1733154987.259687 1733154991.008131 1733154991.8595552 1733154994.1339047 1733155010.4902403 1733155019.416577 1733155042.1721528 1733159155.4314275 1733159167.030669 1733159168.4029393 1733159174.167873 1733159175.1603377 1733159202.731806 1733159210.605375 1733168522.0316908 1733168526.638999 1733168531.6582913 1733168532.5080645 1733168535.4875433 1733168544.9785478 1733168548.9552453 1733168573.5332053 1733169970.4149306 1733169971.7890635 1733169987.607266 1733169988.9386342 1733169990.5251367 1733169992.666319 1733169994.047022 1733169995.7627249 1733170009.7685456 1733170462.0889544 1733170463.9820032 1733170467.044954 1733170471.9154284 1733170480.642101 1733170481.885501 1733170496.5555415 1733170505.309697 1733219253.6427739 1733219256.7237084 1733219261.192824 1733219266.133451 1733219268.4844553 1733219269.1851923 1733219289.6428618 1733219294.3419852 1733219300.7973099 1733219630.9789228 1733219631.5469549 1733219633.5728836 1733219637.2201772 1733219639.1018076 1733219646.767386 1733219660.574712 1733219675.677772 1733219687.30307 1733224231.4707232 1733224232.3889892 1733224234.342062 1733224235.8343258 1733224237.4398193 1733224245.0629716 1733224257.4724257 1733224266.3068144 1733224271.8994398 1733227582.8463392 1733227583.5131407 1733227585.0287392 1733227592.584582 1733227604.602964 1733227610.088609 1733227628.302275 1733227641.8276615 1733228864.4773238 1733228866.74998 1733228869.8279743 1733228872.190608 1733228874.8892612 1733228884.3857858 1733228887.3335903 1733228897.1727421 1733228971.4516807 1733229786.021049 1733229786.66641 1733229790.7480805 1733229799.2262502 1733229802.0443177 1733229804.4731007 1733229811.4373858 1733229813.377825 1733229826.7686434 1733229853.3298552 1733234293.688889 1733234301.798663 1733234304.4010224 1733234305.4084508 1733234306.1285028 1733234308.6419322 1733234314.0123327 1733234319.1362226 1733234340.7632995 1733234876.684493 1733234879.0027857 1733234882.3916202 1733234883.6695943 1733234889.1685822 1733234891.9050684 1733234908.3120115 1733234936.354204 1733234938.8755677 1733238720.608564 1733238726.1778567 1733238730.278317 1733238734.962571 1733238753.1915474 1733238766.1926172 1733238990.5689092 1733238992.9023156 1733239002.4197814 1733239009.9664338 1733239013.7127926 1733239015.8269987 1733239041.6941237 1733239048.5333445 1733240946.6946738 1733240948.684239 1733240949.858537 1733240951.7910414 1733240966.3996506 1733240982.7181993 1733240983.687201 1733240986.7007341 1733242288.9102626 1733242291.8940446 1733242293.693395 1733242298.4761782 1733242306.8164103 1733242311.8970075 1733242318.5424666 1733242336.828924 1733255433.1931605 1733255633.6699867 1733255653.0470135 1733255663.1899922 1733271568.5178902 1733293035.286282 1733293038.8491454 1733293062.8098772 1733293075.5979953 1733306785.4062219 1733306788.1839104 1733306795.809741 1733306798.033864 1733306810.0447462 1733306819.5070994 1733306821.8249385 1733306845.3565247 1733308871.4943094 1733308873.2617729 1733308879.7920218 1733308880.398352 1733308899.693787 1733308903.4764695 1733308904.7923117 1733309390.7614777 1733309395.251379 1733309398.2893078 1733309402.5071542 1733309406.6513014 1733309412.9853697 1733309419.4013913 1733309444.7180636 1733314049.608768 1733314050.8355372 1733314055.470318 1733314072.3486557 1733314098.261678 1733315374.4849255 1733315406.3125675 1733315453.007395 1733322553.0044217 1733322556.9803238 1733322563.83114 1733322576.0566854 1733322596.9634542 1733322598.1692662 1733322768.862828 1733322773.8497927 1733322776.958355 1733322777.9852057 1733322779.067944 1733322785.3724024 1733322790.6682105 1733322802.9243758 1733322827.531432 1733333193.2300014 1733333198.3919308 1733333200.4507997 1733333212.6177614 1733333215.9385328 1733333235.194576 1733333238.831189 1733338333.5444129 1733338335.7633626 1733338346.8919969 1733338361.1912727 1733338380.2940402 1733339052.9226713 1733339057.1518238 1733339057.6057532 1733339061.192743 1733339068.2405028 1733339079.9187348 1733339084.0606103 1733380420.0212486 1733380421.606655 1733380425.2091165 1733380426.0167086 1733380432.8284676 1733380436.2047918 1733380446.2166383 1733380451.8656907 1733380463.5257213 1733384979.0359178 1733384981.606588 1733384985.539735 1733384992.5014267 1733384998.4741216 1733385006.1097124 1733385011.9194536 1733390811.420039 1733390812.1788619 1733390818.8177466 1733390833.786025 1733390835.3938174 1733390838.1063056 1733390844.777927 1733396841.614761 1733396848.0114086 1733396850.8401172 1733396852.8094835 1733396860.2416327 1733396863.0192623 1733396871.7705586 1733396914.0040936 1733401219.1505253 1733401220.0574515 1733401225.063062 1733401226.787789 1733401232.2275171 1733401245.996172 1733401277.5867527 1733449646.5339172 1733449653.2777321 1733449655.3623538 1733449657.6258104 1733449658.5671172 1733449659.9490492 1733449666.6821601 1733449674.7923486 1733449691.2928286 1733494747.931788 1733494753.0851731 1733494757.7123055 1733494758.2674625 1733494762.5787327 1733494782.7055457 1733494783.6043348 1733494789.1412604 1733495742.2988338 1733495743.761341 1733495744.4240904 1733495747.9927275 1733495763.3438127 1733495766.8898356 1733495787.6293023 1733495792.2613227 1733499449.4758797 1733499456.7387803 1733499457.9393198 1733499459.3670979 1733499463.4222405 1733499474.702234 1733499476.049058 1733499483.5740209 1733499498.3721578 1733502662.0274692 1733502663.8277683 1733502665.095098 1733502672.2443776 1733502677.5460172 1733502690.7745686 1733502694.9604292 1733502708.0412395 1733505470.201204 1733505472.1913333 1733505473.263023 1733505476.0696583 1733505482.4900954 1733505487.4447098 1733505505.671235 1733505517.676156 1733505733.499319 1733505734.095049 1733505735.8226748 1733505740.2475958 1733505748.0329335 1733505761.4851673 1733505794.7748582 1733506113.984502 1733506122.9218292 1733506123.361182 1733506123.9724724 1733506128.3213918 1733506138.5410657 1733506143.387333 1733506151.5541925 1733557537.7647562 1733557539.9018676 1733557544.0487056 1733557550.7210174 1733557558.1248958 1733557559.7645786 1733557564.649211 1733557567.2888486 1733565406.164843 1733565406.9513352 1733565418.972544 1733565423.6188152 1733565432.9495125 1733565439.746262 1733567442.0237205 1733567446.3039818 1733567447.3340971 1733567459.8344622 1733567460.4285808 1733567462.8390877 1733567473.067186 1733567935.1028788 1733567938.1556034 1733567940.3346186 1733567950.854293 1733567960.1414592 1733567960.701589 1733567969.7438977 1733567972.6006207 1733570469.411528 1733570470.6235194 1733570471.3499756 1733570472.2118711 1733570474.2138884 1733570485.6307247 1733570492.1640036 1733570493.0946727 1733570511.4052603 1733571081.2802474 1733571083.6984477 1733571084.258744 1733571100.301063 1733571107.8362153 1733571113.5683346 1733571117.6746516 1733585231.6380436 1733585234.323886 1733585236.852115 1733585237.8098404 1733585241.079353 1733585244.1001995 1733585251.813903 1733585259.0539622 1733585263.1471586 1733585750.7919397 1733585756.250291 1733585766.299205 1733585768.5369081 1733585774.1288636 1733585790.8809888 1733585793.410951 1733595927.1657395 1733595931.978675 1733595933.186769 1733595933.7419264 1733595935.2153459 1733595937.777819 1733595948.0802283 1733595961.6471128 1733595996.1958773 1733643664.802906 1733643666.9933524 1733643676.61076 1733643678.5545428 1733643679.6358993 1733643681.6312675 1733643686.9804542 1733643729.4601016 1733643739.8072762 1733650787.7630966 1733650790.2734067 1733650798.6556857 1733650809.237082 1733650810.5124211 1733650837.7441363 1733650867.9347098 1733650874.5275176 1733653494.9788938 1733653495.7485487 1733653496.8101516 1733653508.7553625 1733653509.3915036 1733653519.4390192 1733653534.3760762 1733653537.5714998 1733656739.7554934 1733656740.9948246 1733656745.699247 1733656755.4289315 1733656760.9822845 1733656761.6517587 1733656764.7476268 1733656766.3896408 1733658253.7502165 1733658254.63226 1733658255.2004552 1733658272.5413344 1733658279.3151307 1733658284.36497 1733658290.7471957 1733658918.9721398 1733658920.3418303 1733658925.7979481 1733658940.7062976 1733658948.3468363 1733658956.1735587 1733658970.5708482 1733661213.063345 1733661216.4161725 1733661216.90439 1733661220.4818115 1733661221.8897872 1733661227.467153 1733661233.9002542 1733661235.2784066 1733661242.5368476 1733672735.1560616 1733672737.0928104 1733672741.9912848 1733672744.640307 1733672746.223438 1733672747.8502743 1733672762.349206 1733672764.4948823 1733672769.2089665 1733673042.7114322 1733673048.5305562 1733673050.175404 1733673051.0693357 1733673062.6022651 1733673075.8755403 1733673080.5610647 1733673105.5424361 1733677623.205507 1733677624.1413872 1733677625.5410368 1733677630.676029 1733677641.258817 1733677644.0154574 1733677670.450337 1733677697.539429 1733677706.220611 1733732917.729072 1733732922.778485 1733732924.1954682 1733732925.1251035 1733732939.5123525 1733732943.796028 1733732977.3228796 1733739732.753779 1733739737.683406 1733739741.5038257 1733739743.8315432 1733739758.1880817 1733739770.6115084 1733739789.3433433 1733739808.6955342 1733739812.6888 1733740512.385763 1733740513.2260416 1733740515.098953 1733740523.913746 1733740525.3611784 1733740526.5216775 1733740544.2393446 1733740547.1774135 1733740555.3291698 1733743804.4463463 1733743807.3536985 1733743809.70843 1733743810.3246124 1733743817.6777225 1733743823.017097 1733743839.215962 1733743842.400228 1733743867.113646 1733746817.5787003 1733746818.3561563 1733746827.4099703 1733746831.6853008 1733746847.3427215 1733746849.3852785 1733746903.903557 1733748596.8917224 1733748597.7761698 1733748602.9008763 1733748605.3872135 1733748615.1536703 1733748620.2708554 1733748629.0212128 1733748652.1510158 1733761260.5527625 1733761261.838159 1733761264.4923453 1733761269.7144816 1733761275.7195458 1733761291.0287778 1733761295.432108 1733761316.7537513 1733761804.904209 1733761808.0875254 1733761810.4236267 1733761812.4223142 1733761823.0650399 1733761827.1908689 1733761837.127467 1733761841.3615758 1733761866.1509743 1733762264.8901064 1733762265.9916751 1733762267.266812 1733762271.8752313 1733762272.5526114 1733762280.5551348 1733762288.5907092 1733762294.4682882 1733762324.5145082 1733797678.9547925 1733797680.3043654 1733797686.3321779 1733797693.5512068 1733797703.2558506 1733797707.1447423 1733797708.8686543 1733822509.377478 1733822510.2404916 1733822520.1245093 1733822524.2725966 1733822524.995237 1733822532.6738303 1733822540.19579 1733822555.0441415 1733823236.1631703 1733823239.772133 1733823240.5919967 1733823242.2522368 1733823244.2788386 1733823252.2633336 1733823262.5869706 1733823264.0098014 1733823280.2782557 1733827759.2170558 1733827761.83209 1733827767.0119371 1733827767.9738233 1733827773.2282934 1733827791.2194312 1733827791.7680264 1733827797.6309197 1733832972.2255442 1733832973.1952362 1733832975.952454 1733832995.9818823 1733833000.4753177 1733833002.799605 1733833036.6471875 1733834737.8805032 1733834740.0520172 1733834743.88104 1733834748.1553388 1733834752.4233265 1733834769.8890462 1733834772.4007912 1733834798.1576154 1733836074.259244 1733836077.7049952 1733836083.0826397 1733836084.2656305 1733836088.6810768 1733836102.482965 1733836113.1277158 1733836132.5725064 1733836496.3533037 1733836498.3189676 1733836499.0263884 1733836502.0276124 1733836514.4971824 1733836522.197993 1733836525.4895005 1733836546.553581 1733905764.6046803 1733905768.2721238 1733905769.7859128 1733905775.6284866 1733905777.6412177 1733905789.8565626 1733905797.3834574 1733905812.554496 1733908927.7658398 1733908931.5025 1733908934.0517693 1733908940.4066727 1733908952.016059 1733908964.3180888 1733908989.1316671 1733908993.2989984 1733909288.657325 1733909290.8760068 1733909293.3179958 1733909293.7696488 1733909307.5138328 1733909313.9445667 1733909328.9396684 1733909330.359382 1733909336.699531 1733909902.4304671 1733909904.6518452 1733909910.477193 1733909924.9769745 1733909932.6229227 1733909938.500676 1733909946.0414634 1734006504.1333292 1734006509.8071592 1734006512.048598 1734006517.1330192 1734006518.812081 1734006533.7427895 1734006547.1742134 1734006555.7657967 1734015726.2168474 1734015726.9747858 1734015732.3542402 1734015740.220944 1734015759.9980555 1734015764.1156278 1734015784.5271907 1734027101.1632953 1734027102.2415211 1734027104.4368935 1734027105.446029 1734027107.0598297 1734027117.1169271 1734027128.1979995 1734027139.2692516 1734027140.5368311 1734088774.0993812 1734088777.1879537 1734088777.714932 1734088780.891004 1734088781.4808877 1734088789.5336397 1734088804.045803 1734088816.0933163 1734093159.558811 1734093160.9894395 1734093162.3781676 1734093170.8064487 1734093174.7633927 1734093183.86795 1734093188.411972 1734093196.76535 1734172341.7707095 1734172342.4083743 1734172343.168821 1734172350.172758 1734172356.9757605 1734172363.7750375 1734172388.8443363 1734172416.3446264 1734172430.83665 1734175097.5265257 1734175099.85371 1734175101.877565 1734175104.969263 1734175112.7166493 1734175119.9440668 1734175121.150225 1734175126.1709414 1734177108.2648222 1734177109.5323458 1734177110.9781883 1734177112.6747355 1734177117.3391833 1734177121.0887563 1734177131.8735366 1734177137.6291678 1734177141.3786077 1734199035.8221405 1734199037.481856 1734199038.004862 1734199039.968881 1734199045.415362 1734199064.914838 1734199067.2668197 1734199069.0058367 1734262028.6908529 1734262029.307968 1734262035.2942023 1734262039.4181511 1734262040.3107548 1734262040.8191369 1734262054.9778004 1734262059.1196017 1734262065.9713304 1734264058.8774114 1734264062.150621 1734264063.0401947 1734264065.8985987 1734264074.2219696 1734264081.5155044 1734264092.787558 1734264146.2914078 1734268844.9836473 1734268846.3901615 1734268846.9945705 1734268847.7356365 1734268849.5164173 1734268860.365839 1734268868.1805236 1734268870.3608446 1734268876.3276196 1734269281.15436 1734269287.1708488 1734269288.8807511 1734269289.7311661 1734269293.4040473 1734269296.2506533 1734269304.7172859 1734269325.7669764 1734269329.419911 1734271395.6991515 1734271396.6889472 1734271397.880067 1734271402.6827838 1734271403.8652008 1734271413.4226174 1734271423.0080652 1734271425.488706 1734271427.6578972 1734351688.058646 1734351689.6575918 1734351694.9861565 1734351698.0319583 1734351701.5358753 1734351722.3482032 1734351726.086569 1734351741.6723933 1734367468.4239993 1734367473.1290283 1734367474.3041587 1734367476.32963 1734367487.2137127 1734367493.396583 1734367508.0347528 1734367572.7470653 1734438290.7985852 1734438292.2057211 1734438294.82526 1734438297.8977218 1734438303.43967 1734438311.3271127 1734438323.1823792 1734438391.312719 1734438990.0230591 1734438991.4290752 1734438992.3159082 1734438997.0685658 1734439000.9377115 1734439003.5536366 1734439013.0345373 1734439022.8144507 1734439041.4531271 1734610935.5402877 1734610936.018706 1734610936.7709029 1734610938.0711465 1734610940.2272396 1734610948.181996 1734610963.6168685 1734610969.7630963 1734610976.624657 1734693435.791713 1734693437.9342422 1734693442.8375373 1734693446.8058383 1734693450.5835466 1734693459.3054142 1734693466.8991237 1734693469.2940693 1734693471.3070602 1734969779.4377246 1734969780.6083114 1734969783.713666 1734969790.1905634 1734969798.3195398 1734969803.4121616 1734969810.2726023 1734969815.611365 1734969818.2863302 1735215538.1666918 1735215538.5484898 1735215543.1818237 1735215547.2899783 1735215557.8561838 1735215568.1153088 1735215569.912203 1735215597.7214365 1735298753.3061194 1735298755.0128474 1735298758.4833825 1735298765.6748583 1735298770.1487741 1735298779.8815114 1735298806.5731514 1735298841.728858 1735300814.2834265 1735300815.2847862 1735300820.9974098 1735300823.9439876 1735300829.0210621 1735300837.9418302 1735300848.477985 1735300851.946753 1735508397.0287507 1735508398.5288246 1735508399.4302917 1735508403.8215485 1735508405.3892164 1735508410.275628 1735508424.4502141 1735508431.1793299 1735508468.0790179 1735579413.8945177 1735579414.414634 1735579416.8128467 1735579418.6358535 1735579420.7884207 1735579433.5342782 1735579440.9099731 1735579451.8205795 1735579459.6753137 1735619086.9711988 1735619087.409217 1735619087.9281003 1735619095.159358 1735619099.3349144 1735619101.4988656 1735619112.587005 1735619119.9110858 1735619127.832429 1735711857.8234038 1735711859.564477 1735711862.3517983 1735711863.3506043 1735711872.5843375 1735711873.9384556 1735711892.2770236 1735711935.7533352 1735711956.2635896 1735752840.1028368 1735752843.3724842 1735752843.761337 1735752844.8144312 1735752851.5520108 1735752857.523881 1735752861.484574 1735752869.4489007 1735752870.265695 1735816433.6132152 1735816435.809237 1735816437.337141 1735816442.6280434 1735816454.9639046 1735816459.1432912 1735816462.9862452 1735816467.2984185 1735820518.8371863 1735820520.5738156 1735820522.8006866 1735820529.5624504 1735820530.426708 1735820536.6808848 1735820548.6727474 1735820550.8155315 1735820552.770849 1735905730.1280572 1735905731.5647476 1735905733.118345 1735905734.0669265 1735905734.694602 1735905748.389628 1735905754.5810616 1735905758.8846927 1735905761.8809183 1735920210.2677524 1735920212.436216 1735920213.7218347 1735920219.1996355 1735920226.1635919 1735920241.4036157 1735920241.7497404 1735920250.0450702 1735922820.4782093 1735922821.1348338 1735922822.7804573 1735922835.6868227 1735922981.6318777 1735922985.1768062 1735922989.272801 1735922995.7330163 1735923003.3491628 1735923004.6397786 1735923020.1836908 1735985905.5444398 1735985916.0105693 1735985919.6104634 1735985919.9892411 1735985937.6283722 1735985958.222152 1735986005.935107 1735986021.704869 1735987092.3328984 1735987093.8391883 1735987095.3711596 1735987103.9556334 1735987104.5368266 1735987106.7685935 1735987116.1892285 1735987124.2150946 1735987126.3644824 1735997735.301569 1735997736.5944946 1735997740.4465046 1735997742.8420439 1735997745.0824842 1735997746.6846266 1735997762.8327234 1735997764.1441154 1735997770.4355567 1735999881.9054108 1735999882.537724 1735999885.4977186 1735999886.93881 1735999890.086601 1735999892.2900712 1735999902.443185 1735999913.3734689 1735999914.6378303 1736005021.269936 1736005026.0950496 1736005026.5565746 1736005028.5512946 1736005034.295627 1736005046.0001605 1736005054.8968458 1736005057.636277 1736091843.3751974 1736091844.0270586 1736091855.4683526 1736091857.5741239 1736091923.0427983 1736091924.572181 1736091940.7193031 1736091978.6729257 1736094594.3971121 1736094597.1088984 1736094598.9986238 1736094600.458892 1736094603.2124414 1736094608.6036782 1736094622.655662 1736094631.1214418 1736094649.4742968 1736095641.5843077 1736095646.6030598 1736095659.935441 1736095673.4031339 1736095675.767698 1736096674.6084228 1736096675.5232391 1736096676.2434072 1736096678.1660178 1736096686.8612764 1736096695.1379368 1736096698.5002198 1736096708.280524 1736158560.5399482 1736158561.9534502 1736158563.4882185 1736158564.7752595 1736158574.529928 1736158588.3760154 1736158615.945422 1736158629.2041485 1736158653.2757142 1736165960.2888427 1736165966.1696758 1736165968.4497535 1736165969.0200455 1736165981.8632822 1736165998.8243723 1736166001.2628193 1736166008.3271723 1736240676.5533333 1736240681.200234 1736240686.528377 1736240687.5252 1736240689.8596854 1736240700.8519623 1736240714.9799516 1736240720.5002007 1736259527.365497 1736259536.772254 1736259578.5615714 1736259682.986006 1736260613.78191 1736260615.0057075 1736260618.4702165 1736260622.4034257 1736260624.3663952 1736260635.4417725 1736260639.6916158 1736260642.856217 1736441675.4581223 1736441679.9146483 1736441683.5242102 1736441690.9802032 1736441694.5142927 1736441719.6086934 1736441732.7007813 1736441754.46947 1736441886.5042713 1736441887.8903387 1736441890.8630843 1736441891.7496033 1736441901.1597342 1736441911.8327436 1736441921.6508195 1736441929.3110847 1737053060.7107148 1737053061.7079356 1737053064.9652221 1737053068.0993688 1737053069.2623348 1737053085.2016392 1737053090.228786 1737053098.1883311 1737053100.9433181 1737218159.9871378 1737218160.8943348 1737218173.5094814 1737218175.3223531 1737218175.7673883 1737218206.747201 1737218214.572571 1737218236.5821056 1737218253.0675943 1737281149.6906452 1737281151.7767713 1737281158.6541772 1737281161.3245492 1737281171.5785894 1737281181.0609574 1737281183.4652088 1737634751.2807136 1737634757.2278888 1737634761.4429455 1737634766.177611 1737634770.9341338 1737634780.3815856 1737634781.078672 1737634808.1874688 1737634830.808764 1737980365.2704349 1737980366.532835 1737980372.7169843 1737980378.6984127 1737980392.7996438 1737980402.1677213 1737980408.840801 1738176385.9614975 1738176387.5311823 1738176389.7672567 1738176395.7514846 1738176399.232108 1738176413.4351516 1738176432.6113453 1738176435.5840304 1738307106.897794 1738307110.556664 1738307112.859659 1738307118.9154048 1738307126.0298553 1738307130.3858697 1738307145.7877836 1738307150.676601 1738509315.7534444 1738509317.248571 1738509320.8597095 1738509325.4734414 1738509326.7232912 1738509336.0920534 1738509348.1706765 1738509357.7451594 1738510960.97414 1738510966.4917815 1738510967.4010441 1738510971.0032785 1738510975.2703307 1738510991.4107807 1738511006.686129 1738511007.4859824 1738511557.295736 1738511559.0962 1738511560.9264438 1738511566.4940279 1738511571.443775 1738511573.2373033 1738511580.1756394 1738511592.6698241 1738514823.3109682 1738514824.2517784 1738514825.514968 1738514826.179941 1738514830.463543 1738514836.9260972 1738514850.069192 1738514850.981052 1738514877.4470348 1738563652.295612 1738563653.7358687 1738563661.408399 1738563662.226456 1738563667.1011114 1738563669.3023953 1738563678.3859153 1738563691.8069675 1738563729.4151654 1738585091.3736339 1738585092.5167472 1738585095.8209786 1738585097.641139 1738585107.9601016 1738585110.2047687 1738585113.6362388 1738585121.1674669 1738585175.540115 1738805903.3422842 1738805908.6929772 1738805909.751889 1738805911.667848 1738805919.6154075 1738805933.1037781 1738805936.0323374 1738805938.619792 1739190245.1729622 1739190275.102606 1739190359.784534 1739190366.8907857 1739190382.5055847 1739190416.8249395 1739190450.1152332 1739190482.7457755 1739725878.7171612 1739725883.8818684 1739725891.685329 1739725892.68016 1739725936.528464 1739725943.7014942 1739725970.0041378 1739725977.2309911 1739794871.4846091 1739794875.9820058 1739794876.688585 1739794880.338071 1739794891.5054476 1739794902.4280593 1739794925.2632608 1739794932.1904132 1739988426.6435232 1739988427.7066967 1739988430.0451086 1739988434.0439842 1739988441.0419397 1739988441.7888176 1739988456.312907 1739988461.2888188 1739988487.343532 1740054285.1691186 1740054286.3942266 1740054292.37818 1740054295.811164 1740054308.0411217 1740054312.4567688 1740054322.6335552 1740054333.4984338 1740079286.440632 1740079288.2980962 1740079289.982014 1740079302.4534955 1740079334.7564526 1740079355.0628817 1740079360.4295704 1740079381.8605378 1740157548.6281772 1740157553.7571568 1740157554.7670753 1740157557.3696394 1740157558.3090923 1740157564.9541898 1740157575.4727216 1740157591.5358796 1740157659.8851328 1740220077.4754336 1740220087.2189336 1740220091.073763 1740220094.516704 1740220098.0173957 1740220101.9434617 1740220111.7498071 1740220116.2820933 1740220121.0643718 1740245083.9737985 1740245090.3478086 1740245090.8755617 1740245092.7752793 1740245098.5716355 1740245107.3766751 1740245111.6379035 1740245121.6337688 1740306828.5973806 1740306834.7376788 1740306845.121794 1740306867.0319235 1740306872.6905491 1740306913.480411 1740306920.1069384 1740399729.9223397 1740399825.766838 1740399827.3049707 1740399830.2140074 1740399840.8109517 1740399845.9939446 1740399865.9941838 1740399874.3998785 1740399909.2752402 1740482110.7903411 1740482112.6169007 1740482113.9752886 1740482115.2887034 1740482116.3916032 1740482121.1089497 1740482137.4481843 1740482154.288911 1740482169.020022 1740662877.656166 1740662883.3141673 1740662884.0697079 1740662887.5417233 1740662943.9152436 1740662951.775909 1740662962.4440465 1740663000.0761418 1740698034.6122122 1740698039.362832 1740698040.584123 1740698041.3482378 1740698043.0440652 1740698044.8144715 1740698062.7515821 1740698072.4950461 1740698077.9344592 1740719912.2369485 1740719913.802656 1740719921.609393 1740719922.6849043 1740719923.830786 1740719932.330509 1740719944.6747625 1740719945.5915139 1740758862.4804335 1740758864.3160887 1740758873.1681957 1740758875.706354 1740758876.702129 1740758911.9918113 1740758929.7068546 1740758947.6397083 1740758955.9092875 1740829320.9958465 1740829323.5461824 1740829326.3017564 1740829327.2471852 1740829343.458982 1740829351.5309384 1740829355.2095764 1740830092.8333147 1740830098.5127282 1740830101.1660757 1740830102.6165016 1740830105.7693543 1740830109.3415632 1740830115.824294 1740830122.818993 1740830132.8016496 1740834891.5516295 1740834892.54687 1740834898.2090986 1740834901.943733 1740834906.881616 1740834923.5885248 1740834924.5466075 1740834965.8267653 1740835506.9199913 1740835511.1185188 1740835515.1694639 1740835518.1965115 1740835519.4156275 1740835545.7867088 1740835548.0261815 1740835571.3404436 1740846718.6309428 1740846719.2229779 1740846720.9839458 1740846724.331695 1740846731.2153864 1740846745.9712794 1740846746.6058896 1740846753.5852516 1740851654.8073878 1740851657.1226265 1740851659.0984578 1740851662.5845704 1740851679.0356247 1740851686.6202796 1740853131.9662952 1740853135.2259994 1740853140.0243337 1740853141.5544727 1740853142.5853932 1740853151.5907438 1740853161.4089994 1740853179.152378 1740853234.7913692 1740909590.7676952 1740909593.4394844 1740909594.1006145 1740909600.1618545 1740909605.5640283 1740909627.5641062 1740909629.763059 1740909638.391702 1741538002.746394 1741538004.5974147 1741538007.1031163 1741538011.1803036 1741538022.5535285 1741538023.2208674 1741538035.1005435 1741538037.6209497 1741538053.6795459 1741540241.5225925 1741540243.0384476 1741540243.7290587 1741540248.8801308 1741540250.8812892 1741540255.0324414 1741540275.3322263 1741540278.8879032 1741540279.8883533 1742736926.4213793 1742736929.0452437 1742736929.9147203 1742736941.0108812 1742736943.6206505 1742736953.7565837 1742736955.0753472 1742817897.1766253 1742817906.055439 1742817908.110843 1742817925.20516 1742817931.6035576 1742817933.6209328 1742817941.782805 1742817949.0679486 1742817976.523266 1742820762.8189282 1742820767.58487 1742820769.723738 1742820779.3241792 1742820808.8599684 1742820809.7592335 1742820868.020134 1742833599.6929293 1742833600.6258411 1742833605.432312 1742833606.0664065 1742833609.8345032 1742833621.3044624 1742833629.688015 1742833634.2095566 1742833685.3454952 1742836321.144967 1742836329.1386688 1742836330.3600333 1742836333.159632 1742836336.205278 1742836340.7387507 1742836348.8935614 1742836371.8875759 1742836403.011777 1743006400.4382706 1743006402.8110816 1743006406.0368016 1743006408.5252998 1743006422.3414671 1743006436.7540543 1743006441.0074162 1743006507.553623 1743348894.2369478 1743348901.5321884 1743348903.3034456 1743348912.1285534 1743348913.6900957 1743348919.0135596 1743348934.7863953 1743348939.0275247 1743704487.3344524 1743704488.7368083 1743704493.066661 1743704502.7999954 1743704508.704604 1743704526.4536037 1743704540.3676257 1743704595.6681256 1744540076.4937 1744540077.7716103 1744540080.2340953 1744540087.4633138 1744540090.1468627 1744540090.9323301 1744540104.043849 1744540105.8583179 1744540113.6994038 1744540979.8903549 1744540981.2079186 1744540983.7677922 1744540989.2262633 1744541006.268343 1744541009.6697378 1744541010.7569468 1744542352.2102094 1744542354.7567139 1744542358.0040245 1744542358.6157143 1744542366.1230075 1744542381.9384413 1744542389.4165056 1744542397.4071445 1745173293.8249953 1745173294.6977684 1745173296.4183428 1745173299.7737727 1745173321.02643 1745173328.499534 1745238314.6789122 1745238315.1873124 1745238316.4272435 1745238323.9033215 1745238325.5795352 1745238328.3564548 1745238347.3873117 1745238371.5862057 1745238387.9306889 1745843070.958591 1745843075.5153403 1745843076.3962047 1745843077.0973387 1745843094.5423474 1745843118.8675365 1745843138.420316 1746226656.8705308 1746226657.815519 1746226659.102352 1746226663.2202785 1746226665.2551959 1746226674.0033555 1746226678.4311152 1746226696.077037 1746362184.0793815 1746362190.0461793 1746362191.708346 1746362195.0864835 1746362196.7399127 1746362201.1714997 1746362217.4062338 1746362226.1971035 1746362262.0417452 1746362599.2312064 1746362607.3190908 1746362617.876917 1746362619.045333 1746362649.466091 1746362658.9040372 1746363616.3271368 1746363619.165741 1746363621.2730448 1746363624.960459 1746363630.1416016 1746363642.0023985 1746363648.6735318 1746363701.3209887 1746367035.9069357 1746367040.6509783 1746367046.6282654 1746367051.5990014 1746367060.6876135 1746367064.021934 1746367074.9660578 1746371404.782657 1746371407.2207198 1746371412.0853345 1746371418.4139013 1746371423.897549 1746371428.9851322 1746371441.6439266 1746371486.6761787 1746447841.1483686 1746447845.21004 1746447850.4436421 1746447851.0021956 1746447852.2266257 1746447854.305104 1746447866.7331069 1746447877.529441 1746447904.8588624 1746970866.2850928 1746970871.4382925 1746970876.4223201 1746970877.5313618 1746970896.6955512 1746970907.5881906 1746970913.7251034 1746972125.4956772 1746972131.1131086 1746972134.1966543 1746972136.3567512 1746972140.2242782 1746972163.447233 1746972167.0903578 1746972172.4392664 1747052634.0867045 1747052637.9719176 1747052640.901573 1747052650.1282237 1747052650.804084 1747052656.5234401 1747052660.2318363 1747052672.2194757 1747052680.016201 1747494465.0081844 1747494465.7188168 1747494469.3196251 1747494477.337838 1747494486.9829397 1747494504.5049129 1747494544.0859094 1747494559.1372905 1747496024.7672715 1747496028.2004454 1747496030.561923 1747496032.7285593 1747496037.386692 1747496038.418993 1747496047.849549 1747496057.4868774 1747496135.6289368 1747560799.4387653 1747560800.5358477 1747560804.0414832 1747560806.5466936 1747560809.9259021 1747560811.1534076 1747560819.0543056 1747560829.0155323 1747560842.1566617 1747572646.5470788 1747572647.390134 1747572648.7524438 1747572652.7892008 1747572654.873262 1747572685.5694017 1747572695.3083656 1747572723.2853117 1747573964.4942021 1747573968.209933 1747573970.4658723 1747573971.2906015 1747573977.1336067 1747573984.4106464 1747573998.8427653 1747574004.6505325 1747574075.1307337 1747574305.2764027 1747574306.1658869 1747574311.2029257 1747574311.6356444 1747574321.143026 1747574323.3239775 1747574333.4431956 1747574354.3533092 1747574406.3318686 1747579511.5783572 1747579512.221208 1747579517.5236735 1747579519.637736 1747579524.4089606 1747579535.953931 1747579545.1393197 1747582487.1076038 1747582493.1306417 1747582493.8906002 1747582496.2982512 1747582519.7728572 1747582521.1929443 1747582651.9926095 1747582654.431721 1747582655.285922 1747582657.8852582 1747582686.572977 1747582696.4993298 1747582720.848927 1747663813.9657867 1747663814.9364848 1747663816.62631 1747663817.6334417 1747663818.8450267 1747663825.5548377 1747663846.4810712 1747663865.7397933 1747663890.7066286 1748067724.2420354 1748067729.804218 1748067745.057909 1748067754.8269758 1748067757.5958548 1748067758.5507638 1748070374.502674 1748070381.6441398 1748070383.3808093 1748070391.5950193 1748070416.2224102 1748070434.3698165 1748070435.555058 1748070436.6042447 1748070476.8085542 1748070496.1171339 1748084467.5058494 1748084468.2441168 1748084474.8024223 1748084477.277225 1748084481.1347795 1748084493.7509103 1748084495.9662008 1748084497.9603918 1748084510.263257 1748262319.461814 1748262326.0824232 1748262332.1754222 1748262336.183644 1748262343.4696805 1748262356.9252026 1748262360.7433844 1748262382.4167514 1748262387.204495 1748456951.5199213 1748456954.1033602 1748456961.047204 1748456962.36518 1748456965.1899178 1748456970.0175683 1748456981.9784403 1748456984.6797266 1748456990.9099953 1748457001.6800666 1748551688.3058105 1748551690.0631135 1748551693.6542091 1748551695.5739806 1748551704.4907575 1748551708.129478 1748551710.4948766 1748551720.0561225 1748551720.7178066 1748551734.3925445 1748687373.7607691 1748687380.5627248 1748687383.7903376 1748687386.032045 1748687394.5852222 1748687396.8480425 1748687398.276464 1748687402.4907308 1748687407.7660398 1748687418.5964398 1748697083.773052 1748697089.4772348 1748697092.8141148 1748697094.1940024 1748697094.9007196 1748697102.0838292 1748697132.8360145 1748697150.0251675 1748697187.1960125 1748702521.1370988 1748702531.4553287 1748702533.9648993 1748702538.197775 1748702544.2479873 1748702559.1965306 1748702563.5938144 1748702614.1509361 1748704845.2390134 1748704846.953144 1748704851.1478662 1748704852.389785 1748704858.6064208 1748704867.4006689 1748704880.0561786 1748704884.7375908 1748704907.1115549 1748704914.9893456 1748707249.4935129 1748707258.156049 1748707267.1819637 1748707278.0714958 1748707288.8793342 1748707295.7226372 1748707657.9277403 1748707665.0076687 1748707668.6328948 1748707670.4473636 1748707672.7199476 1748707676.2001882 1748707686.09082 1748707694.7650838 1748707696.7660286 1748707712.3426354 1748712594.9639416 1748712596.8361835 1748712597.2533367 1748712598.4701526 1748712639.9945111 1748712648.4648838 1748712666.6423347 1748712670.6976936 1748712683.751865 1748712694.838877 1748780697.1300132 1748780707.1812928 1748780710.8320565 1748780713.4933453 1748780714.5160713 1748780720.221217 1748780723.211522 1748780729.3108208 1748780734.3013072 1748780738.1098628 1748787367.9196851 1748787373.6341035 1748787374.8326871 1748787376.6386254 1748787378.22919 1748787393.1979444 1748787403.4755344 1748787413.9729302 1748787459.553451 1748871990.789132 1748871995.020706 1748871996.1685622 1748871999.473268 1748872000.461004 1748872018.3708444 1748872029.4726076 1748872043.0605848 1748872044.5643191 1748878636.3922968 1748878639.2287827 1748878640.8189514 1748878641.4030552 1748878648.2457068 1748878652.9519298 1748878667.3149946 1748878670.2457824 1748878706.71913 1748878718.4691658 1749098719.6553814 1749098720.7774096 1749098724.074082 1749098726.3920724 1749098748.0580766 1749098778.3085325 1749098912.5852885 1749098915.8331559 1749098918.0611174 1749098920.7714863 1749098922.0139832 1749098925.4494755 1749098942.071467 1749098942.7237644 1749098944.6195276 1749098952.1434 1749099136.3788838 1749099148.0185165 1749099148.6944551 1749099174.1283717 1749099194.9333398 1749099200.43662 1749099208.8724835 1749099231.0205483 1749099242.1005156 1749099248.5668106 1749126621.6487837 1749126623.688538 1749126627.3696332 1749126631.3988378 1749126638.2690864 1749126655.0908453 1749126659.7739618 1749126672.561119 1749126705.4273717 1749139750.3806634 1749139754.8162315 1749139755.6006756 1749139759.1034007 1749139760.887557 1749139779.7558067 1749139782.278983 1749139794.1488376 1749139827.5752163 1749205752.9047642 1749205758.0134082 1749205759.1623423 1749205773.9736311 1749205779.741236 1749205782.8816354 1749205792.9915836 1749205800.0576766 1749207436.9932654 1749207439.3376372 1749207442.0507126 1749207444.3223388 1749207450.0089462 1749207461.327043 1749207464.8948407 1749207466.3757741 1749207469.173337 1749207629.3760676 1749207631.3845394 1749207641.1218069 1749207644.51641 1749207650.1583064 1749207651.5605333 1749207652.81352 1749207659.088342 1749207660.1834414 1749207666.5334415 1749218815.2893264 1749218816.950752 1749218818.3285556 1749218822.7867248 1749218830.0134652 1749218850.0837555 1749218853.1024146 1749218874.1123745 1749218877.6380124 1749271867.1203532 1749271875.1028454 1749271875.563298 1749271877.454733 1749271880.210177 1749271892.7287812 1749271895.330672 1749271897.2302961 1749271907.042344 1749280038.2102046 1749280039.1501412 1749280042.1373932 1749280057.7576523 1749280085.8312287 1749280088.9918113 1749280100.0247335 1749280122.1361923 1749280151.82418 1749280164.4802487 1749295833.2289293 1749295838.1579623 1749295839.2984896 1749295843.2131975 1749295843.7777479 1749295845.2553825 1749295846.4326391 1749295854.436964 1749295860.3326712 1749295864.1298404 1749309368.4493246 1749309381.3636708 1749309383.1646597 1749309384.0942638 1749309387.6640103 1749309389.23439 1749309399.0786464 1749309401.8483248 1749309405.5220308 1749309449.2977185 1749310907.467713 1749310909.3287082 1749310916.5364704 1749310917.7325003 1749310920.2343166 1749310933.2956555 1749310935.9080079 1749310938.7189498 1749310982.2758734 1749322674.1674924 1749322675.0894198 1749322677.0391877 1749322691.4998703 1749322697.4724205 1749322701.3889818 1749322712.1984563 1749322712.8898647 1749373634.7000587 1749373638.8944862 1749373640.2385037 1749373648.106886 1749373652.0485783 1749373660.711902 1749373676.109536 1749373681.8637192 1749373724.1735797 1749375217.2968209 1749375220.885726 1749375221.7534225 1749375227.9966497 1749375231.575274 1749375246.927451 1749375250.322288 1749375260.3010128 1749375431.9646034 1749375433.6707664 1749375447.2827883 1749375458.8470395 1749375465.1968532 1749375466.3214815 1749375474.8340738 1749390237.9649787 1749390241.9855897 1749390247.4103007 1749390250.009474 1749390253.2129986 1749390259.3222694 1749390273.1098864 1749390274.645784 1749390276.2960196 1749390334.5760574 1749392242.377895 1749392245.8439276 1749392247.4123716 1749392248.3556786 1749392252.8020425 1749392270.550798 1749392274.6797643 1749392279.2192132 1749392286.722365 1749411613.2145607 1749411614.732268 1749411621.26396 1749411625.9782994 1749411635.3499079 1749411641.017848 1749411642.6818094 1749411645.4244514 1749411651.7081828 1749413924.5660992 1749413925.2623918 1749413931.9420364 1749413937.1102436 1749413939.190069 1749413950.1087549 1749413950.858109 1749413955.1419845 1749413965.2417042 1749475183.4130828 1749475269.0891244 1749475280.846001 1749475300.9858892 1749475424.7997751 1749475439.293529 1749475443.358688 1749475545.3827717 1749475584.8560176 1749475599.222495 1749618634.866136 1749618635.7672427 1749618636.6498623 1749618637.9993894 1749618639.5859237 1749618655.1264527 1749618669.2126846 1749618675.6886957 1749618722.4055316 1749622725.3681571 1749623331.8992586 1749623338.5948672 1749624021.5295086 1749624027.1660826 1749624034.3393967 1749624059.3551826 1749624065.3029423 1749624089.2069666 1749624112.0961478 1749624156.4944594 1749627557.6170328 1749627563.7709548 1749627566.3929112 1749627599.0472715 1749627602.9159732 1749627603.3838735 1749627613.2461598 1749627645.581141 1749627661.1322215 1749631132.487801 1749631137.7846777 1749631139.412108 1749631142.746514 1749631146.1334321 1749631155.0891125 1749631161.494069 1749631166.674999 1749631176.7612834 1749631201.0510392 1749632884.8329377 1749632887.012211 1749632888.9150484 1749632893.6216717 1749632894.5124671 1749632896.1735542 1749632902.2687907 1749632921.3957534 1749632935.7908692 1749632951.6520977 1749633187.2506747 1749633190.3788958 1749633191.4032943 1749633195.3396616 1749633196.1310704 1749633197.259268 1749633216.1033268 1749633239.4701803 1749633312.8432822 1749633320.344461 1749634764.6499696 1749634767.173367 1749634771.523061 1749634773.3909554 1749634779.5950031 1749634781.118316 1749634787.29547 1749634805.5617473 1749634810.9764915 1749634814.2035315 1749640748.4963331 1749640749.7684474 1749640750.2619064 1749640754.7561483 1749640766.8769314 1749640790.1035645 1749640790.9451928 1749640801.2948 1749640805.6763635 1749655238.0478213 1749655247.8873465 1749655259.6407182 1749655286.745856 1749655303.6456158 1749655305.511278 1749655312.70322 1749655325.0117638 1749655398.9007478 1749712651.54721 1749712655.934081 1749712657.8582826 1749712661.6096082 1749712668.4279766 1749712680.4651814 1749712686.21438 1749712699.3320618 1749721830.855182 1749721834.6855922 1749721835.5651665 1749721836.6144137 1749721841.478143 1749721843.8823774 1749721855.1086738 1749721867.9388387 1749721875.0416765 1749721879.2328339 1749732133.6596942 1749732135.3497596 1749732141.655937 1749732144.1405883 1749732145.5692327 1749732158.3680172 1749732180.1515033 1749732183.9803326 1749736582.9264092 1749736585.354908 1749736587.0578477 1749736595.4875488 1749736597.2588503 1749736614.8722656 1749736616.2536585 1749736626.8954155 1749736644.5392482 1749736645.7009246 1749739531.1874294 1749739533.13513 1749739533.6555822 1749739535.965754 1749739537.7629826 1749739549.3384633 1749739563.0764222 1749739564.1078699 1749739579.6870344 1749739583.0480855 1749740339.83903 1749740342.3714132 1749740350.120534 1749740350.6521754 1749740352.1002567 1749740355.49081 1749740366.1328075 1749740375.3159406 1749740392.1473715 1749740471.082113 1749747046.3999448 1749747050.4988081 1749747051.2065408 1749747053.0657842 1749747073.8171906 1749747079.023346 1749747108.931413 1749747114.5529356 1749747126.137808 1749747129.3645394 1749748428.7751336 1749748429.2344713 1749748431.537067 1749748432.2051632 1749748434.882207 1749748456.9194813 1749748463.0082138 1749748490.8282359 1749748491.2097864 1749750799.0156703 1749750800.096002 1749750806.0923882 1749750810.6573071 1749750818.1064825 1749750820.5025675 1749750832.1615047 1749750840.0820537 1749750849.3169732 1749750880.6903806 1749752263.3721592 1749752269.0241702 1749752271.5187314 1749752272.3386934 1749752274.153682 1749752297.2797587 1749752308.4526787 1749752332.3235343 1749752373.8145905 1749811480.761157 1749811482.7338417 1749811484.0564961 1749811486.8999205 1749811487.9248195 1749811495.0833464 1749811507.1862533 1749811511.639231 1749811514.662488 1749811517.533321 1749812344.3792236 1749812350.206982 1749812351.204563 1749812352.4549727 1749812353.6899989 1749812366.166027 1749812373.4487863 1749812375.8403049 1749812380.6793523 1749812381.9697902 1749815170.9090002 1749815171.9317243 1749815174.630299 1749815175.2614148 1749815179.4528818 1749815187.344421 1749815196.1581042 1749815203.8359156 1749815206.6176918 1749815259.4852054 1749859758.6398895 1749859761.2934213 1749859763.734038 1749859767.986022 1749859775.409929 1749859776.3732328 1749859795.550158 1749859802.2851381 1749859805.429732 1749859832.0472 1749902075.1299372 1749902075.6157472 1749902076.5964658 1749902079.499213 1749902080.878528 1749902097.4279869 1749902101.63446 1749902107.435497 1749902112.4152546 1749904577.0686636 1749904583.3769503 1749904586.4636397 1749904589.030314 1749904591.9222016 1749904592.8966002 1749904612.8343856 1749904617.307598 1749904626.4113624 1749904662.8498883 1749912211.7811341 1749912214.2153661 1749912218.1345556 1749912219.715525 1749912223.5604692 1749912225.5720553 1749912240.9375608 1749912241.9256985 1749912291.2109222 1749912298.7625544 1750076546.501283 1750076550.6776783 1750076555.6073227 1750076556.5223265 1750076558.0226476 1750076562.8913903 1750076578.3625565 1750076588.2349954 1750076598.8494236 1750076666.8024526 1750112020.9380093 1750112029.2343192 1750112031.7011588 1750112032.4458618 1750112051.2178729 1750112057.2509675 1750112063.4932077 1750112085.0010915 1750112581.7224362 1750112703.9725606 1750112705.7631092 1750112735.3743072 1750112762.3768733 1750112787.421681 1750112792.8325596 1750112793.4704797 1750112807.3919795 1750112819.946196 1750113253.1045556 1750113253.899241 1750113258.1956327 1750113263.9384453 1750113267.0486717 1750113277.0779586 1750113279.327918 1750113283.3153214 1750113322.4880247 1750146864.5753095 1750146868.7486885 1750146872.6152499 1750146874.7673848 1750146893.0411189 1750146897.522212 1750146898.8933263 1750147032.4358764 1750147034.0832617 1750147035.2034974 1750147062.851591 1750147071.3774083 1750147082.1078281 1750147166.2895048 1750147201.5141869 1750147233.0696373 1750147257.1892726 1750147853.784512 1750147859.530698 1750147866.428959 1750147883.1651356 1750147887.1592982 1750147896.8126338 1750147911.3134596 1750147920.819351 1750200358.6303794 1750200360.5763211 1750200361.920015 1750200365.099988 1750200374.0899963 1750200382.0526805 1750200389.6803308 1750200395.137887 1750200395.946482 1750319130.497368 1750319132.5684865 1750319167.7384648 1750319174.36161 1750319198.0307698 1750319218.6176298 1750319238.455424 1750319245.6904848 1750319251.9066992 1750335677.7313075 1750335681.838659 1750335682.2718496 1750335683.2765782 1750335702.586242 1750335712.588418 1750335767.6190648 1750502963.2558582 1750502972.8640456 1750502977.842085 1750502980.354517 1750502983.038681 1750502985.054749 1750502988.6171334 1750502993.587592 1750502997.7213852 1750505662.371309 1750505673.4059393 1750505694.1069899 1750505694.99598 1750505699.495038 1750505700.1377063 1750505840.6451004 1750505842.494917 1750505847.6640582 1750505849.7305999 1750505851.670657 1750505854.782527 1750505863.8916667 1750505867.5244918 1750505876.7239835 1750505886.9933908 1750516320.2753 1750516323.3719172 1750516324.494533 1750516325.2255218 1750516331.5726774 1750516335.0856616 1750516348.0861354 1750516348.7241356 1750516353.4451141 1750516353.9589283 1750516620.4199061 1750516625.3062873 1750516626.4206717 1750516630.5137868 1750516631.5460155 1750516654.8093772 1750516661.3673344 1750516662.9118385 1750516685.066775 1750520688.892653 1750520691.3227167 1750520698.1969924 1750520701.2254708 1750520707.2675326 1750520714.714345 1750520722.506279 1750520779.4648824 1750591023.2526793 1750591029.7906947 1750591033.6760864 1750591038.2577965 1750591039.5859969 1750591041.75532 1750591046.325174 1750591053.242928 1750591055.9179752 1750591059.8156152 1750619759.270681 1750619760.5961554 1750619766.6795948 1750619768.1111012 1750619772.7757778 1750619775.6570215 1750619790.4443107 1750619794.4791846 1750619796.7462895 1750619850.7801914 1750620339.5018923 1750620345.732223 1750620355.8457134 1750620376.2872174 1750620412.3427517 1750620419.4820836 1750620421.2609086 1750620446.5260575 1750622090.78472 1750622091.7098215 1750622096.1691563 1750622100.6803923 1750622104.9237328 1750622105.8404343 1750622113.7479684 1750622123.2251766 1750622124.337181 1750622129.6151385 1750681291.965105 1750681295.2112973 1750681300.780856 1750681305.2473927 1750681306.0782137 1750681309.1641443 1750681341.3806005 1750681441.8443985 1750940633.0334418 1750940637.7753532 1750940642.7058442 1750940644.2142265 1750940648.1112323 1750940660.8890212 1750940663.1971006 1750940666.7814307 1750940687.7098012 1750940742.4480157 1751110725.2078402 1751110729.1739366 1751110730.3148015 1751110733.9212723 1751110735.1801746 1751110741.2618518 1751110752.2854383 1751110757.2074318 1751110758.8447082 1751110790.1221993 1751114981.6072633 1751114982.9551451 1751114983.3459275 1751114986.7715294 1751114991.1609395 1751114991.9845252 1751115010.1980166 1751115017.4232025 1751115053.0503392 1751115066.730599 1751189470.2953637 1751189472.289429 1751189476.6330023 1751189481.17639 1751189481.9573102 1751189484.8299835 1751189494.7784457 1751189507.0900698 1751189551.5453267 1751191153.15442 1751191157.4138577 1751191160.6247377 1751191167.3223672 1751191178.041022 1751191182.9582558 1751191187.4798217 1751191231.0580914 1751210541.5037293 1751210542.6481793 1751210546.0688426 1751210565.4190056 1751210576.4266472 1751210602.0677116 1751210612.8193116 1751210617.5654838 1751210639.9121401 1751210761.052541 1751210763.1451428 1751210764.1585217 1751210765.6493883 1751210774.2062628 1751210786.4356728 1751210797.3688347 1751210800.8474517 1751210842.0230649 1751286298.5361385 1751286299.0539618 1751286309.9448109 1751286330.4786575 1751355143.6259344 1751355146.68288 1751355147.7218432 1751355156.6756976 1751355165.9402833 1751355173.8904796 1751355175.9409008 1751355188.7918036 1751355226.6272078 1751545581.0122294 1751545586.6132703 1751545593.6615384 1751545594.7327814 1751545596.5224533 1751545616.781041 1751545624.3310037 1751545681.4531589 1751545704.627739 1751725818.967529 1751725819.5161512 1751725821.5602055 1751725823.2456803 1751725824.4361553 1751725834.479581 1751725852.156433 1751725853.304842 1751725897.3900046 1751725905.7422347 1751730085.9102023 1751730087.9532862 1751730089.7864442 1751730092.5901027 1751730097.7223408 1751730098.6084144 1751730115.5875676 1751730118.519118 1751730165.6099408 1751730181.8135753 1751732874.3393655 1751732875.3494453 1751732877.5679533 1751732883.9959602 1751732888.6535351 1751732895.8564885 1751732900.8064644 1751732906.3657126 1751732912.9698772 1751740009.8792338 1751802647.7944303 1751802649.198215 1751802653.345696 1751802659.375122 1751802663.2127845 1751802674.4501565 1751802677.4429996 1751802682.8299348 1751802688.28721 1751853616.4622428 1751853620.6045835 1751853622.8813455 1751853627.6323647 1751853628.3295627 1751853630.8563719 1751853640.4701383 1751853645.9375217 1751853647.1251276 1751853652.3462539 1751888466.2609575 1751888467.4893453 1751888470.644313 1751888471.5961049 1751888474.367563 1751888475.778744 1751888493.6230636 1751888511.9997575 1751888555.5523255 1751888594.5809436 1751977069.6957645 1751977071.599551 1751977078.172867 1751977081.300183 1751977087.1417215 1751977093.7141619 1751977100.8432062 1751977139.7281485 1751977179.9199867 1751978326.1916354 1751978328.4840539 1751978338.9560432 1751978341.3715274 1751978357.1786745 1751978367.2191665 1751978372.2492654 1751978383.1259727 1751980162.3040843 1751980174.3750544 1751980175.5560195 1751980178.9389732 1751980184.242051 1751980198.1207654 1751980210.761367 1751980236.0854242 1751981521.3733516 1751981561.7564917 1752053337.3207977 1752053338.8619225 1752053341.3972442 1752053346.3473854 1752053350.2991476 1752053351.9596155 1752053366.2021606 1752053377.5975795 1752053450.5912552 1752057310.3442078 1752065104.6770759 1752065107.2878308 1752065108.424729 1752065109.805908 1752065111.1052766 1752065134.5520885 1752065142.4615617 1752065157.0391557 1752066731.5141857 1752066733.6911905 1752066735.0969563 1752066738.4530632 1752066739.4971445 1752066761.0648172 1752066772.953822 1752066801.1133144 1752067159.2773154 1752068830.9687135 1752068832.173346 1752068835.5154512 1752068839.5407856 1752068846.499726 1752068863.1123843 1752068874.2521362 1752068926.1676552 1752068934.778435 1752205661.7582107 1752205666.3036857 1752205666.8440635 1752205668.3498464 1752205678.4908006 1752205679.9102979 1752205691.515887 1752205705.4272656 1752220171.244901 1752220175.9887323 1752220177.0568392 1752220178.3969288 1752220180.7236824 1752220181.7845435 1752220191.9305685 1752220207.8247237 1752220217.7638764 1752220251.2989273 1752249865.716855 1752249869.9362595 1752249870.4005945 1752249881.748938 1752249892.8276708 1752249896.8790243 1752249908.8752942 1752249917.4683437 1752317363.4795117 1752317370.0336106 1752317390.3611355 1752317398.607496 1752317400.3005273 1752317401.024259 1752317406.7781847 1752317423.9100559 1752317436.6103513 1752317447.8547115 1752319914.6331575 1752319915.4795966 1752319926.760566 1752319941.802452 1752319954.2052486 1752319961.5241613 1752320014.6087837 1752320016.6784222 1752336325.0512245 1752336333.917163 1752336387.8570414 1752406193.7112389 1752406194.5214336 1752406195.635355 1752406199.4264512 1752406204.7821202 1752406220.247316 1752406226.2589955 1752406232.176263 1752406283.0001185 1752406308.260031 1752407210.996911 1752407211.828674 1752407214.9152431 1752407218.776768 1752407233.0008824 1752407248.180142 1752407253.493582 1752407254.4523447 1752407255.5309138 1752407256.869781 1752411688.2908175 1752411690.4053566 1752421497.2642744 1752421498.495637 1752421521.409316 1752421527.077749 1752421529.294662 1752421541.667016 1752421542.9554195 1752421566.3176177 1752421567.4761708 1752422206.6630602 1752422216.0846853 1752422240.574253 1752422243.658565 1752422733.8036196 1752424983.430937 1752425015.0811005 1752425032.2356212 1752425033.2287548 1752425033.9963248 1752425035.8940485 1752425046.9963098 1752425077.1100595 1752425103.4793208 1752426778.1639986 1752426780.7987607 1752426784.201647 1752426791.5249655 1752426804.0015364 1752426808.0771294 1752426848.8854136 1752426862.0891616 1752428571.8599634 1752433661.8094244 1752433662.9587271 1752433664.1917112 1752433685.771401 1752433696.9874265 1752433700.9476068 1752433705.246769 1752433706.4015415 1752433747.4182 1752433753.9025729 1752455476.2998357 1752455479.6996272 1752455482.2440193 1752483546.3578281 1752483551.9453197 1752483553.252048 1752483556.7156012 1752483568.962246 1752483584.3881648 1752483591.3398833 1752483592.6544354 1752483645.051297 1752484105.6790297 1752484170.1442206 1752484791.816609 1752484834.8382723 1752581294.7668931 1752581300.203477 1752581301.6654656 1752581306.5516346 1752581309.2304502 1752581319.2380588 1752581334.545645 1752581335.531903 1752581350.2245443 1752653208.11366 1752653214.7264032 1752653215.6132576 1752653220.876051 1752653222.770341 1752653235.1640432 1752653242.5288699 1752653252.4051535 1752653338.5787513 1752655341.0746193 1752655344.7018456 1752655351.8267777 1752655353.770705 1752655365.720272 1752655367.9655826 1752655372.2233975 1752655379.8366141 1752655380.969712 1752658083.33107 1752658095.3492181 1752658097.3265333 1752658103.705013 1752658119.4050083 1752658125.6491268 1752658140.1298707 1752658157.0762637 1752662380.6002362 1752662381.4293406 1752662385.4971538 1752662391.565842 1752662399.0018964 1752662414.0315292 1752662414.9375114 1752662422.1790829 1752666174.9191167 1752666196.5410588 1752666212.8757172 1752667013.887674 1752668577.7272162 1752668578.4540179 1752668581.5293293 1752668583.950793 1752668588.5230892 1752668599.85014 1752668600.7181296 1752668612.5240064 1752668638.3085136 1752674979.3560166 1752695230.498447 1752695233.0964093 1752695237.1934483 1752695240.3221178 1752695250.9757826 1752695252.022823 1752695262.6248226 1752695265.9665592 1752755414.5913417 1752755416.6762884 1752755417.4517312 1752755422.1348903 1752755428.7812822 1752755441.3666263 1752755447.8217468 1752755463.3045473 1752755550.326027 1752815598.8271685 1752815602.4160266 1752815609.0523677 1752815612.2074547 1752815613.9390266 1752815626.9855943 1752815628.551522 1752815697.9424307 1752824171.8763149 1752824175.7537646 1752824177.8018596 1752824180.0683246 1752824181.5045102 1752824187.5248275 1752824203.2315161 1752824205.9222045 1752824212.0189817 1752909344.2239141 1752909344.6388516 1752909346.401105 1752909355.5477102 1752909366.23498 1752909372.353175 1752909434.874642 1752931130.6346424 1752931131.467248 1752931140.8398387 1752931142.9503345 1752931155.0360262 1752931179.6947343 1752931212.4887893 1752931217.1517313 1752931226.8343508 1752931325.5797493 1752931985.5287938 1752931989.3067138 1752931991.956637 1752931996.0261855 1752932012.876879 1752932021.4536695 1752932022.7543962 1752932060.5794108 1752938384.516586 1752938386.0041265 1752938388.9465365 1752938391.062609 1752938396.614473 1752938420.788231 1752938429.9272988 1752938463.618736 1752938586.3024359 1753081920.181048 1753081924.5152 1753081932.0630558 1753081942.4622169 1753081951.253088 1753081965.0180943 1753081969.2437797 1753082037.394756 1753082089.858027 1753082090.9234664 1753090707.2661088 1753090712.8956099 1753090714.5297365 1753090715.4559264 1753090718.6303651 1753090739.0777605 1753090744.614489 1753090779.8588169 1753090816.3522484 1753109852.260959 1753109860.0056849 1753109861.4736617 1753109862.2648656 1753109866.242469 1753109872.8958058 1753109885.6476934 1753109888.1732457 1753109898.4354076 1753109954.9590533 1753527778.5117466 1753527779.731848 1753527780.577084 1753527791.3466794 1753527801.5885005 1753527810.1640723 1753527816.8174925 1753527845.6910954 1753527875.0335333 1753528087.7175646 1753528091.62572 1753528095.123978 1753528097.9584997 1753528111.0641444 1753528121.4111438 1753528124.0014498 1753528191.185296 1753528771.9768803 1753528772.6663513 1753528780.6560063 1753528781.3893888 1753528792.0522988 1753528795.6139822 1753528803.8401124 1753528805.3791673 1753543354.5843496 1753543368.8904924 1753543381.8730474 1753543389.7707224 1753543400.0396738 1753543401.9568622 1753543423.2695198 1753543426.357917 1753543427.0342505 1753543436.3947318 1753547961.6327457 1753547964.9480078 1753547972.7431076 1753547977.264395 1753547978.7783508 1753547983.9778428 1753547987.5205367 1753547995.981038 1753547997.829545 1753548003.2144182 1753549710.751082 1753555073.117537 1753555075.194001 1753555080.1292431 1753555081.6338127 1753555084.8535955 1753555085.9333053 1753555102.253864 1753555104.3959394 1753555105.8811164 1753555109.921584 1753557013.7667754 1753557019.6222768 1753557021.1462777 1753557023.7295516 1753557037.9135652 1753557039.2593813 1753557053.3965182 1753557114.414277 1753560209.107383 1753607412.7562165 1753607413.8237505 1753607414.9938471 1753607415.4590468 1753607451.9975915 1753607465.7359056 1753607479.331 1753607488.4349377 1753619523.7802236 1753621634.870607 1753621636.5215642 1753621639.034233 1753621645.05623 1753621647.4843652 1753621653.1763496 1753621660.2784498 1753621668.1427321 1753621727.8170462 1753624311.93218 1753624312.5691931 1753624319.2812183 1753624322.309761 1753624325.2693536 1753624342.1486804 1753624343.0279913 1753624343.6775765 1753624379.7460775 1753624421.0528874 1753628448.1217368 1753628452.4393914 1753628457.8755803 1753628468.61442 1753628478.814922 1753628496.1882634 1753628506.2181995 1753628510.35918 1753633880.8245702 1753633884.0189211 1753633888.1368659 1753633889.9688065 1753633894.9289176 1753633909.2709587 1753633912.9586463 1753633914.656439 1753633974.4984894 1753634196.9595485 1753634198.4258742 1753634200.7588377 1753634202.8742635 1753634214.523655 1753634221.3979316 1753634222.6455235 1753634232.2655947 1753634235.5019648 1753635790.6564934 1753635801.1622255 1753635804.1653693 1753635805.7986543 1753635806.8686574 1753635810.6662238 1753635828.0595148 1753635834.7401557 1753635875.2372122 1753635906.12679 1753637939.8341918 1753637941.723922 1753637946.156286 1753637947.7580767 1753637950.0366821 1753637961.358346 1753637979.3405824 1753638007.4410455 1753642653.8151813 1753705434.0385585 1753705437.3170333 1753705440.9904394 1753705446.1188889 1753705447.3851764 1753705450.675415 1753705471.9571779 1753705475.4415438 1753705505.6278014 1753705534.4087162 1753964919.8963556 1753964928.974177 1753964932.0748856 1753964932.9618192 1753964941.4599595 1753964963.5642147 1753964987.6735666 1753965027.0833921 1754050030.3789477 1754050035.0561054 1754050040.0168066 1754050044.233994 1754050054.4163415 1754050064.863411 1754050067.0610914 1754050073.1985257 1754050081.106659 1754050116.7667983 1754051714.1005504 1754147464.6104853 1754147466.0603118 1754147466.8723512 1754147469.322801 1754147471.4604385 1754147480.567856 1754147488.5365741 1754147494.9528346 1754147496.3750696 1754147541.0013463 1754147901.1338613 1754147902.1700509 1754147903.5346334 1754147910.526371 1754147913.5406568 1754147922.1252503 1754147926.2353654 1754147930.73985 1754147934.617274 1754147937.192003 1754154724.6913762 1754154727.3907928 1754154729.7545896 1754154732.281492 1754154733.0530417 1754154743.6075919 1754154757.663202 1754154771.1261935 1754154776.5890312 1754154815.3744185 1754161692.0995958 1754161693.8928325 1754161698.0712461 1754161701.2578607 1754161702.7071328 1754161722.8262532 1754161734.993284 1754161811.8192391 1754161831.204044 1754163693.6155944 1754163701.2349622 1754163704.9144213 1754163705.781919 1754163707.3302922 1754163717.1612923 1754163732.095443 1754163733.6481328 1754163795.264803 1754210911.854374 1754210914.495917 1754210915.6907413 1754210917.0608191 1754210921.2635305 1754210923.115985 1754210941.8069832 1754210942.7540262 1754210945.496934 1754211020.0348015 1754219489.6631823 1754219490.1588373 1754219490.7965908 1754219492.7039154 1754219494.8038013 1754219498.2529283 1754219519.982066 1754219525.1832073 1754219527.7887845 1754219562.5918531 1754221986.949188 1754221993.6517015 1754222013.344442 1754222086.263555 1754222139.0420344 1754222170.0545282 1754222202.5397425 1754222232.3531396 1754222259.1345057 1754222261.757903 1754223031.4519022 1754223031.9048984 1754223033.2070441 1754223036.2916546 1754223038.8532968 1754223040.5199792 1754223067.7043796 1754223070.026523 1754223115.7667549 1754223133.9409313 1754223591.5066426 1754223593.0655425 1754223595.2943885 1754223599.7125196 1754223608.6046302 1754223613.470199 1754223619.4759579 1754223632.459162 1754223681.8974965 1754228561.1553266 1754228562.819451 1754228563.6393201 1754228569.5833647 1754228570.3724957 1754228589.3824787 1754228591.2490494 1754228627.380794 1754228639.0961065 1754232590.2389843 1754232591.4989154 1754232593.2010121 1754232595.9642012 1754232616.50332 1754232621.5638747 1754232639.7652113 1754232674.7439165 1754233070.4743738 1754233072.0152574 1754233073.9464557 1754233075.2448533 1754233079.4979722 1754233080.141323 1754233092.7940302 1754233104.017456 1754233144.346957 1754233162.5799844 1754239909.7946708 1754239915.5617726 1754239916.4486494 1754239935.9771721 1754239984.2906501 1754239990.9896011 1754240011.013253 1754240017.1374927 1754240049.960765 1754240081.5875914 1754293574.2338655 1754293575.0399668 1754293581.1391838 1754293581.863938 1754293603.6632936 1754293613.1434186 1754293618.4339972 1754293679.7011929 1754310285.6145704 1754310291.0624673 1754310294.4581003 1754310295.5655785 1754310296.365084 1754310297.6415553 1754310318.1626227 1754310321.7382398 1754310364.1850843 1754310405.4504304 1754317826.9290524 1754317830.7565248 1754317832.2182643 1754317840.799902 1754317843.7951312 1754317852.457583 1754317853.4192817 1754317862.7597876 1754317868.896572 1754317887.399214 1754318775.8339396 1754318779.9629686 1754318783.297025 1754318784.222822 1754318785.2888439 1754318786.5568762 1754318806.1119292 1754318820.514628 1754318827.4494452 1754323040.2911096 1754323045.0321183 1754323051.0663688 1754323054.277648 1754323055.6279497 1754323061.1204603 1754323069.822695 1754323077.3025553 1754323079.2780805 1754323084.750792 1754323667.7419314 1754323668.2115483 1754323672.5697134 1754323673.6980371 1754323675.405283 1754323677.4616768 1754323689.9075372 1754323705.4609141 1754323708.592731 1754323736.7744064 1754326223.9695542 1754326224.8513129 1754326230.1929665 1754326231.4682832 1754326235.9761422 1754326241.1815274 1754326257.2851758 1754326261.3494196 1754326263.654178 1754326283.3476288 1754330387.2604 1754330390.003617 1754330391.219144 1754330400.809656 1754330402.4465642 1754330414.9430423 1754330422.6040044 1754330437.9510179 1754330474.04123 1754334084.6124992 1754334085.1113546 1754334086.7677271 1754334207.156391 1754334209.7791314 1754334212.4710393 1754334216.8630707 1754334335.936511 1754334337.392412 1754334340.5175052 1754334344.0764573 1754334347.05312 1754334349.616821 1754334358.0505111 1754334359.6280644 1754334374.6576247 1754334409.232203 1754394229.9115093 1754394236.1680892 1754394236.9868488 1754394246.1246827 1754394249.1736414 1754394264.3860807 1754394275.5825715 1754394318.6056807 1754394343.5812619 1754569418.2930825 1754569421.837108 1754569423.1742985 1754569425.1570497 1754569425.9239967 1754569438.7803164 1754569459.056397 1754569474.1716316 1754569488.3651893 1754569492.8347008 1754638639.458234 1754638642.5091085 1754638644.0283828 1754638646.775579 1754638651.3673298 1754638652.4136136 1754638668.26929 1754638677.3526635 1754638685.0813951 1754638748.8697855 1754657291.6403043 1754657292.4744985 1754657293.3465893 1754657293.950285 1754657294.4197512 1754657300.9399118 1754657317.3675215 1754657318.825882 1754657323.5254388 1754657377.0663774 1754661010.431923 1754661013.0314443 1754661014.0538993 1754661015.0904381 1754661016.855073 1754661021.683792 1754661031.7809405 1754661044.7760146 1754661095.190606 1754661130.862394 1754665151.962033 1754665156.751902 1754665157.7375376 1754665158.3834746 1754665289.112908 1754665293.585181 1754665294.382669 1754665297.2250502 1754665298.1869934 1754665299.79884 1754665312.295892 1754665321.8710375 1754665407.6290948 1754665429.5629325 1754718004.3929446 1754718008.645443 1754718009.6582825 1754718012.0243857 1754718014.016908 1754718033.9542181 1754718037.3497593 1754718049.4169745 1754718085.8459666 1754836471.9137306 1754836475.0375721 1754836476.062699 1754836486.104762 1754836487.8068762 1754836488.857057 1754836503.0423374 1754836508.6906729 1754836512.319106 1754836547.3170414 1754838744.581556 1754838745.8280544 1754838750.7695951 1754838754.3971465 1754838755.6916676 1754838762.0266268 1754838769.3110466 1754838775.5133567 1754838778.344381 1754838815.906733 1754915022.5220096 1754915028.4145112 1754915041.4452024 1754915058.7874146 1754915063.0782726 1754915064.996402 1754915074.0698926 1754915083.2008886 1754915091.6328013 1754922333.0725238 1754922339.0960412 1754922340.0241008 1754922341.0449069 1754922369.3095813 1754922375.015952 1754922388.706176 1754922397.81592 1754922423.6951694 1754923112.3074675 1754923118.1217208 1754923119.0933652 1754923123.9948857 1754923126.5217292 1754923132.298002 1754923139.7730455 1754923150.893455 1754923160.6324568 1754923223.8065531 1754929456.570865 1754929457.672234 1754929459.015023 1754929462.5595443 1754929490.6316092 1754929502.694461 1754929526.2692955 1754934106.7113538 1754934110.5575802 1754934114.0763226 1754934114.9115584 1754934115.913665 1754934118.5307214 1754934135.6748009 1754934136.9377642 1754934142.065675 1754934146.296465 1754989412.0507722 1754989415.5522845 1754989420.1753516 1754989424.8790295 1754989426.334825 1754989440.0370219 1754989453.069252 1754989456.1419594 1754989475.0667217 1754990713.266655 1754990721.2494721 1754990725.910558 1754990729.4249978 1754990744.5967226 1754990746.6091092 1754990774.8629506 1754990805.56848 1754998738.3181512 1754998741.2028167 1754998743.5358863 1754998748.5763028 1754998754.2024612 1754998769.7436988 1754998771.4340525 1754998792.499069 1754998810.9800005 1755091295.2237508 1755091297.6697185 1755091317.6695251 1755091359.6534734 1755091379.2650094 1755091389.5992413 1755091446.0126197 1755091451.158804 1755091452.5178423 1755092520.1772451 1755092522.9319377 1755092525.882438 1755092528.8732014 1755092535.9946783 1755092542.6943703 1755092551.4624476 1755092565.35118 1755092616.3713923 1755103831.1122003 1755103834.7719872 1755103837.5307035 1755103840.1106188 1755103843.8362675 1755103859.6927347 1755103866.9314835 1755103877.1440673 1755103931.2784662 1755155603.910527 1755155605.1707687 1755155609.4332795 1755155616.694992 1755155620.9042776 1755155640.531146 1755155646.57202 1755155685.840037 1755161637.7376566 1755161641.828701 1755161646.806685 1755161651.1506295 1755161652.0224833 1755161653.3682384 1755161669.3750222 1755161672.1709075 1755161717.191939 1755161725.931677 1755173000.5957315 1755173001.9000506 1755173008.8519778 1755173014.1254952 1755173014.787355 1755173030.2924156 1755173034.162322 1755173048.7866387 1755173086.536405 1755174292.8822558 1755174295.428002 1755174298.603928 1755174302.125032 1755174321.4670026 1755174378.398244 1755174503.4448552 1755185730.874194 1755185734.3135548 1755185741.2811418 1755185744.5252283 1755185760.6697218 1755185771.0018182 1755185792.5674508 1755185810.4147518 1755186662.427318 1755186666.3672824 1755186672.139668 1755186674.701527 1755186676.5207224 1755186682.5460482 1755186686.701402 1755186702.0690258 1755186732.0374315 1755186750.6634238 1755242389.8940303 1755242391.9020832 1755242419.277163 1755242504.6928837 1755242508.6852958 1755242675.5390825 1755242703.2035072 1755242710.6229627 1755242712.8987422 1755242716.3719594 1755519829.5844069 1755519833.5935352 1755519836.9904127 1755519838.9582396 1755519855.558081 1755519860.363573 1755519868.8485646 1755519920.6822896 1755519942.2387319 1755527975.6788986 1755527978.651766 1755527986.416013 1755527988.6062543 1755527991.0238554 1755528001.242443 1755528019.8285203 1755528023.381777 1755528035.2184818 1755528470.930902 1755528476.349847 1755528477.7076178 1755528481.463617 1755528487.8090794 1755528488.694744 1755528509.8624043 1755528518.2550066 1755528537.321938 1755528556.6828933 1755528766.6240294 1755528772.6573496 1755528774.334497 1755528775.8850696 1755528786.5289903 1755528793.721394 1755528806.0284948 1755528811.3382447 1755528822.3104265 1755528858.0835721 1755529302.2824957 1755529309.1301937 1755529309.8924468 1755529313.6042178 1755529314.6411026 1755529320.2343986 1755529329.5999422 1755529369.8951874 1755529397.511248 1755529409.5458014 1755529792.449044 1755529798.3453658 1755529799.4744263 1755529803.6671424 1755529807.9614284 1755529815.5547583 1755529824.5668454 1755529829.2762125 1755529851.870933 1755529893.2305694 1755530370.323989 1755530373.193505 1755530374.3619177 1755530379.4706616 1755530391.7684755 1755530393.832497 1755530398.6746159 1755530408.721917 1755530453.613735 1755542546.745977 1755542553.4601243 1755542557.5791974 1755542560.4875047 1755542562.3357222 1755542575.9021316 1755542587.4253993 1755542606.7538378 1755542620.2706878 1755542679.175511 1755581239.3919017 1755581242.9592192 1755581248.0982115 1755581250.362873 1755581251.9973235 1755581273.6017663 1755581278.112134 1755581279.7596714 1755683205.293422 1755683208.4407446 1755683215.296143 1755683216.3164744 1755683232.1347709 1755683237.1703007 1755683265.6661882 1755683564.564526 1755697365.6706383 1755697367.8462865 1755697368.8814843 1755697372.6754832 1755697374.0597286 1755697406.1362655 1755697408.9832134 1755697466.2167993 1755697471.2026734 1755767335.8241048 1755767337.7761495 1755767341.8543706 1755767346.6528404 1755767360.1526518 1755767365.7380254 1755767369.697219 1755767423.1748812 1755767430.7915325 1755771307.2372272 1755771310.1699429 1755771314.0174656 1755771317.4156752 1755771324.4522014 1755771343.920328 1755771348.0819685 1755771413.535651 1755771426.3374026 1755779051.9380424 1755779058.067354 1755779060.7318432 1755779065.6053112 1755779067.91052 1755779069.9747307 1755779122.3255653 1755779159.1961684 1755779190.2349162 1755781750.1219249 1755781750.584925 1755781753.7838068 1755781760.9929872 1755781775.3233852 1755781777.7456393 1755781790.3588195 1755781816.2886713 1755858351.8479357 1755858354.3661966 1755858355.4653335 1755858360.082173 1755858363.541813 1755858383.3070207 1755858392.2707088 1755858450.284916 1755858453.2151356 1755864810.5204973 1755864817.79521 1755864819.666758 1755864821.992026 1755864827.1484685 1755864830.7505047 1755864836.0561144 1755864904.5799057 1755864911.224088 1755871864.7463403 1755871865.700705 1755871874.3711174 1755871876.8395483 1755871881.203033 1755871888.7127476 1755871899.9997368 1755871916.2245448 1755871917.60044 1755871945.770296 1755872178.8943074 1755872186.983504 1755872191.7687752 1755872194.5346866 1755872196.1832926 1755872205.9670317 1755872214.1981487 1755872276.6107228 1755872284.6054552 1755944928.0758238 1755944929.0181148 1755944932.1404448 1755944934.0511243 1755944950.4044645 1755944961.2118134 1755945024.5262923 1755945120.3629444 1755963202.5901458 1755963203.293085 1755963205.8935375 1755963212.2584286 1755963212.8997407 1755963222.6679978 1755963230.8555262 1755963231.9183908 1755963241.3830926 1755963397.9453433 1755963400.998559 1755963402.6345365 1755963412.4104345 1755963417.763777 1755963422.6026397 1755963428.342291 1755963439.6799586 1755963476.2933767 1755965151.6507125 1755965154.912003 1755965156.7904503 1755965165.3828666 1755965179.8125389 1755965182.3996332 1755965189.1981287 1755965238.6140528 1755966626.6175234 1755966627.3063796 1755966628.7057528 1755966631.0783293 1755966634.8012874 1755966639.2691996 1755966659.2272258 1755966666.8914418 1755966670.3490558 1755966703.7870758 1755967612.8714328 1755967613.6729198 1755967623.4443798 1755967624.2040484 1755967626.7955487 1755967632.0557587 1755967643.0482206 1755967653.0765295 1755967695.3965862 1756033999.6928086 1756034001.3570006 1756034002.3976445 1756034004.5353584 1756034016.0064967 1756034045.3250484 1756034074.433641 1756034081.1165838 1756051679.111972 1756051689.949049 1756051693.1558483 1756051701.8674443 1756051722.2058275 1756051748.804777 1756051758.8889961 1756051774.9322295 1756051775.8245072 1756051782.817306 1756053674.8424118 1756053677.5552804 1756053678.968204 1756053684.7890909 1756053686.1426823 1756053700.0809133 1756053701.17049 1756053703.5803366 1756053714.9610004 1756053753.5441813 1756062146.2249432 1756062152.6544452 1756062152.4811814 1756062154.4658208 1756062156.493738 1756062173.4410543 1756062183.1047323 1756062217.604999 1756062224.9876451 1756063491.1078897 1756063496.6617112 1756063499.3353674 1756063500.3891282 1756063503.8977914 1756063525.9865055 1756063533.080167 1756063579.8505108 1756063582.6323035 1756072129.3400898 1756072135.2731066 1756072141.0665078 1756072153.2953558 1756072160.2601361 1756072169.0772078 1756072343.9998448 1756125211.4906695 1756125212.328387 1756125214.2974348 1756125221.2147803 1756125231.304783 1756125236.0785177 1756125246.1898239 1756125250.4114323 1756125255.384682 1756125338.3665445 1756310081.775399 1756310086.739538 1756310087.4151154 1756310089.4788582 1756310097.465379 1756310116.5951312 1756310123.0403903 1756310195.6180274 1756310307.5799718 1756324792.3303366 1756324793.7887714 1756324794.8563702 1756324803.2106173 1756324806.297542 1756324819.9633186 1756324839.670165 1756324920.9852116 1756324987.3191826 1756482090.2726345 1756482092.8315275 1756482094.2205503 1756482101.1669152 1756482106.640674 1756482107.3221672 1756482111.8609567 1756482118.665951 1756482137.8609233 1756482185.2321236 1756490572.1480975 1756490576.1325092 1756490577.4044735 1756490584.7298954 1756490593.7054727 1756490594.508246 1756490601.077775 1756490608.3319793 1756490613.894025 1756490662.5819 1756492240.1021197 1756492242.534109 1756492246.8966846 1756492248.4405742 1756492254.5134413 1756492264.3207994 1756492285.7777555 1756492308.5999398 1756492341.6097598 1756513583.9886444 1756513607.1972914 1756513623.5006287 1756513652.210149 1756513664.7416515 1756513669.4077144 1756513673.848115 1756513691.6451051 1756513704.0918295 1756513759.4461706 1756543686.9924748 1756543689.312835 1756543690.9100976 1756543692.1223993 1756543701.1993566 1756543701.9120893 1756543719.4618378 1756543755.2614884 1756543768.6995828 1756554646.1878424 1756554651.6421301 1756554652.9530745 1756554658.6524198 1756554661.4308546 1756554667.5288537 1756554669.1511383 1756554676.6495404 1756554680.4736974 1756554709.1258993 1756560284.335863 1756560285.933871 1756560287.908809 1756560291.6384768 1756560292.458672 1756560313.8946424 1756560321.8388882 1756560325.908103 1756560382.8148215 1756563696.9923987 1756563701.9017537 1756563702.811375 1756563703.8906672 1756563714.253635 1756563732.5171704 1756563734.767729 1756563770.182094 1756563775.9456685 1756567983.683949 1756567991.56894 1756567993.1907952 1756567994.3630297 1756567996.010478 1756567998.5305734 1756568016.7985425 1756568019.5493484 1756568024.0831244 1756568066.684337 1756623320.5544336 1756623322.472054 1756623330.1998444 1756623332.9352598 1756623336.381962 1756623337.7754755 1756623352.333162 1756623365.3432426 1756623398.6320612 1756623433.5529215 1756651806.794219 1756651809.4032423 1756651811.7553992 1756651813.037486 1756651831.3541577 1756651840.1121118 1756651875.5639043 1756651893.71908 1756657336.314789 1756657337.6781893 1756657344.0205686 1756657351.4188898 1756657363.845933 1756657365.71656 1756657377.6119764 1756657383.4340963 1756657448.2905917 1756657547.2515292 1756663699.0600624 1756663705.761575 1756663711.437942 1756663712.1873233 1756663716.33332 1756663730.0981581 1756663739.4198246 1756663744.7488353 1756663762.9796426 1756730636.526893 1756730638.7500653 1756730644.7717385 1756730645.640282 1756730647.9443047 1756730669.7771692 1756730680.0643866 1756730854.7317486 1756731005.6253655 1756812461.4234276 1756812463.1158438 1756812466.4828668 1756812467.756903 1756812468.7449336 1756812489.6910367 1756812492.6029148 1756812525.5468075 1756812569.3577304 1756816339.3495305 1756816341.164291 1756816347.0396016 1756816348.348776 1756816352.214036 1756816356.467143 1756816361.6113038 1756816383.0108232 1756816410.4677415 1756816432.5799692 1757250550.4773295 1757250551.1298668 1757250551.9734964 1757250552.757958 1757250555.4748414 1757250560.3880448 1757250581.049149 1757250588.4147136 1757250627.1143572 1757250674.2455492 1757254212.7658505 1757254218.7390375 1757254227.5592763 1757254230.1855805 1757254240.5517533 1757254244.1242387 1757254252.3621862 1757254338.1887016 1757315702.2559307 1757315703.8898485 1757315705.3952873 1757315707.076994 1757315712.250251 1757315726.671891 1757315731.4795449 1757315805.4317906 1757315899.0124006 1757406652.7380905 1757406655.4549916 1757406656.652004 1757406662.530522 1757406685.7777593 1757406689.457919 1757406721.7381837 1757406766.3391576 1757522851.9774354 1757522855.1329193 1757522858.2322128 1757522859.0345004 1757522862.450237 1757522895.4297178 1757522899.6509047 1757522902.0956619 1757522974.9892027 1757593470.624918 1757593473.7091618 1757593479.5218978 1757593500.0183465 1757593502.5605037 1757593545.0526714 1757593634.8489718 1757593642.9991968 1757593801.1162865 1757593855.9368112 1757759851.9401703 1757759854.1618981 1757759857.3359904 1757759861.5839758 1757759862.5584164 1757759869.2156584 1757759896.1262476 1757759898.967808 1757759919.0617156 1757767575.7318823 1757767577.3116324 1757767578.164892 1757767579.7084188 1757767582.4452462 1757767591.6664143 1757767606.1796238 1757767621.7165635 1757767642.8931715 1757767696.8098483 1757860785.381375 1757860785.9220712 1757860789.7567668 1757860791.9484856 1757860793.619363 1757860800.634484 1757860821.7560308 1757860969.2124605 1757860971.2501225 1757860974.089601 1757860983.6230283 1757860995.4606473 1757861005.9285455 1757861115.845992 1757869253.9140117 1757869256.4396024 1757869258.5740275 1757869263.9215944 1757869267.8763661 1757869268.7663534 1757869274.0691543 1757869300.9069545 1757869322.3778484 1757869410.4702916 1757870798.2686443 1757870804.1248548 1757870806.7007651 1757870809.032035 1757870812.0584605 1757870813.2881002 1757870829.2664254 1757870838.5672476 1757870869.525567 1757870905.564141 1758094886.0981183 1758094889.9322498 1758094891.2626927 1758094898.718456 1758094900.569667 1758094915.4495225 1758094922.0363855 1758094952.5641358 1758095013.700299 1758198488.148094 1758198489.796498 1758198490.5393128 1758198495.096042 1758198501.3216105 1758198516.7062492 1758198519.4233909 1758198546.4314828 1758198640.9332113 1758272137.4220994 1758272139.738268 1758272143.227976 1758272156.597657 1758272190.698047 1758272196.0740888 1758272208.9434507 1758272238.1286738 1758272260.6139212 1758272449.394718 1758376904.6455922 1758376932.3074038 1758376948.930031 1758376971.2760975 1758376988.0856025 1758377009.1713164 1758377013.5835123 1758377048.9492967 1758377161.0676274 1758379289.6113198 1758379290.2530682 1758379290.8906834 1758379294.675036 1758379300.961393 1758379317.8066623 1758379323.2454424 1758379382.9791315 1758379436.5179815 1758383797.1264625 1758383803.1973991 1758383804.7967987 1758383807.4729981 1758383816.634885 1758383821.6915572 1758383835.7692916 1758383847.0809147 1758383858.7766733 1758383959.9250615 1758436806.4146972 1758436807.1329958 1758436809.3260841 1758436811.4417937 1758436827.3085277 1758436833.948449 1758436841.838951 1758436892.3199496 1758437202.6245308 1758443980.2173722 1758443983.3484104 1758443984.4110887 1758443990.683742 1758443991.5369225 1758443992.2086768 1758444010.2000234 1758444026.1857007 1758444124.608413 1758444134.7710118 1758465760.986729 1758465762.3181996 1758465764.0645068 1758465765.3632345 1758465787.950925 1758465790.680185 1758465801.6848671 1758465819.947332 1758465892.7116282 1758469620.1688812 1758469622.2927094 1758469623.5728564 1758469626.4591117 1758469627.0488255 1758469658.6069713 1758469665.5531895 1758469694.4000585 1758469756.5381064 1758470108.986735 1758470124.057676 1758470125.9493299 1758470131.5719683 1758470132.0934024 1758470137.9475138 1758470152.9088888 1758470156.1865952 1758470237.0114837 1758470254.5041 1758473686.2613904 1758473687.3080168 1758473689.074438 1758473693.3072124 1758473702.961244 1758473713.9129097 1758473726.2750452 1758473728.0962465 1758473842.3047895 1758789324.575525 1758789326.8829281 1758789331.1484952 1758789336.1290336 1758789346.26325 1758789353.666283 1758789358.8292425 1758789391.3956625 1758789394.393225 1758789579.999567 1758790671.02605 1758790672.8537107 1758790679.772759 1758790689.91073 1758790691.5338035 1758790692.7503328 1758790694.4285848 1758790707.107544 1758790732.2181475 1758790744.552918 1758803421.38217 1758803422.191356 1758803426.5482674 1758803427.662299 1758803428.821401 1758803455.564844 1758803459.5975406 1758803468.6731277 1758803572.6319895 1758987995.8475184 1758987996.6889234 1758988001.7106867 1758988011.6054077 1758988012.5404832 1758988030.3667586 1758988033.3406215 1758988115.726078 1758988277.8816535 1758991548.528388 1758991549.5032086 1758991557.7442715 1758991563.3105981 1758991572.8650045 1758991574.2282062 1758991582.1383522 1758991660.158998 1758991685.4292345 1759149060.2126746 1759149061.0146425 1759149064.611687 1759149067.7415888 1759149073.5355003 1759149094.2505076 1759149129.422489 1759149210.0339108 1759678901.9160364 1759678907.6715856 1759678932.9189944 1759679009.2559366 1759679011.4334173 1759679017.9236014 1759679022.8569818 1759679057.7054338 1759679059.8628235 1759679088.7659316 1759680202.6930416 1759680211.6861782 1759680213.267575 1759680221.0871046 1759680234.2229006 1759680244.7382803 1759680250.0741076 1759680311.640205 1759682581.4376502 1759682582.058753 1759682583.4463851 1759682584.8480828 1759682589.7484057 1759682591.9313192 1759682598.784222 1759682615.6336246 1759682685.3061302 1759682727.9810057 1759997168.5617237 1759997172.2804568 1759997174.3058667 1759997176.6075652 1759997183.6703053 1759997190.440064 1759997200.358024 1759997225.7491734 1759997368.1660178 1760065861.3042967 1760065868.189436 1760065869.2846282 1760065871.4562247 1760065893.879352 1760065900.3684113 1760065918.0518327 1760065963.6096683 1760069079.7001333 1760109020.464128 1760109022.5795572 1760109044.0690029 1760109052.5592253 1760109053.2782536 1760109062.9402142 1760109077.3545287 1760109094.5194438 1760109119.3457763 1760109131.098082 1760110188.1789145 1760110195.7505786 1760110197.687359 1760110199.661814 1760110202.7336934 1760110209.8629327 1760110223.4093578 1760110262.6597283 1760176958.6276183 1760176961.2292545 1760176965.6712897 1760176969.2640572 1760176980.9633286 1760176982.6216314 1760176983.3697286 1760176986.4191535 1760177000.5208561 1760177046.5203931 1760181743.7265334 1760181744.3741639 1760181748.5661814 1760181754.3712742 1760181765.4268498 1760181771.427125 1760181781.9578679 1760181907.003855 1760186961.2749624 1760186963.2880752 1760186972.4420753 1760186977.2224278 1760186977.9336514 1760186982.7370312 1760186983.9564476 1760186986.7875197 1760186989.8342474 1760187116.5768108 1760192063.4595168 1760192069.9260569 1760192071.0044608 1760192075.7647357 1760192078.064715 1760192079.395327 1760192096.9100592 1760192106.8860312 1760192220.910232 1760197171.8456156 1760197176.329728 1760197184.2266924 1760197188.62888 1760197194.3378708 1760197205.5518498 1760197220.2591972 1760197234.3463988 1760197246.756236 1760201835.284966 1760201836.5706768 1760201844.7961292 1760201845.2753227 1760201846.253655 1760201860.5191386 1760201861.6324472 1760201891.4585385 1760201934.3117514 1760203521.6871166 1760203524.4583154 1760203526.1673923 1760203527.7793536 1760203528.6421568 1760203533.0249124 1760203540.580649 1760203558.7832 1760203565.6265962 1760203704.2483034 1760208400.6732097 1760208402.0070264 1760208404.8436205 1760208408.2806673 1760208413.4959168 1760208416.4589143 1760208423.4273822 1760208434.2644088 1760208646.3928986 1760260672.7115512 1760260673.3789666 1760260674.1465495 1760260686.8978753 1760260701.1833951 1760260767.301787 1760260784.846258 1760260786.6696696 1760260797.917884 1760262121.7993038 1760269891.4179525 1760269892.1435916 1760269893.2471051 1760269895.8574095 1760269902.5837235 1760269903.350184 1760269911.580905 1760269926.0960793 1760269976.1379318 1760285301.0387683 1760285304.6327496 1760285306.5802863 1760285311.277028 1760285313.8499649 1760285326.521916 1760285331.085437 1760285333.3500106 1760285484.9395401 1760302085.5402446 1760302086.7340791 1760302092.4930632 1760302093.1862915 1760302097.047335 1760302113.5237918 1760302114.7217674 1760302129.6338432 1760302204.5704675 1760328946.4815428 1760328947.71341 1760328952.97125 1760328953.5222723 1760328956.548482 1760328973.4973283 1760328974.073793 1760328996.5082657 1760329090.1493146 1760347710.922032 1760347720.1702354 1760347724.736095 1760347727.9769988 1760347729.5172718 1760347730.3231437 1760347733.3761768 1760347743.8931594 1760347745.6416194 1760347915.0102088 1760358647.9662585 1760358648.6792915 1760358649.2804878 1760358654.0842292 1760358671.0118513 1760358677.122437 1760358683.546623 1760358718.8457167 1760370390.2076175 1760370391.397971 1760370394.622414 1760370396.471747 1760370407.4859722 1760370425.7107582 1760370426.7731693 1760370541.6130474 1760424893.1850412 1760424894.1859853 1760424895.6856303 1760424898.6068366 1760424902.0461578 1760424913.1799345 1760424917.4821265 1760424921.1070764 1760425021.3093822 1760743146.793899 1760743150.532634 1760743152.9184196 1760743156.833466 1760743157.5592577 1760743161.1552167 1760743171.198314 1760743175.1721282 1760743217.3190475 1760786575.1475165 1760786580.451427 1760786585.9220862 1760786592.0383992 1760786597.66885 1760786599.3244073 1760786612.9410458 1760786685.614658 1760786711.8526483 1760788122.718024 1760788130.2036352 1760788131.7925465 1760788133.8885221 1760788138.6973095 1760788141.6066995 1760788165.2763598 1760788262.0012178 1760793264.967267 1760793271.4599068 1760793272.682385 1760793279.1230643 1760793284.9563894 1760793289.1663685 1760793292.1584153 1760793320.8553169 1760793519.0003898 1760793524.6424658 1760793526.575326 1760793529.069538 1760793532.6066246 1760793537.5595367 1760793544.3480856 1760793560.866959 1760793674.0022 1760860124.4421682 1760860126.1444528 1760860133.036754 1760860145.1253457 1760860150.0040295 1760860157.6127007 1760860213.5287194 1760860254.2642376 1760860261.6253562 1760860413.0565133 1760869223.0697606 1760869226.7882934 1760869231.149606 1760869240.8386393 1760869244.1520154 1760869246.3574295 1760869254.6131852 1760869268.0096996 1760869301.3809862 1760869573.2066333 1760869576.4536045 1760869581.78191 1760869584.255531 1760869588.763384 1760869589.75701 1760869598.6541889 1760869601.4438689 1760869610.7774029 1760869698.1974425 1760938815.440873 1760938815.8425229 1760938822.7376003 1760938831.250733 1760938833.930654 1760938835.1285305 1760938835.796545 1760938843.6164384 1760938860.5747712 1760972532.9978673 1760972534.3429718 1760972540.7126017 1760972545.0473254 1760972554.6597133 1760972555.7788084 1760972557.0478446 1760972580.0633926 1760972657.9048338 1761060369.5720823 1761060374.0631437 1761060380.4744687 1761060381.3302562 1761060383.1159825 1761060385.4865553 1761060395.3019264 1761060581.2982967 1761060585.6111755 1761060590.0977602 1761060591.2101505 1761060593.1073785 1761060598.4627094 1761060618.359523 1761060624.4569325 1761060729.5115902 1761144853.0819714 1761144856.689801 1761144857.4272952 1761144857.989736 1761144859.7585185 1761144861.2797425 1761144880.3253202 1761144889.7398975 1761144947.037287 1761148048.739978 1761148050.631192 1761148052.721287 1761148054.8056633 1761148059.5820656 1761148063.3975248 1761148087.5545166 1761148090.5621092 1761148131.0594964 1761148229.1727126 1761212441.3152373 1761212442.0500846 1761212448.6663396 1761212456.9727566 1761212465.1971743 1761212471.6861997 1761212512.632466 1761212517.142052 1761212536.051563 1761212571.3813605 1761217281.3986537 1761217306.1535387 1761217313.6426508 1761217320.8573422 1761217330.3046353 1761217334.2626648 1761217357.7038624 1761217376.540221 1761217381.1343498 1761217475.373226 1761219269.170714 1761219276.183937 1761219278.1303427 1761219281.116449 1761219283.073473 1761219287.7204525 1761219309.497512 1761219312.9766653 1761219332.7687204 1761222439.838213 1761222442.6421044 1761222451.2844505 1761222453.0715046 1761222456.7843916 1761222458.6897311 1761222471.0094128 1761222480.8025346 1761222485.4113288 1761222529.244105 1761295100.522707 1761295102.4320357 1761295103.7916367 1761295111.0924425 1761295112.4658391 1761295118.298571 1761295128.6002736 1761295138.7218268 1761295176.1645088 1761311464.8069572 1761311466.517216 1761311469.0799317 1761311469.693539 1761311471.3626993 1761311472.9784894 1761311481.0966003 1761311498.1026597 1761311500.2232938 1761311525.0575533 1761383754.5454621 1761383757.3220978 1761383761.223058 1761383761.8817794 1761383769.4942296 1761383771.735202 1761383775.1095457 1761383780.9610267 1761383821.0147321 1761383893.7472773 1761408662.3846736 1761408664.6186817 1761408666.5762887 1761408667.3478622 1761408675.0225043 1761408677.9694781 1761408680.248723 1761408699.4657342 1761408707.8276389 1761408834.6558533 1761470753.6233206 1761470755.1946387 1761470760.2358305 1761470765.7691329 1761470774.8850012 1761470778.1507916 1761470784.4810855 1761470787.0317824 1761470798.0484314 1761470913.4951358 1761501822.1993885 1761501828.0765977 1761501834.5608828 1761501837.3458037 1761501842.1671865 1761501842.6012266 1761501849.8652487 1761501854.5500402 1761501944.6396515 1761568585.206552 1761568594.6564615 1761568597.3226542 1761568598.3210044 1761568600.2232356 1761568618.5227046 1761568630.444256 1761568663.0719657 1761568779.782653 1761568887.4298677 1761579967.571521 1761579969.10766 1761579970.350306 1761579975.7025917 1761579985.395596 1761579988.7035441 1761580001.1484468 1761580005.97187 1761580032.0797098 1761732621.0596154 1761732622.4862742 1761732624.583479 1761732641.1949139 1761732643.8280423 1761732667.5962641 1761732678.8320563 1761732708.341875 1761732739.0964832 1761732741.0047672 1761733333.6166253 1761733340.287924 1761733344.3041735 1761733349.9582686 1761733355.0360234 1761733363.931928 1761733369.92241 1761733497.7672007 1761733499.7289472 1761733502.6771982 1761733505.561072 1761733522.8919158 1761733524.7920578 1761733526.7814734 1761733536.03033 1761733559.1054711 1761733973.2625349 1761733974.8804538 1761733975.8670855 1761733983.4152267 1761733984.5874498 1761733985.617361 1761734000.0249293 1761734016.5178993 1761734058.1966867 1761739154.979861 1761739160.741309 1761739163.0372496 1761739165.1003692 1761739176.9402776 1761739183.5748458 1761739190.8559542 1761739198.0391276 1761739224.2763262 1761739651.787256 1761739659.5065682 1761739661.7434552 1761739662.7944498 1761739672.0530784 1761739674.6446283 1761739681.3101513 1761739881.4297092 1761753515.4783666 1761753519.595589 1761753528.9743803 1761753531.3077066 1761753532.3792512 1761753543.5615988 1761753555.2167263 1761753821.0167503 1761756820.567883 1761756822.7604883 1761756824.7155573 1761756829.902521 1761756831.3815246 1761756839.1349351 1761756844.7806425 1761756851.6347315 1761756864.8949487 1761757084.5832186 1761783971.8902345 1761783975.955501 1761783979.7629645 1761783982.5048652 1761783984.0125172 1761783994.9253206 1761784007.3848386 1761784007.9892821 1761784116.5959563 1761812842.0582845 1761812842.858573 1761812850.7051184 1761812853.665147 1761812856.4933705 1761812862.5699618 1761812863.5919237 1761812871.8366818 1761812980.4047241 1761813109.5922022 1761813119.0922732 1761813120.0996842 1761813125.9788857 1761813136.455482 1761813137.3587613 1761813144.156814 1761813404.6076884 1761815250.9121108 1761815253.333122 1761815261.2016864 1761815266.7144861 1761815274.8910897 1761815283.2405734 1761815285.803323 1761815313.78364 1761815315.6396675 1761816551.8261442 1761816556.620063 1761816560.7388778 1761816561.7038183 1761816563.653961 1761816571.7262235 1761816598.5983844 1761816603.679053 1761816616.107075 1761816982.505621 1761816983.3680015 1761816992.1575406 1761816995.186787 1761816996.6600037 1761816998.3273346 1761817012.2697558 1761817021.7558877 1761817048.4622328 1761818678.486974 1761818680.3207557 1761818683.0676215 1761818683.7666762 1761818696.0210476 1761818706.5787892 1761818717.8600068 1761818723.6918113 1761819171.0990624 1761828198.7066338 1761828202.5303748 1761828210.6003237 1761828231.9966207 1761828235.4440167 1761828238.9658937 1761828285.0829797 1761828339.8987975 1761828348.659788 1761828407.4981537 1761838695.6500044 1761838696.3330994 1761838699.4536595 1761838700.7025476 1761838710.6912897 1761838719.1276152 1761838856.688787 1761838862.4126012 1761838866.7453022 1761838872.676898 1761838876.31469 1761838881.1648023 1761838882.255903 1761838886.8290792 1761839034.2050247 1761839036.4394672 1761839041.3663592 1761839045.8587894 1761839046.9232655 1761839058.9090395 1761839063.191618 1761839064.4754827 1761839100.7322073 1761903364.8073344 1761903366.282132 1761903369.2671845 1761903373.6632118 1761903396.633601 1761903401.9476395 1761903425.4567928 1761907794.4028182 1761907798.267677 1761907802.7829356 1761907806.6542995 1761907808.755848 1761907810.6964827 1761907819.1398387 1761907819.9082677 1761907831.778921 1761907861.5249884 1761916175.7201128 1761916181.8167076 1761916183.6725361 1761916186.4976492 1761916188.5812843 1761916206.4783504 1761916210.9515936 1761916239.7759252 1761916244.5611362 1761916256.3694642 1761918708.0654619 1761918709.2721436 1761918710.4901214 1761918711.0832524 1761918717.9547687 1761918725.1858885 1761918729.5807498 1761918732.4273076 1761918748.7229514 1761918784.7492945 1761924853.904902 1761924930.7075958 1761924931.704748 1761924936.018988 1761924936.6370103 1761924950.064064 1761924951.2240555 1761924952.1859083 1761924964.102679 1761925061.6673362 1761931328.381721 1761931362.0425394 1761931366.6559973 1761931387.689871 1761931395.9854743 1761931443.699999 1761931449.67774 1761931483.457332 1761931525.4132876 1761932426.3424194 1761932438.22436 1761932440.9574938 1761932444.2187312 1761932445.4122531 1761932446.3095675 1761932449.411533 1761932450.8779695 1761932458.8442442 1761932554.581199 1761943206.0485408 1761943208.721901 1761943209.7145672 1761943231.8070157 1761943250.5338347 1761943258.9555643 1761943286.6451633 1761943316.8918748 1761943325.365103 1761943902.1533275 1761943904.2363207 1761943911.0530365 1761943911.9343462 1761943916.8543684 1761943929.6059718 1761943932.7973747 1761944032.3762949 1761972625.1348531 1761972631.2784424 1761972634.7716472 1761972636.1866002 1761972650.59014 1761972658.7792203 1761972697.2746897 1761998643.266348 1761998644.9597728 1761998651.870806 1761998655.6946402 1761998657.3297527 1761998675.5200093 1761998686.3667939 1761998782.1904857 1762002372.3393233 1762002383.5091453 1762002456.6738017 1762002463.6045744 1762002478.2381296 1762002483.4908178 1762002496.9344296 1762002503.075543 1762002641.5141308 1762003784.2051804 1762003786.6937287 1762003787.9662147 1762003804.7873077 1762003807.2316003 1762003818.263784 1762003867.0438159 1762004551.510921 1762004553.6924763 1762004560.7829566 1762004563.0963054 1762004565.8813064 1762004570.809282 1762004582.4673772 1762004704.970945 1762010469.8733897 1762010474.2603297 1762010480.9687178 1762010485.2649827 1762010489.78939 1762010505.1184232 1762010569.005523 1762011149.9099917 1762011151.630804 1762011153.7875993 1762011157.8205986 1762011159.814798 1762011164.3464637 1762011175.4887507 1762011192.3388321 1762011314.9134667 1762016545.3331056 1762016553.595649 1762016558.990784 1762016562.646232 1762016564.002207 1762016579.8990319 1762016585.4553425 1762016599.7099645 1762016717.1077857 1762016882.2061126 1762016885.560252 1762018726.31528 1762018727.0032678 1762018734.9585347 1762018738.825398 1762018743.6514335 1762018754.7986135 1762018765.327472 1762018870.7137697 1762020052.1141596 1762020057.0351884 1762020059.9044833 1762020065.3989885 1762020067.811667 1762020076.477097 1762020079.396898 1762020091.510058 1762020115.2351296 1762071057.9529824 1762071063.6751099 1762071066.499017 1762071067.3919523 1762071073.8159995 1762071091.9804113 1762071107.408353 1762071263.8868177 1762101819.8454258 1762101824.7539666 1762101829.8303137 1762101831.1636562 1762101838.2514503 1762101841.9861197 1762101853.6021614 1762101861.0454462 1762101911.296313 1762105806.2418687 1762105843.1352499 1762105848.6053684 1762105849.3388176 1762105857.7725208 1762105890.6376925 1762105928.2757473 1762105944.803276 1762105971.790727 1762108123.201678 1762108128.0310478 1762108135.0505812 1762108146.1856859 1762108155.7639487 1762108157.3915591 1762108167.899605 1762172555.87825 1762172564.126668 1762172577.4182642 1762172591.5535257 1762172618.802497 1762172627.0197368 1762172671.4228137 1762172710.2156913 1762172716.7204862 1762182285.9299097 1762182288.5652134 1762182291.2938004 1762182293.269225 1762182294.2326968 1762182303.8357842 1762182306.2251508 1762182321.2300313 1762182430.8417692 1762184529.1819077 1762184536.512359 1762184537.1591082 1762184537.760621 1762184539.0728261 1762184554.332873 1762184568.5305755 1762184589.301031 1762184609.7697651 1762200904.005787 1762200907.18115 1762200913.502514 1762200914.23389 1762200917.573258 1762200921.9871643 1762200928.988474 1762200931.0818367 1762200967.8282592 1762209280.490971 1762253101.193741 1762253107.0873806 1762253110.1899955 1762253115.4174728 1762253129.0361514 1762253133.7874737 1762253162.8910217 1762253182.9230866 1762253184.2797866 1762260330.9593165 1762260333.0245092 1762260339.4750998 1762260341.6916134 1762260343.3884668 1762260348.187566 1762260355.5107586 1762260363.932035 1762260505.9395063 1762287891.7447214 1762287897.3504825 1762287900.7250962 1762287906.7337685 1762287908.2938457 1762287909.971187 1762287927.4461327 1762287984.259216 1762422474.7089126 1762422475.465572 1762422482.2303576 1762422486.473266 1762422488.7677093 1762422489.7465184 1762422497.7767348 1762422511.8179455 1762422593.4148452 1762436140.7360206 1762436146.750907 1762436148.420587 1762436149.0124712 1762436151.6360707 1762436164.3627691 1762436166.0090265 1762436216.9200459 1762522496.3923283 1762522499.0286534 1762522500.3733065 1762522500.8749893 1762522502.2203865 1762522503.506489 1762522524.1964445 1762522526.187269 1762522572.350876 1762604641.8171883 1762604642.384963 1762604643.5394833 1762604652.4941573 1762604663.9734704 1762604681.0171967 1762604706.881941 1762604717.9407048 1762604738.9008565 1762616292.5187433 1762616350.6337602 1762616377.5028427 1762616440.264139 1762616453.3365035 1762616457.5079691 1762616461.5424132 1762616478.7812738 1762616616.4936285 1762621980.1461287 1762621980.8402362 1762621985.1854296 1762621987.6974733 1762621989.4274623 1762621992.8795457 1762621995.4352868 1762622132.197382 1762622133.042379 1762622142.6368914 1762622143.8745382 1762622146.6899445 1762622156.4792702 1762622157.5314913 1762622204.3318274 1762622591.3178737 1762622593.5971794 1762622596.546724 1762622598.5373664 1762622614.1202447 1762622617.400571 1762622636.2234461 1762622636.7881298 1762622682.3763316 1762623186.3071823 1762623189.6776576 1762623193.4851882 1762623195.928299 1762623199.3596818 1762623201.9214406 1762623205.9429522 1762623215.2832174 1762623330.8150814 1762685883.0941963 1762685903.8723197 1762685927.283401 1762685936.761773 1762685958.2256646 1762685984.6082613 1762685999.784007 1762686016.7443185 1762686040.941506 1762686604.1537943 1762686605.0731802 1762686607.4993882 1762686618.869133 1762686620.846673 1762686632.4037566 1762686636.965218 1762686660.1538556 1762687486.9320269 1762687504.2483954 1762687507.263849 1762687513.4480598 1762687513.9274237 1762687521.5279539 1762687523.2285419 1762687632.7838094 1762687713.467016 1762689993.6343405 1762689998.1456513 1762690000.826434 1762690006.796545 1762690010.5455694 1762690014.0553174 1762690023.0149443 1762690026.3884199 1762690050.6457598 1762690601.9759095 1762690603.5830753 1762690604.9104593 1762690617.4960287 1762690618.9582949 1762690621.2141972 1762690624.0565562 1762690635.8852017 1762695377.9534924 1762695379.8920557 1762695387.0601099 1762695389.252808 1762695390.468865 1762695402.8316972 1762695499.562626 1762695529.2544737 1762709105.3129528 1762709108.0436068 1762709117.5377827 1762709118.5359573 1762709127.5769272 1762709128.4510138 1762709132.7309337 1762709163.794322 1763297062.6462157 1763297063.718993 1763297064.156321 1763297066.0391867 1763297069.557291 1763297080.286124 1763297086.3967721 1763297087.650356 1763299191.865496 1763299192.9348702 1763299198.4212236 1763299199.801592 1763299204.5713706 1763299209.050733 1763299219.0118797 1763299227.9297895 1763302380.1910982 1763302382.197532 1763302383.6581008 1763302392.1376574 1763302398.1155136 1763302403.0585613 1763302407.618657 1763302416.5956852 1763302419.1865063 1763302793.966636 1763302795.4213364 1763302797.1293983 1763302797.9772894 1763302801.348963 1763302803.8687665 1763302810.6713228 1763302816.0434008 1763302819.5563455 1763303612.8964972 1763303614.4866087 1763303617.5355716 1763303620.0610914 1763303622.02864 1763303626.9398384 1763303630.710819 1763303638.1577716 1763303643.232244 1763308113.9014347 1763308122.4819312 1763308140.4671648 1763308145.2055862 1763308146.7704184 1763308168.3040445 1763308181.1838708 1763308182.6945477 1763308218.14928 1763382992.5026288 1763382994.5812373 1763383067.165341 1763383082.5999503 1763383088.843485 1763383110.3557034 1763383170.7782712 1763383210.6378741 1763383246.8616576 1763386839.210291 1763386839.9151208 1763386844.3694417 1763386848.766369 1763386849.4183211 1763386850.6483958 1763386855.4940298 1763386862.358006 1763386867.5119295 1763389241.0266955 1763389285.7207963 1763389309.7197878 1763389314.1105762 1763389321.9944794 1763389335.3969219 1763389381.59872 1763389386.467899 1763389390.7888556 1763546239.090256 1763546239.7797186 1763546252.0421507 1763546253.0514424 1763546255.3455715 1763546265.2387855 1763546269.9594424 1763546272.4304173 1763642042.9531288 1763642044.3326356 1763642048.0169668 1763642049.6969402 1763642057.2456183 1763642064.7353468 1763642065.2131665 1763642073.5537636 1763642080.0179844 1763659926.9954894 1763659930.3687325 1763659935.5686922 1763659937.5839558 1763659958.96232 1763659963.6969051 1763660103.7222788 1763660120.1527593 1763660133.9003205 1763789923.6157908 1763789934.517366 1763789942.4983094 1763789954.7262015 1763790034.771286 1763790041.4361985 1763790045.903533 1763790079.5756056 1763795168.8845222 1763795172.1928253 1763795173.0381145 1763795180.4388633 1763795182.2695243 1763795185.2208147 1763795201.8603241 1763795207.6413875 1763919853.1434977 1763919863.9553008 1763919864.5607672 1763919866.6655488 1763919871.3080835 1763919880.8117497 1763919882.552756 1763920697.2940915 1763952872.7848387 1763952876.492404 1763952879.5763636 1763952881.379629 1763952884.1267953 1763952890.6836202 1763952892.4930377 1763952893.4756386 1763987125.6737487 1763987126.725239 1763987144.1404214 1763987154.748037 1763987199.961115 1763987216.088118 1763987231.719802 1763987310.7274327 1763987366.2468972 1764011072.3707397 1764011072.9961948 1764011077.8855467 1764011079.9896512 1764011083.0571504 1764011090.3551934 1764011100.6690629 1764011915.3394165 1764218186.5586534 1764218189.3324022 1764218190.2522562 1764218204.7683747 1764218208.701724 1764218210.0649126 1764218218.7979891 1764340315.2158823 1764340321.8420427 1764340324.050802 1764340327.1663163 1764340329.2468398 1764340332.0343747 1764340335.1212754 1764360876.3445911 1764360884.9453511 1764360899.9534636 1764360901.9353132 1764360905.4604099 1764360906.0657322 1764360950.4120343 1764361027.9019718 1764361037.5838752 1764363073.981725 1764363075.6741886 1764363079.0219173 1764363095.41827 1764363098.2861693 1764363124.3888063 1764363142.6363301 1764363219.1545677 1764363241.7134886 1765187032.8380136 1765187035.453364 1765187042.338773 1765187044.5671895 1765187045.9196754 1765187047.8885398 1765187051.2035475 1765187058.7123928 1765187060.6759374 1765355427.1373546 1765355428.2110195 1765355429.8868406 1765355444.2209935 1765355448.3313894 1765355449.6444044 1765355463.7727923 1765355509.568022 1765360614.6304975 1765360627.278244 1765360699.6176698 1765360700.3069332 1765360702.7569158 1765360727.5694447 1765360734.068348 1765360738.853782 1765360751.4475017 1765365473.0148964 1765365476.4291492 1765365477.6918364 1765365485.5428207 1765365488.3033526 1765365496.4341197 1765365499.204723 1765365501.9174285 1765365509.546715 1765557509.2392964 1765557517.8780813 1765557523.434449 1765557525.9953475 1765557530.5092058 1765557550.3774416 1765557576.56148 1765557638.3009307 1765634922.4164693 1765640546.4406013 1765640555.8154743 1765640569.9443984 1765640571.8285775 1765640589.8454623 1765640597.2192576 1765640600.685116 1765640601.791428 1765643204.8700292 1765643206.6251795 1765643210.194346 1765643213.5972345 1765643216.0359607 1765643223.1245673 1765643235.8558447 1765643236.6084464 1765643237.377273 1765643461.6558518 1765643465.6197562 1765643468.7124977 1765643470.595265 1765643471.002281 1765643474.730295 1765643477.3206208 1765643484.8833282 1765644898.6106436 1765644899.5319552 1765644904.2567694 1765644907.0171332 1765644907.4870572 1765644909.9574072 1765644922.176685 1765644923.162431 1765644925.752624 1765650682.681714 1765650807.9693182 1765650812.0510752 1765650814.6558144 1765650815.0367496 1765650815.822579 1765650817.1819093 1765650840.9738505 1765650841.5835085 1765723890.041584 1765723901.878552 1765723913.9920568 1765723940.7441728 1765723953.6822717 1765723965.2455328 1765723975.6101594 1765723981.7978325 1765723998.121029 1765801572.220802 1765801586.4000347 1765801589.783504 1765801601.659667 1765801611.0200794 1765801676.5740016 1765801689.931427 1765879653.3422017 1765879654.6520367 1765879655.818434 1765879665.157804 1765879674.2655952 1765879727.529927 1765879740.0749133 1765879756.2488542 1765879767.9327204 1765880050.2235658 1765881066.7586555 1765881071.0245862 1765881071.5761216 1765881074.3021216 1765881077.7869434 1765881082.084883 1765881098.7095683 1765881099.5209198 1765890220.8121464 1765890223.076022 1765890229.5600839 1765890230.3226686 1765890234.1518707 1765890234.8996077 1765890240.9570239 1765890254.1053715 1765904461.6480265 1765904469.4855177 1765904473.118679 1765904476.6461954 1765904481.4827998 1765904482.7578373 1765904571.3059204 1765904580.1127 1765904624.410078 1766060957.0203218 1766060959.152164 1766060969.126864 1766060969.7474778 1766060987.2880044 1766060989.7890246 1766061003.9739647 1766061014.4612226 1766125832.056241 1766125835.0174904 1766125842.5458252 1766125847.860071 1766125850.0030906 1766125862.1761515 1766125863.6121485 1766125866.3684192 1766175187.6213129 1766175189.7560964 1766175192.2463057 1766175198.3198903 1766175203.6143293 1766175217.1426938 1766175278.720896 1766175281.0863192 1766925258.8068514 1766925261.8128085 1766925263.4731135 1766925264.5417693 1766925273.9132488 1766925280.2520475 1766925286.0638998 1766925295.908001 1766996858.593534 1766996859.3148115 1766996862.3900332 1766996863.9632237 1766996866.002261 1766996937.9445057 1766996946.8544555 1766996953.7118356 1766996998.3924599 1767005750.2315245 1767005752.713343 1767005753.7751043 1767005757.1741123 1767005760.8929029 1767005762.1786122 1767005765.7549138 1767005778.0547214 1767008189.6399276 1767008192.654333 1767008193.6334174 1767008194.1320896 1767008208.67269 1767008238.5539753 1767008258.371955 1767008359.6306872 1767008476.939767 1767008478.8546765 1767008479.2277246 1767008487.6395764 1767008494.452409 1767008496.4467835 1767008503.1518207 1767008505.3925378 1767008664.5282934 1767008670.6300914 1767008679.8526978 1767008681.2375803 1767008682.3679552 1767008686.4423952 1767008695.2620165 1767008696.4385452 1767008704.9496138 1767009731.1481624 1767009736.6050348 1767009738.860095 1767009741.8063154 1767009743.983117 1767009746.3949685 1767009758.005734 1767009765.2569134 1767010364.389463 1767010368.3234975 1767010376.3448942 1767010377.593191 1767010504.9921572 1767010505.7261412 1767010510.4794931 1767010512.9828248 1767010527.2291083 1767010529.7752872 1767010535.682247 1767013234.505958 1767013236.1389487 1767013238.1251016 1767013241.8454356 1767013242.544342 1767013247.3394504 1767013252.5731487 1767013256.2700813 1767013268.1770554 1767014261.9281383 1767014266.5664349 1767014267.77517 1767014285.8610258 1767014294.4500647 1767014298.7737455 1767014357.5287437 1767014364.8542192 1767014365.1898136 1767015032.0413318 1767015036.6794896 1767015037.0758255 1767015038.859089 1767015043.0507755 1767015043.795858 1767015058.7398818 1767015095.810186 1767015154.788291 1767016332.7769127 1767016341.7485373 1767016342.9278643 1767016343.4213676 1767016348.1831532 1767016356.9269874 1767016359.0096195 1767086066.2820609 1767086068.4097233 1767086104.5986426 1767086129.9135897 1767086146.020534 1767086154.2456412 1767086191.4983408 1767086194.8544183 1767086207.8455625 1767091900.6769624 1767091903.20487 1767091907.0771337 1767091911.2956107 1767091912.657855 1767091913.5171046 1767091917.2010088 1767091917.9127343 1767091923.4502337 1767092144.3763077 1767092144.6971657 1767092149.4341872 1767092150.4952488 1767092152.413446 1767092154.7418704 1767092167.4040303 1767092176.555279 1767092757.8919811 1767092759.227804 1767092761.611345 1767092765.8312247 1767092766.121263 1767092767.1874857 1767092779.6019578 1767092785.9529996 1767092787.807154 1767093406.5766206 1767093411.6432137 1767093416.292331 1767093416.841238 1767093420.1784983 1767093428.7357821 1767093430.451345 1767093437.9603465 1767270196.5264738 1767270198.6590161 1767270199.2853298 1767270202.7026517 1767270205.0109453 1767270212.2577412 1767270213.599389 1767270219.447361 1767270237.6540856 1767408777.352056 1767408779.8253002 1767408783.4031243 1767408786.606049 1767408792.9385245 1767408806.0961204 1767408808.6286788 1767450463.487253 1767450468.0185769 1767450469.3266888 1767450477.658307 1767450479.7213383 1767450487.8546865 1767450494.1723776 1767450504.1038587 1767523570.7468324 1767523573.4585876 1767523575.5568817 1767523578.0597918 1767523579.9227304 1767523580.686402 1767523584.8810203 1767523598.5700417 1767523599.3585181 1767524360.418623 1767524367.86007 1767524370.6017756 1767524371.3623307 1767524373.1854727 1767524377.3173368 1767524383.0169208 1767524387.166389 1767526612.655363 1767526620.893646 1767526666.0753863 1767526741.7127984 1767526760.5003262 1767526761.18435 1767526781.8502042 1767526808.215066 1767526846.9572792 1767540381.7925 1767540385.6660693 1767540389.1432114 1767540390.0299299 1767540391.0120437 1767540392.6561732 1767540396.2349198 1767540400.0953155 1767540407.0494602 1767603125.4719348 1767603129.6360354 1767603132.9295096 1767603136.400303 1767603139.1755438 1767603142.2036078 1767603146.9356022 1767603158.5485249 1767608453.8039553 1767608457.8362336 1767608473.1001418 1767608488.1931834 1767608525.184708 1767608547.776067 1767608574.4276385 1767608589.07131 1767608625.029423 1767609758.056628 1767609766.2764363 1767609770.6267624 1767609774.770277 1767609783.1370986 1767609784.4607327 1767609785.6430619 1767779970.3057816 1767779971.8273609 1767779974.343106 1767779975.9782546 1767779977.4753609 1767779978.2106094 1767779987.0569248 1767779988.502298 1767779992.3459094 1767781824.669599 1767781826.8218884 1767781830.172712 1767781832.6331336 1767781833.5870175 1767781838.157459 1767781849.438812 1767781855.110409 1767781856.0296986 1767783173.776942 1767783174.918709 1767783178.598568 1767783183.0167508 1767783185.1235716 1767783187.9137797 1767783190.6841505 1767783192.9388943 1767783194.3727446 1767789950.2846448 1767789950.780807 1767789951.7242458 1767789952.1188505 1767789954.9040453 1767789958.2523339 1767789964.9183238 1767789971.6630306 1767789988.1764913 1767794790.8767462 1767794797.9905484 1767794799.6897795 1767794800.677061 1767794803.3192046 1767794804.7557886 1767794810.129956 1767794817.6165998 1767794881.6264374 1767797113.9344013 1767797117.1024604 1767797119.4598038 1767797124.4368665 1767797125.005286 1767797125.6584253 1767797129.4499178 1767797142.6675413 1767804596.0774035 1767804597.0101094 1767804601.0117264 1767804601.8242528 1767804608.4628296 1767804615.409722 1767804626.2616994 1767804628.0655315 1767805286.2890604 1767805290.1657245 1767805294.8932576 1767805298.5421705 1767805300.1252146 1767805310.2346702 1767805311.8608637 1767806446.308764 1767806447.263031 1767806448.0307293 1767806449.6280806 1767806453.1115158 1767806455.2822442 1767806464.841296 1767806470.414619 1767806472.2149243 1767862534.1300757 1767862537.0822213 1767862538.015854 1767862540.5166407 1767862541.1621358 1767862543.53903 1767862548.4412358 1767862552.0026646 1767862559.5569992 1767875049.769152 1767875056.1616 1767875057.091702 1767875057.7781708 1767875063.8182845 1767875067.8484592 1767875072.015592 1767875084.231258 1767876200.634965 1767876205.9777443 1767876210.1790633 1767876211.1054254 1767876216.819659 1767876222.141576 1767876406.389355 1767876441.8357987 1767876482.82653 1767876492.9608855 1767876495.5181966 1767876505.5005298 1767876518.0242822 1767876543.5972047 1767876623.2839305 1767878590.5782363 1767878597.0823655 1767878600.7762733 1767878602.9763505 1767878607.4425566 1767878610.740943 1767880829.6364706 1767880836.354983 1767880837.814495 1767880838.7678552 1767880844.222659 1767880847.8437169 1767880853.18519 1767880861.3127449 1767880864.864189 1767886085.2988107 1767886100.009519 1767886110.4870822 1767886157.126238 1767886211.455036 1767886227.9047942 1767886239.5314128 1767886248.4401996 1767886269.623906 1767887877.780074 1767887879.653932 1767887883.437103 1767887884.8039067 1767887888.9499557 1767887890.333735 1767887897.9374743 1767887900.5198562 1767887902.473257 1767888586.8256478 1767888590.6860585 1767888592.5849898 1767888594.1425657 1767888596.96389 1767888598.0899355 1767888610.4946456 1767888611.4842644 1767888621.0345175 1767894668.1983907 1767894670.6740375 1767894672.3232863 1767894676.8063247 1767894680.8864522 1767894687.7080142 1767894691.1440587 1767894693.037532 1767894706.8682427 1767896385.028477 1767896385.6117723 1767896393.1601806 1767896394.332155 1767896396.101103 1767896400.9222782 1767896402.012056 1767896409.3551488 1767896414.0472367 1767954456.721825 1767954463.118075 1767954466.2569473 1767954467.282363 1767954471.615229 1767954472.5900018 1767954479.6348743 1767954481.8718064 1767954485.2681139 1767965138.1393619 1767965143.4655793 1767965147.434867 1767965148.9427965 1767965156.3537724 1767965167.2213993 1767965169.49993 1767970290.6593683 1767970292.970802 1767970298.57375 1767970299.585969 1767970337.0942743 1767970372.4892268 1767976666.6998365 1767976673.101222 1767976675.6020813 1767976679.096784 1767976683.9167645 1767976687.3609555 1767976713.1541333 1767976719.0766773 1767976725.1059823 1767978117.2996187 1767978120.0221531 1767978122.7937603 1767978123.5929458 1767978129.2806196 1767978141.6026158 1767978142.2001743 1767978146.1618307 1767979940.4418714 1767979943.6162307 1767979945.0338674 1767979946.6955743 1767979949.2711825 1767979955.3020587 1767979962.6219144 1767979967.7086596 1767982298.8471909 1767982300.1005816 1767982303.920526 1767982307.4450893 1767982311.7769759 1767982313.248131 1767982316.173381 1767982324.9440858 1767982325.6764736 1768045869.2330077 1768045870.236356 1768045872.2891514 1768045874.5468063 1768045881.3387985 1768045884.8452904 1768045889.1161494 1768045897.4951403 1768045902.8267422 1768048025.6877735 1768048027.7286327 1768048029.5608556 1768048032.5990238 1768048044.1846335 1768048050.7798657 1768048062.4111714 1768048065.024833 1768053088.504781 1768053113.4159126 1768053117.7720275 1768053144.3447492 1768053146.5680668 1768053147.6142244 1768053159.8059928 1768053169.9699647 1768053172.8624737 1768053292.9160326 1768053294.911726 1768053296.1000555 1768053299.749482 1768053300.7807405 1768053302.7820969 1768053313.845262 1768053317.4048727 1768053330.3916922 1768053588.9192967 1768053589.8108206 1768053595.3978446 1768053614.1973078 1768053615.303289 1768053615.9164264 1768053627.2831788 1768053639.0435984 1768056937.9889069 1768056943.7953987 1768056976.7951229 1768057046.8843918 1768057085.6750104 1768057101.4190998 1768057109.3534727 1768057119.7842429 1768057136.5627928 1768079666.113722 1768079668.6683514 1768079673.4090157 1768079675.4893627 1768079685.4717195 1768079685.8670487 1768079690.291896 1768079692.9432077 1768079697.3771555 1768086168.1487443 1768086176.3513515 1768086177.216495 1768086177.898571 1768086179.6137946 1768086182.7242186 1768086192.3760135 1768086192.740066 1768086212.396135 1768134697.2728767 1768134704.8010283 1768134707.7121792 1768134708.0560768 1768134711.1750917 1768134713.4217865 1768134713.7260768 1768134715.5332298 1768134728.5465925 1768294912.787784 1768294915.6571844 1768294916.5206225 1768294917.7396455 1768294920.193792 1768294928.9164357 1768294930.5203264 1768294931.5069704 1768294943.4769967 1768308426.7526467 1768308431.2754452 1768308432.647019 1768308435.5231614 1768308439.2533436 1768308441.8660333 1768308447.0069115 1768308460.593248 1768324698.3590894 1768324700.4846914 1768324751.4691803 1768324765.183994 1768324772.6904168 1768324782.8927166 1768324798.4914553 1768324839.4870424 1768324874.4531574 1768384225.4799273 1768384229.7895231 1768384230.484599 1768384233.816662 1768384238.3189883 1768384248.4386628 1768384252.7716544 1768384261.2794209 1768384806.177688 1768384809.5460305 1768384811.4714494 1768384816.6815825 1768384819.9323728 1768384828.6584098 1768384830.7775512 1768384831.721024 1768384838.19614 1768393401.9596107 1768393405.5755694 1768393406.0980704 1768393406.9103317 1768393414.240275 1768393420.344335 1768393423.9467418 1768393424.9939027 1768393946.0471222 1768393947.9344432 1768393948.3867533 1768393956.1279247 1768393956.8507793 1768393957.677266 1768393964.51897 1768393969.2088404 1768393979.8658965 1768406697.5229118 1768406700.0978663 1768406708.7858956 1768406710.7479894 1768406711.659276 1768406714.616408 1768406717.5029907 1768406718.8020518 1768407432.1623812 1768407433.9276476 1768407438.4175367 1768407446.9722466 1768407451.619536 1768407452.932411 1768407455.5550284 1768407461.7541678 1768407470.464264 1768466929.7111862 1768466930.7620823 1768466939.288962 1768466949.7309234 1768466955.0143619 1768466958.2070162 1768466967.4488463 1768551779.1706276 1768562169.41472 1768562181.1047812 1768562189.7693236 1768562190.8138013 1768562197.070462 1768562200.7975888 1768562202.7073588 1768562205.321664 1768562208.3421023 1768610272.5089388 1768610273.9870481 1768610274.6940825 1768610277.9353135 1768610285.045674 1768610290.080227 1768610296.824196 1768610306.0538583 1768648520.2463694 1768648524.3537803 1768648526.0771394 1768648529.4067469 1768648534.5302858 1768750756.6713378 1768750760.8883185 1768750762.2632756 1768750763.0123136 1768750763.9212747 1768750769.8994906 1768750772.5732853 1768750777.4850461 1768752413.340801 1768752420.6023462 1768752422.6215243 1768752425.7867491 1768752427.6385326 1768752429.650268 1768752431.0732105 1768752441.6148021 1768752447.8566244 1768754200.131358 1768754211.6892462 1768754212.3077621 1768754216.445737 1768754220.9125214 1768754225.1230843 1768754225.6267507 1768754245.372674 1768796002.133248 1768796010.3023002 1768796011.5949295 1768796015.0323164 1768796015.8145432 1768796019.2814276 1768796026.593093 1768796031.6583393 1768796033.0877004 1769188837.0375812 1769188837.786761 1769188847.6208885 1769188851.0616503 1769188854.4203012 1769188859.236143 1769188871.306891 1769356115.074438 1769356117.2475653 1769356138.9818916 1769356139.6534898 1769356182.5385997 1769356183.954588 1769356185.6475754 1769356198.3801432 1769431198.390828 1769431201.5240662 1769431206.2080142 1769431206.6666946 1769431207.3521287 1769431209.8815796 1769431211.4100068 1769431213.8480275 1769431217.1288738 1769520574.57131 1769520580.9615748 1769520583.5518386 1769520584.6905546 1769520585.5634441 1769520599.9041538 1769520600.6451283 1769520627.5367892 1769520670.975549 1769599648.6679952 1769599655.1322901 1769599664.7568235 1769599666.4479232 1769599667.6139998 1769599682.9860744 1769599684.0950832 1769601234.0402722 1769601238.249395 1769601244.869996 1769601245.8162582 1769601257.4308686 1769601257.9740627 1769601260.8389282 1769601263.5695539 1769601271.478781 1769602947.2968462 1769602955.2546017 1769602959.1448636 1769602963.4101026 1769602970.7160242 1769602973.4823887 1769602981.6378336 1769602989.1562142 1769608598.3435633 1769608604.2349756 1769608604.601876 1769608605.4494705 1769608611.9154606 1769608617.0367196 1769608624.0631845 1769608627.4674208 1769608640.567906 1769610568.8423088 1769610570.6535783 1769610572.2760155 1769610574.9860072 1769610586.6524737 1769610584.3325677 1769610585.0414965 1769610603.931985 1769610612.5651 1769613447.7525485 1769613452.023495 1769613455.6614032 1769613474.061038 1769613477.762277 1769613522.2723105 1769613574.9480097 1769613575.9668584 1769613618.426645 1769726028.804288 1769726032.290003 1769726034.8757539 1769726041.8972003 1769726044.0577905 1769726045.1911438 1769726055.1641352 1769754949.819708 1769754950.1370707 1769754954.8530273 1769754958.0237353 1769754960.5883057 1769754966.0287259 1769754972.351571 1769754974.738888 1769754977.4281905 1769788282.907655 1769788288.5253084 1769788289.849481 1769788293.4059806 1769788295.6611738 1769788308.423529 1769788312.2817266 1769858473.3065324 1769858484.3433414 1769858555.512316 1769858647.5416012 1769858704.5140238 1769858713.3436747 1769858778.3269293 1769858802.0247488 1769858808.7230027 1769941971.4940948 1769941972.732963 1769941977.5641046 1769941982.1623034 1769941982.645791 1769941987.1513543 1769941988.775115 1769941990.5303235 1769950644.8137155 1769950646.2848487 1769950650.8295712 1769950652.0341804 1769950653.6078181 1769950660.5014696 1769950663.2128892 1769950670.5772336 1769950681.001842 1770017224.4015572 1770017226.0972135 1770017227.5026927 1770017231.749207 1770017242.5412765 1770017252.5441816 1770017271.3818393 1770029567.1518002 1770029570.340307 1770029573.6867454 1770029564.3587599 1770029577.2411828 1770029579.9578333 1770029583.1690521 1770029584.482004 1770029593.8162978 1770035028.269459 1770035041.1115882 1770035049.301453 1770035056.7874146 1770035063.4050725 1770035065.1114447 1770035065.5057907 1770035066.744156 1770035070.5860257 1770051243.1616974 1770051250.1983073 1770051251.8492804 1770051252.817322 1770051253.8113017 1770051261.6732495 1770051263.4817977 1770051287.4125712 1770051294.594631 1770054466.1206534 1770054467.1777632 1770054473.0102155 1770054474.1452157 1770054475.1106331 1770054477.808786 1770054483.3615644 1770054489.1622334 1770054493.8870437 1770155681.8264794 1770155688.659341 1770155691.0762267 1770155691.5853927 1770155693.353376 1770155701.8069544 1770155776.465049 1770155813.0368989 1770155847.1930277 1770156004.0932982 1770156009.3996131 1770156012.5004926 1770156014.5202863 1770156019.0435586 1770156023.4328444 1770156024.366795 1770156029.4199026 1770156036.9079852 1770198504.7005956 1770198505.974699 1770198510.613558 1770198516.2578535 1770198519.501817 1770198520.6840563 1770198522.328126 1770198523.844168 1770216381.141068 1770216384.9809282 1770216386.078784 1770216388.4733496 1770216397.7242239 1770216398.7499428 1770216405.7132208 1770216407.6655917 1770216464.6069107 1770285838.4310648 1770285839.4047208 1770285845.1482618 1770285847.8905082 1770285841.2767158 1770285852.6968825 1770285861.5700352 1770285864.8976052 1770285866.8076255 1770286841.6262429 1770292963.8278131 1770292966.564227 1770292977.1111255 1770292978.987983 1770292983.425502 1770292985.7778904 1770292992.654737 1770293005.2807176 1770293727.1439166 1770293736.492512 1770293742.9712944 1770293748.1470556 1770293750.9539392 1770293753.1042962 1770293754.1672068 1770293755.9334252 1770293762.1849937 1770294177.6031017 1770294179.2221286 1770294182.409861 1770294185.4034204 1770294189.954195 1770294192.2262456 1770294195.2364454 1770294209.3209252 1770294216.7605686 1770296074.3093114 1770296079.5112505 1770296085.0671687 1770296089.0901968 1770296091.5357335 1770296093.746994 1770296103.4383368 1770296115.1115165 1770296116.7188926 1770299387.0234706 1770299393.734676 1770299396.5552564 1770299397.9449227 1770299398.405942 1770299406.1220129 1770299411.0808227 1770299418.005087 1770304628.2581263 1770304632.1874857 1770304635.5848792 1770304637.4246569 1770304645.8792233 1770304652.500186 1770304796.5059683 1770304805.3266668 1770304805.9559672 1770306998.81128 1770352891.2765408 1770352956.2453735 1770352986.6446555 1770353015.8254614 1770353024.4290829 1770353034.2017062 1770353118.7308602 1770353204.512918 1770353218.492321 1770367607.3939998 1770367610.0111365 1770367614.45688 1770367615.195527 1770367615.6579452 1770367618.4807427 1770367627.2286937 1770367641.6742887 1770367688.8227878 1770375402.595021 1770375403.2182865 1770375406.9050174 1770375407.8124533 1770375411.0714655 1770375418.803763 1770375419.6336913 1770375426.5908537 1770375438.3355699 1770377679.8791206 1770377685.893547 1770377691.212522 1770377694.2193422 1770377700.6231124 1770377707.430232 1770388325.7926264 1770388332.1394527 1770388335.5754883 1770388338.1641219 1770388485.2298472 1770388486.7889037 1770388498.7128625 1770388510.505477 1770388524.7809443 1770448313.438776 1770448313.9616911 1770448318.2289886 1770448319.6247897 1770448320.5280318 1770448321.4971566 1770448326.5257752 1770448328.488793 1770448349.434152 1770474541.5718706 1770474662.913524 1770474669.9453278 1770474672.0780892 1770474675.1842391 1770474678.9146457 1770474687.7994618 1770474688.8756824 1770474691.3726463 1770474692.9100966 1770481605.699769 1770481608.6086423 1770481611.768069 1770481613.7110043 1770481624.7046242 1770481630.5988204 1770481631.8143861 1770481637.0272915 1770482484.29333 1770482491.0655518 1770482497.2632189 1770482497.7695203 1770482498.5569618 1770482502.8524082 1770482505.567013 1770482508.9287205 1770482525.3033104 1770488366.9155667 1770488370.9018245 1770488372.2807295 1770488380.6067863 1770488380.9800029 1770488384.2862618 1770488384.7730534 1770488387.3612244 1770547755.0958505 1770547759.2344968 1770547760.8083112 1770547764.0160139 1770547767.344153 1770547769.2391427 1770547775.804789 1770547787.0251117 1770552981.288764 1770553003.9997299 1770553069.368204 1770553083.7589478 1770553087.3663883 1770553088.7641938 1770553093.710568 1770553094.2635589 1770553127.7866013 1770630887.801219 1770630892.8695138 1770630895.7021675 1770630897.280305 1770630898.801555 1770630909.526364 1770630962.881308 1770630966.585008 1770630973.0093026 1770639812.003858 1770639817.971794 1770639830.878849 1770639886.5446465 1770639892.9692142 1770639894.882578 1770639896.724656 1770639904.0340664 1770639918.555993 1770666463.2497134 1770666489.4294336 1770666494.062041 1770666543.0114794 1770666596.8524406 1770666637.062504 1770666660.894903 1770678196.9051228 1770678200.1169786 1770678203.065707 1770678293.564291 1770678296.2945912 1770678299.3110435 1770678306.325338 1770678318.2274911 1770678330.3257508 1770713495.7730114 1770713496.5848763 1770713497.807587 1770713498.528954 1770713507.7146904 1770713515.1544588 1770713517.8683257 1770713540.7203977 1770808063.4899719 1770808066.430682 1770808070.9095547 1770808073.9356825 1770808075.619688 1770808077.9274998 1770808093.0801852 1770808095.7556472 1770808891.1125565 1770808892.6134186 1770808898.3738124 1770808900.2658844 1770808901.484776 1770808909.4623446 1770808912.6182282 1770808916.8051906 1770808917.5748165 1770809447.4234073 1770809452.9602368 1770809453.6279988 1770809454.0772502 1770809455.1354978 1770809455.6678789 1770809456.6628273 1770809465.8118029 1770809469.5300505 1770810357.3477256 1770810359.343377 1770810362.88448 1770810363.456319 1770810371.1891587 1770810377.7186735 1770810392.244661 1770810406.1654177 1770899096.5793927 1770899098.3827033 1770899101.0838323 1770899102.4842598 1770899104.6827645 1770899111.809342 1770899112.9919648 1770899128.6597016 1770899248.5425107 1771076341.0126917 1771076343.506212 1771076350.479432 1771076351.6451955 1771076356.9553094 1771076366.3930233 1771076377.9620905 1771153613.0499876 1771153615.8472834 1771153620.339606 1771153633.8619168 1771153650.6205938 1771153687.2132227 1771153708.54045 1771153716.4352381 1771164876.0520263 1771164879.5962496 1771164880.594281 1771164884.0660386 1771164886.7604036 1771164904.1516867 1771164906.802209 1771164908.281534 1771165042.0703905 1771165045.7845407 1771165046.2814014 1771165047.8980622 1771165061.7444115 1771165066.7939172 1771174013.7134352 1771174015.9087002 1771174018.5526137 1771174020.0801136 1771174022.5137017 1771174027.8996327 1771174030.041202 1771174031.6948006 1771174038.2379742 1771175143.8134773 1771175149.462427 1771175151.9771097 1771175153.8716705 1771175157.0586224 1771175159.955862 1771175161.3851736 1771175295.0077727 1771175296.0930247 1771175300.7326233 1771175301.8456702 1771175303.9392393 1771175306.2821484 1771175309.090323 1771175318.9579391 1771175322.8382182 1771176996.9813175 1771177000.1674964 1771177002.6654875 1771177004.0820394 1771177011.4292345 1771177014.6017056 1771177017.5282974 1771177021.4518795 1771177024.6343913 1771185405.2020059 1771185407.9832363 1771185451.4425006 1771185466.3495464 1771185500.8092175 1771185539.0877485 1771185591.724145 1771185598.1286225 1771185614.1913784 1771244458.7711375 1771244660.7247722 1771244684.6490598 1771244694.3202388 1771244735.967286 1771244842.5954037 1771245183.3800526 1771245497.0590835 1771245644.0315454 1771600012.0328515 1771600018.626791 1771600020.4096375 1771600021.169344 1771600023.745423 1771600028.3680377 1771600028.8611665 1771600038.381504 1771600042.4843132 1771684030.1196742 1771684031.4314518 1771684033.397595 1771684034.3962631 1771684036.2810757 1771684045.215912 1771684053.1180193 1771684054.5356603 1771757003.813362 1771757005.1222928 1771757006.111422 1771757007.1642048 1771757017.1231 1771757021.1513972 1771757028.3927412 1771757030.9026449 1771764363.7003086 1771764364.442254 1771764365.4441075 1771764370.843027 1771764382.209699 1771764468.0461407 1771764493.6582198 1771780294.343606 1771780296.5097165 1771780298.4102716 1771780299.0157566 1771780308.3770611 1771780309.7407043 1771780314.8731542 1771780321.8025336 1771780324.5329354 1771837751.3228168 1771837756.767008 1771837760.2879758 1771837769.8369215 1771837770.2048807 1771837772.8549726 1771837788.6489344 1771839299.4875984 1771839305.4016466 1771839307.9862158 1771839308.9755557 1771839310.5828793 1771839322.6886103 1771839323.2381954 1771839325.3454525 1771865784.6298401 1771865786.3726418 1771865787.318743 1771865803.3110325 1771865811.3406887 1771972820.8536546 1771972821.5067422 1771972840.4580994 1771972846.1839893 1771972884.3953075 1771972886.8935175 1771972892.4252405 1771972902.1194937 1772004121.2945533 1772004122.7917647 1772004124.9790232 1772004129.7317517 1772004134.1553736 1772004140.8575795 1772004142.5861886 1772004147.0769281 1772039635.139008 1772039636.0414748 1772039639.855896 1772039648.0528839 1772039651.6689503 1772039654.9362936 1772039660.0298471 1772039667.3506672 1772097086.5031183 1772097098.1678927 1772097111.1263285 1772097117.7405796 1772109463.553514 1772109466.3407483 1772109480.4852076 1772109481.6438973 1772109484.0316198 1772109485.8141325 1772109494.0484235 1772125617.511287 1772125620.4649448 1772125620.9415054 1772125625.5994627 1772125633.153215 1772125651.902158 1772125654.4224913 1772125794.3522947 1772125796.7602608 1772125799.6996412 1772125812.3675652 1772125813.0661526 1772125813.6645544 1772125816.1068468 1772183828.892642 1772183832.5869255 1772183835.152446 1772183843.5205145 1772183852.0932834 1772183859.433871 1772183868.0199094 1772280404.2078578 1772280404.69581 1772280407.464592 1772280409.17338 1772280410.9133086 1772280413.3649797 1772280421.0677361 1772280423.5847754 1772295578.4514158 1772295580.894601 1772295581.7305021 1772295582.7096155 1772295583.8931496 1772295588.8290505 1772295589.741979 1772295599.709021 1772295602.4200597 1772297271.8931916 1772297272.796662 1772297276.1779351 1772297281.0048177 1772297287.5373304 1772297289.1350865 1772297290.1080134 1772297296.3202076 1772297945.7492647 1772297949.3261893 1772297951.851947 1772297953.4251385 1772297961.0872998 1772297962.237692 1772297968.548078 1772297976.193011 1772298793.4816813 1772298801.7994263 1772298804.3413033 1772298816.8963897 1772298819.4326506 1772298821.0167608 1772298821.461571 1772299046.3897016 1772299050.552813 1772299058.2212174 1772299059.2914927 1772299066.873316 1772299073.6742685 1772299786.0516667 1772299787.7142491 1772299788.997042 1772299795.5276682 1772299806.997665 1772299816.2948682 1772300068.4680173 1772300074.1381872 1772300075.076055 1772300080.9735785 1772300090.6366215 1772300094.4405732 1772300530.293983 1772300534.5245671 1772300544.3982706 1772300548.0080998 1772300552.9624085 1772300570.5476682 1772300932.9506423 1772300936.419418 1772300941.5620844 1772300943.8668664 1772300964.111361 1772328442.6384232 1772328443.3122764 1772328444.0383964 1772328454.9741364 1772328455.7685978 1772328456.676097 1772328464.6393201 1772328468.4323661 1772328473.5744238 1772351413.8249013 1772383323.1008327 1772383329.9349842 1772383331.386728 1772383332.146261 1772383333.3551807 1772383335.9397588 1772383337.1753385 1772383342.6916847 1772383348.262124 1772383821.0542176 1772383823.6034913 1772383825.878503 1772383826.176101 1772383827.88893 1772383832.7978203 1772383842.736432 1772383847.1015575 1772383850.6285467 1772454124.9551854 1772454151.6994405 1772454233.6164246 1772454250.9810789 1772454289.6593218 1772454310.1916735 1772454394.1553872 1772454398.7474406 1772454562.4118385 1772713528.9459274 1772713544.885845 1772713545.9493737 1772713650.5365589 1772713668.5272853 1772713706.8689525 1772713719.4318998 1772714313.3804982 1772714634.441328 1772764959.4377325 1772764964.7828572 1772764967.7785013 1772764970.1141407 1772764973.2195883 1772764984.4319944 1772765126.5007186 1772787175.2837644 1772787179.9415834 1772787186.6077988 1772787186.8416843 1772787187.15247 1772787198.6093411 1772787204.9290109 1772787209.0141208 1772809991.9257238 1772809992.8731363 1772809997.4999394 1772810001.7896464 1772810005.7003007 1772810006.7824953 1772810008.0087657 1772810021.9598997 1772810085.6787655 1772905492.0566986 1772905498.5148373 1772905501.3888893 1772905503.641356 1772905509.1755662 1772905511.2718103 1772905521.3545146 1772905530.8175929 1772967830.8897622 1772967834.800573 1772967835.3464074 1772967838.857526 1772967842.5253148 1772967849.667246 1772967857.5036254 1772967858.8364737 1772967861.6873882 1772984316.610907 1772984318.0384367 1772984361.0834682 1772984389.3850882 1772984403.9999688 1772984440.3767893 1772984445.8218489 1772984475.5563498 1772984492.1683066 1772986406.4741344 1772986410.3417528 1772986411.5768716 1772986412.093717 1772986415.0171423 1772986419.9504926 1772986423.3365016 1772986428.4155931 1773059898.1412277 1773059935.98033 1773060041.6970541 1773060054.2331545 1773061011.8323395 1773061314.2291052 1773061380.437499 1773061414.112351 1773061436.1397038 1773145071.5631673 1773145145.0533056 1773145299.1570978 1773145317.0917435 1773145361.1160474 1773145431.9178998 1773145447.205267 1773145574.0338075 1773145864.4072688 1773145867.958283 1773145870.8676126 1773145873.084005 1773145874.1125846 1773145883.6725326 1773145885.4807596 1773145903.0986722 1773158716.4506488 1773209697.8553648 1773209704.3154953 1773209707.7399786 1773209708.3590436 1773209712.3566198 1773209715.2477503 1773209716.6491067 1773209717.4205372 1773209727.397243 1773243569.3923771 1773243579.9017727 1773327509.4352446 1773327512.384058 1773327517.778177 1773327519.3600962 1773327525.9831553 1773327530.2042542 1773327531.6041195 1773327533.6185954 1773342044.3975337 1773342047.2800632 1773342047.7213204 1773342051.3167768 1773342070.793869 1773422305.7551844 1773422306.8472383 1773422307.260621 1773422307.861149 1773422309.2151213 1773433616.940507 1773433617.8015654 1773433618.1402817 1773433618.8915472 1773433620.1571712 1773433636.6559062 1773433685.9827228 1773433769.0329056 1773433793.9351418 1773436822.279561 1773496529.2417994 1773496531.6484542 1773496534.2970135 1773496540.2494192 1773496542.5848348 1773496556.6658444 1773496557.646253 1773508559.8649719 1773508564.2156093 1773508565.6863298 1773508566.2063718 1773508567.2482834 1773508576.2386317 1773508579.5570102 1773508588.7930615 1773526091.7305086 1773526094.7576952 1773526099.7316136 1773526101.0460598 1773526102.468852 1773526107.369785 1773526110.1862388 1773526115.115235 1773526116.7317014 1773531665.82529 1773531666.3771586 1773531666.8047104 1773531667.4920819 1773531668.6569617 1773533178.7996001 1773533179.23835 1773533180.4051468 1773533180.702309 1773533326.7572465 1773533328.9965563 1773533329.9414577 1773533330.16112 1773533330.968805 1773533332.2384558 1773533342.702904 1773533347.4469643 1773533359.1699326 1773663912.872022 1773663917.414473 1773663920.1189451 1773663923.0031617 1773663929.1929984 1773663934.9318051 1773663938.2461636 1773663945.447361 1773663948.7060542 1773923127.7739248 1773923140.1724749 1773923171.917618 1773923216.2591379 1773923290.2481165 1773923351.7546723 1773923387.236511 1773924177.1936789 1773924247.1279826 1774116622.3116958 1774116626.685884 1774116631.36191 1774116634.4917035 1774116636.007466 1774116646.396959 1774116649.9595244 1774122611.4872355 1774122612.0778387 1774122617.113013 1774122623.748957 1774122624.2195117 1774122627.254311 1774122631.9285514 1774122633.3222346 1774122643.6527953 1774123449.8178384 1774123455.4579494 1774123456.9654434 1774123460.0542014 1774123468.123217 1774123470.894454 1774123473.1936722 1774123615.9096093 1774123617.057869 1774123618.2236078 1774123620.8008826 1774123627.442505 1774123629.493724 1774123630.8533177 1774123636.9826944 1774123643.869337 1774125064.8095303 1774125068.9721835 1774125072.345307 1774125073.838626 1774125078.0622084 1774125078.9767094 1774125084.6969202 1774125096.4611142 1774165455.8215635 1774165456.3814306 1774165458.2990782 1774165464.2143352 1774165468.043054 1774165468.4514842 1774165473.8426971 1774165484.6675928 1774165490.0981755 1774173607.1004112 1774173625.73087 1774173709.2447455 1774173744.2978158 1774173764.3022842 1774173786.8334386 1774173805.8676367 1774173809.644974 1774173889.2116613 1774179069.3753922 1774179134.4216766 1774179147.1273863 1774179151.712217 1774179172.1551447 1774179178.1981494 1774179230.1370556 1774179231.5304184 1774179279.552431 1774183796.2095468 1774183796.7006834 1774183797.983253 1774183801.156979 1774183802.2355645 1774183811.2893264 1774183822.0530934 1774183824.9673326 1774191717.4712055 1774191718.3463879 1774191721.421663 1774191725.149967 1774191727.2233143 1774191732.0443897 1774191735.698229 1774191737.403349 1774268525.0307348 1774268526.373377 1774268527.2372344 1774268537.347842 1774268572.9748507 1774268604.4843407 1774268639.346915 1774268687.8962731 1774268712.863652 1774527755.3994756 1774527759.1027331 1774527759.7701855 1774527766.0900435 1774527768.3282084 1774527775.64296 1774527847.611203 1774527868.9990609 1774527892.2252436 1774873655.527003 1774873666.6517813 1774873668.6499827 1774873672.1687975 1774873674.125012 1774873676.3726752 1774873680.1577253 1774873685.824583 1774875895.7435656 1774875899.2784672 1774875902.3986785 1774875905.0208993 1774875905.594042 1774875909.4528077 1774875914.4021006 1774875918.060093 1774876701.5632007 1774876702.4201756 1774876704.384826 1774876706.8571978 1774876710.02423 1774876719.672133 1774876732.959303 1774876733.9153466 1774876736.3431017 1774880824.6487224 1774880825.8109229 1774880832.7772617 1774880833.8427367 1774880836.6255288 1774880839.2399762 1774880841.9262152 1774880851.3003206 1774881363.6655617 1774881367.4241898 1774881372.1439908 1774881374.0549834 1774881385.053962 1774881389.3328514 1774881393.963817 1774881394.7380836 1774881400.2569187 1775231066.5313282 1775231119.1918912 1775231129.4662294 1775231177.3856704 1775231196.8174288 1775231214.4311275 1775231297.0647576 1775231334.9891703 1775231338.6613705 1775232630.3965228 1775232640.9850821 1775232648.2935927 1775232767.7549682 1775232769.345424 1775232773.8040285 1775232779.7044146 1775232795.4553795 1775232797.4147656 1775234999.7864647 1775235006.9964473 1775235009.0573256 1775235017.2879946 1775235271.5614855 1775235283.7214663 1775235285.2803273 1775235306.43616 1775241999.4150372 1775242123.5503404 1775242126.3104184 1775242143.7351582 1775242210.8824239 1775242221.0156906 1775242396.821857 1775242449.6782231 1775242917.341283 1775312885.8533607 1775312892.5294592 1775312916.0363607 1775312923.368411 1775312928.9784486 1775312930.7954159 1775312939.4274864 1775318471.3398528 1775318474.8361926 1775318479.0674982 1775318483.5954714 1775318484.0378363 1775318488.6386657 1775318489.0825813 1775319309.9300623 1775319312.934079 1775319315.2263668 1775319319.3970985 1775319376.0797794 1775319379.438265 1775319387.2380319 1775319400.7464328 1775319407.4777956 1775322237.4052963 1775322237.8814938 1775322241.1159406 1775322242.6739452 1775322247.1877317 1775322250.2518969 1775322251.8086483 1775322254.6575804 1775322268.3851843 1775381179.7835803 1775381180.9311726 1775381187.0079129 1775381187.4863334 1775381190.7522886 1775381197.9658923 1775381202.1844847 1775381202.9599855 1775402318.8826947 1775402321.8426278 1775402322.2964063 1775402323.9786787 1775402325.1313353 1775402325.7507243 1775402334.9895287 1775402342.0844438 1775402350.98194 1775462783.7941637 1775462786.3998082 1775462791.9899664 1775462797.2010918 1775462817.1794748 1775462854.5869381 1775462868.0183764 1775462878.52322 1775464091.0254564 1775464097.9112625 1775464102.6998096 1775464107.9394155 1775464109.435578 1775464111.759231 1775464115.5834837 1775464125.0957696 1775464128.2511601 1775466263.7154732 1775478270.6244485 1775478281.4753964 1775478288.554501 1775478310.7563734 1775478311.489444 1775478314.0560038 1775478327.5556254 1775478336.92283 1775478403.020345 1775492855.630969 1775492865.677199 1775492871.0985777 1775492913.0388153 1775492914.2092292 1775492916.9741492 1775492924.6610458 1775492936.5097935 1775494313.6594186 1775494318.0464292 1775494319.3477843 1775494320.2532756 1775494321.7131712 1775494327.6839483 1775494328.640422 1775494331.6578414 1775494365.9452775 1775551071.1644187 1775551074.4337926 1775551079.0472832 1775551083.2774842 1775551085.7583468 1775551090.7644863 1775737435.2773647 1775737438.7938755 1775737439.635319 1775737447.1997576 1775737453.2451897 1775737457.3720942 1775737460.0834644 1775737479.3835547 1776083164.7412949 1776083166.0760298 1776083172.9341552 1776083173.2533977 1776083177.1253726 1776083177.7411783 1776083180.209172 1776083263.7892222 1776083286.7843368 1776342281.6236448 1776342324.3168411 1776342367.6482716 1776342394.2922654 1776342405.7413058 1776342434.293768 1776342520.3987992 1776343739.3542569 1776343741.3466635 1776343749.4476836 1776343754.4298182 1776343755.0325396 1776343769.2924407 1776343775.1753948 1776343828.6562598 1776343854.564765 1776344633.014359 1776344637.3803189 1776344644.7009134 1776344655.25513 1776344660.5385182 1776344822.1057956 1776344856.866423 1776344870.981311 1776344900.9728403 1776344911.9065537 1776344991.6632652 1776345011.4701812 1776345020.397637 1776345020.6287603 1776494589.0378575 1776494589.6638293 1776494594.2250469 1776494594.5081048 1776494594.7770948 1776494598.6157148 1776494600.1698377 1776494607.1387196 1776494618.9425201 1776496070.773081 1776496074.2403238 1776496082.1198342 1776500548.6272972 1776500550.8541093 1776500552.396871 1776500561.6513975 1776500561.9745164 1776500563.704424 1776500564.6515799 1776500569.7395694 1776500573.3939784 1776513541.9652882 1776513542.9883733 1776513543.6343865 1776513544.158197 1776513553.7539227 1776513556.4451942 1776513559.8873482 1776513565.521203 1776513566.9828477 1776515776.2957382 1776515778.0470045 1776515783.6812472 1776515788.2738 1776515788.6813345 1776515789.7096481 1776515791.667823 1776515799.8251324 1776515806.7688403 1776521436.0148668 1776521440.1395595 1776521442.0799096 1776521444.7308571 1776521446.7341077 1776521450.7588751 1776521456.820204 1776521457.2570791 1776521462.973624 1776525730.7254903 1776525731.5157208 1776525732.2143252 1776525735.2291906 1776525739.6271024 1776525745.47407 1776525747.4315937 1776525748.1166008 1776530796.9598818 1776530834.8976426 1776530864.183933 1776530904.1523414 1776530906.5831788 1776530917.970012 1776530957.2714953 1776530958.9008594 1776530975.3914669 1776602223.330836 1776602243.389179 1776602275.7255769 1776602286.458232 1776602300.1333187 1776602300.6690238 1776602301.1831164 1776602314.4517279 1776602954.1821818 1776602955.5293558 1776602959.3396807 1776602962.849875 1776602970.9934807 1776602971.7103772 1776602974.2212696 1776602980.194477 1776688037.9927702 1776688046.959831 1776688056.5510614 1776688061.4678383 1776688066.5871947 1776688113.6823382 1776688153.5094948 1776688265.2301989 1776688298.7890384 1776732662.0460057 1776732665.8318326 1776732666.489607 1776732670.0498426 1776732671.863852 1776732676.685261 1776732678.7114165 1776732685.426199 1776732686.6590118 1777121007.3493567 1777121011.3679473 1777121015.6233008 1777121017.4013567 1777121021.4683287 1777121025.4130871 1777121033.1263654 1777121034.594803 1777121036.4797184 1777124043.4091897 1777124045.9143817 1777124049.68581 1777124050.627295 1777124050.8497925 1777124063.542509 1777124065.626547 1777124068.4933844 1777125999.781397 1777126000.7849672 1777126001.1903439 1777126003.6446674 1777126009.2178264 1777126014.702515 1777126015.3995945 1777126026.6103077 1777126027.3554199 1777134789.5697863 1777134794.8848414 1777134798.203008 1777134802.584216 1777134805.801339 1777134810.2188227 1777134810.6067982 1777134815.5159879 1777287340.259427 1777287342.5806 1777287394.4660351 1777287403.198653 1777287414.5551069 1777287429.0213566 1777287435.7822795 1777287438.907569 1777287443.075804 1777293571.550748 1777293575.1182587 1777293575.6059732 1777293579.0007524 1777293579.7482665 1777293582.7539198 1777293588.9424148 1777293591.4147072 1777363065.5634713 1777363068.047331 1777363068.8651152 1777363069.2966669 1777363073.8316216 1777363082.3102756 1777363084.8887331 1777363085.6754465 1777808351.4681172 nhmci2ykkx81k643k0kbzyzsx2k5fym 740341 740340 2026-05-03T11:39:22Z Pywikibot-oauth 29170 740341 wikitext text/x-wiki 1717938323.983468 1717938325.9381392 1717938327.6745121 1717938345.265466 1717938346.1106002 1717938350.5920074 1717938353.0482574 1717953288.8608625 1717953293.9055603 1717953292.1927369 1717953292.2962074 1717953294.2398 1717953312.240725 1717953316.1704223 1717953317.268496 1717953318.2313948 1717997567.7045777 1718009302.675245 1718009303.0268657 1718009305.1731467 1718009309.4585795 1718009328.7909298 1718009333.1985834 1718009383.5844293 1718009385.1342936 1718009386.2813547 1718009388.613266 1718009398.8815582 1718009408.5800366 1718009439.4752173 1718009607.9868848 1718009609.3225954 1718009610.7008185 1718009611.3111014 1718009614.7206109 1718009619.8805332 1718009633.8648026 1718009654.4389236 1718013612.7444367 1718013615.4898036 1718013616.8618758 1718013617.578818 1718013628.183184 1718013640.3193917 1718013648.6140828 1718013688.6004112 1718016374.1180348 1718016375.439417 1718016376.2004616 1718016380.8626587 1718016404.172379 1718016421.9062774 1718017148.5199714 1718017151.167183 1718017152.579374 1718017154.8653364 1718017156.385661 1718017173.681575 1718017176.016188 1718017200.9282327 1718018372.899415 1718018659.6671212 1718018660.4208403 1718018662.0027812 1718018664.5138478 1718018682.755611 1718018686.6985393 1718018704.9304743 1718021145.9996097 1718021148.1332645 1718021148.8790848 1718021151.64248 1718021152.3035438 1718021183.5700638 1718021188.2089362 1718021194.6740658 1718021912.815989 1718021915.923219 1718021917.6584659 1718021919.7312863 1718021921.5385063 1718021940.462804 1718021956.3317823 1718021965.900075 1718022675.5741732 1718025361.51236 1718025362.1419137 1718025363.549265 1718025365.794714 1718025367.0023723 1718025381.4007874 1718025386.8869488 1718025390.1932719 1718025420.3657703 1718026112.6940236 1718026114.5253518 1718026116.9373848 1718026119.4845717 1718026120.817934 1718026123.051878 1718026136.3197055 1718026140.8453245 1718026145.4011593 1718026163.7837195 1718029773.4831073 1718029774.3958006 1718029775.4855509 1718029776.785981 1718029781.6460838 1718029783.6814554 1718029795.5788717 1718029798.7532082 1718029803.2993777 1718029839.3786342 1718088780.7319355 1718088783.1151495 1718088785.5244112 1718088786.0638566 1718088790.2916877 1718088800.889361 1718088810.884886 1718088814.4438264 1718088814.2049983 1718098333.8518348 1718098334.492469 1718098335.9334357 1718098338.9121008 1718098351.4070423 1718098360.9338825 1718098363.3991063 1718098388.9819927 1718098502.7364287 1718098783.731209 1718098785.4471197 1718098788.7367818 1718098790.8354266 1718098793.2723055 1718098796.6948872 1718098804.8592188 1718098809.4647124 1718098817.6042728 1718098830.9912333 1718099231.027644 1718099234.4692736 1718099235.052649 1718099236.3166866 1718099255.4998035 1718099256.26313 1718099258.3496053 1718099280.7436473 1718111091.2757294 1718111094.233729 1718111096.5565636 1718111103.6016734 1718111108.502889 1718111116.434526 1718111142.8487227 1718114486.9111218 1718114488.8848925 1718114492.5300286 1718114505.449661 1718114508.5768387 1718114513.384398 1718114557.7346702 1718120951.709677 1718120954.2943966 1718120955.4632218 1718120962.1287925 1718120969.2791822 1718120975.7068148 1718120983.0374181 1718120998.2290237 1718167739.5514672 1718167741.361884 1718167744.7950137 1718167745.417929 1718167757.8886697 1718167765.954192 1718167775.6431954 1718168307.9341757 1718168309.0630918 1718168310.747874 1718168311.1551263 1718168311.824176 1718168328.8877923 1718168329.1683598 1718168332.8930173 1718168334.318795 1718170628.1888835 1718170631.9050498 1718170632.746343 1718170634.9433777 1718170636.927007 1718170654.1273365 1718170656.173754 1718170657.3509326 1718170659.621824 1718170887.5461829 1718204836.6592476 1718204841.3648756 1718204842.685919 1718204846.9438975 1718204855.260591 1718204857.186586 1718204866.7263968 1718204946.7416897 1718206153.2249477 1718206154.0826955 1718206156.8141618 1718206166.206424 1718206170.4542036 1718206189.6599023 1718206193.0557477 1718206209.0511112 1718206394.678831 1718206399.1699252 1718206403.0055304 1718206416.9370177 1718206422.3951635 1718206426.1713943 1718206481.3811412 1718207931.4095542 1718207936.0076962 1718207937.0227344 1718207938.648662 1718207951.2997663 1718207962.9280522 1718207970.8110354 1718207986.3565502 1718270206.6322293 1718270208.396686 1718270209.8471525 1718270212.1417482 1718270212.8735263 1718270225.4295442 1718270229.9387715 1718270233.8893638 1718270249.8745449 1718278524.21183 1718278526.7441041 1718278529.0446036 1718278530.6510525 1718278533.3816156 1718278541.910818 1718278549.337206 1718278552.886615 1718278569.0438437 1718287801.4408586 1718287803.4836357 1718287804.9007418 1718287808.1488054 1718287808.4518878 1718287822.867423 1718287826.7880008 1718287855.8315911 1718297766.9014719 1718297767.4670007 1718297769.5687966 1718297772.4048378 1718297777.3219984 1718297790.6331906 1718297792.4884562 1718297795.184645 1718302176.0627773 1718302177.5144217 1718302178.8230069 1718302194.8260093 1718302201.1135983 1718302206.1642869 1718302218.1861632 1718302219.3047798 1718336718.1941583 1718365268.4987638 1718365269.641732 1718365270.5083897 1718365271.728583 1718365274.002535 1718365291.8463135 1718365294.8545115 1718365301.4906988 1718365315.3869822 1718365505.726982 1718448902.0726335 1718448904.9608967 1718448905.7732697 1718448907.9344823 1718448914.5668309 1718448928.1298878 1718448928.9807873 1718448930.3379903 1718448930.331011 1718454069.948404 1718454073.9749632 1718454076.1152103 1718454077.8158538 1718454080.9835265 1718454093.4771943 1718454096.5800304 1718454103.1700485 1718454102.7764804 1718456201.0723767 1718456201.771049 1718456204.8900273 1718456223.2486367 1718456226.5021062 1718456230.0176444 1718456234.8390899 1718459952.221978 1718459952.9086947 1718459954.7137554 1718459957.011037 1718459957.8085938 1718459970.2652814 1718459973.344553 1718459980.3818643 1718459980.794316 1718467221.4074085 1718467223.9760313 1718467225.2852647 1718467226.4534006 1718467227.5403411 1718467238.6423047 1718467245.6560714 1718467249.314935 1718467250.7741568 1718470146.792804 1718470150.8378944 1718470152.434354 1718470155.6266527 1718470156.4344456 1718470167.0206006 1718470170.511652 1718470178.847092 1718470180.4159863 1718477476.8284774 1718477478.9504488 1718477480.2399306 1718477483.233796 1718477495.1057756 1718477505.138055 1718477508.230259 1718477509.4137573 1718479108.4211571 1718515652.3761146 1718515657.7088983 1718515658.6416357 1718515660.4557362 1718515660.9534945 1718515671.641125 1718515676.942455 1718515679.664335 1718515691.044993 1718516411.4838226 1718517061.1334279 1718517064.36412 1718517066.351747 1718517067.9823635 1718517070.1635823 1718517078.9948351 1718517089.3589723 1718517090.8877964 1718517687.892127 1718517688.3769186 1718517689.950249 1718517694.0879142 1718517702.0483367 1718517711.8517518 1718517713.7155662 1718517722.782742 1718517837.657381 1718531410.3578694 1718531413.2360501 1718531413.7496576 1718531414.6364017 1718531415.9476206 1718531419.6359458 1718531428.8146567 1718531435.9711194 1718531436.9587393 1718531438.3370793 1718536061.2031472 1718536064.3968182 1718536065.9384258 1718536068.7385488 1718536072.2085466 1718536082.2379959 1718536083.1270118 1718536090.3124897 1718536093.951949 1718541954.3876143 1718541956.0022333 1718541956.941455 1718541957.5561693 1718541958.0702612 1718541975.0538633 1718541980.5246894 1718541981.3653994 1718542008.4670186 1718636379.6202543 1718636381.1092196 1718636382.0674365 1718636383.378525 1718636390.121835 1718636402.868477 1718636403.469083 1718636414.6279762 1718636448.2600234 1718638626.856629 1718638627.783421 1718638633.7572656 1718638635.0484576 1718638639.7305253 1718638645.3893626 1718638654.4974911 1718638655.9837 1718638656.509398 1718638675.2028575 1718730999.6562796 1718731002.9459317 1718731004.5080602 1718731005.8755076 1718731020.2701058 1718731025.4137113 1718731062.9800775 1718744024.6903846 1718744025.9837515 1718744028.94272 1718744030.9566023 1718744042.0349915 1718744050.1404827 1718744054.1966991 1718773967.0703459 1718773968.0080812 1718773970.3090975 1718773970.3435733 1718773971.079693 1718773995.5025868 1718773996.6876066 1718773997.3720262 1718773999.1633239 1718886004.5143113 1718886004.9995835 1718886009.3486383 1718886011.502742 1718886020.6752129 1718886021.2545116 1718886026.1455162 1718886031.2892191 1718886086.0996928 1718961575.2159712 1718961577.248636 1718961579.266859 1718961584.0054727 1718961585.5416117 1718961596.9843493 1718961608.302492 1718961614.6889198 1718961616.3877892 1718968603.7748945 1718968607.0690818 1718968607.9450648 1718968609.6774971 1718968612.2656987 1718968614.1366622 1718968625.3810906 1718968629.4604537 1718968641.5719926 1718968681.1329365 1718968682.261607 1718968683.5617135 1718968684.106964 1718968688.5447705 1718968690.5267246 1718968697.4459171 1718968705.5173635 1718968709.6065145 1718968741.2709723 1719060263.9319239 1719060265.1403356 1719060266.340842 1719060269.3961422 1719060283.8203645 1719060288.0482583 1719060294.2719293 1719060297.7118967 1719061420.802171 1719061422.6048853 1719061423.7334316 1719061425.0414433 1719061433.5318284 1719061439.1523328 1719061445.326212 1719061461.978173 1719061880.7222142 1719061882.552266 1719061884.4065745 1719061884.964865 1719061892.874263 1719061895.8984957 1719061904.7980072 1719061914.2728014 1719061944.038279 1719062152.8865724 1719067189.487594 1719067190.1866813 1719067191.4030895 1719067193.725632 1719067202.8044908 1719067204.7037551 1719067216.787414 1719067229.7356596 1719067909.3010273 1719067911.3103838 1719067911.9389522 1719067912.7892058 1719067915.1173623 1719067926.6543186 1719067935.485951 1719067939.5406718 1719067944.3043442 1719145650.792378 1719145652.1845744 1719145652.8407626 1719145655.4633198 1719145657.428794 1719145666.624809 1719145677.3898938 1719145679.7491868 1719145690.3449385 1719151844.203008 1719151847.829848 1719151852.1046011 1719151856.2039797 1719151862.2484019 1719151867.8664546 1719151870.772161 1719151874.5618086 1719155047.2379646 1719155049.7190826 1719155050.821006 1719155051.5469427 1719155054.5321891 1719155064.8799038 1719155067.3398724 1719155073.8036382 1719155105.9072046 1719155891.186099 1719155894.1741269 1719155894.702736 1719155901.2573574 1719155905.927427 1719155918.0138943 1719155919.6432118 1719155949.5647342 1719171489.1549513 1719171489.9106762 1719171494.0356336 1719171499.7293534 1719171510.372511 1719171513.5158641 1719171519.8476577 1719171642.8685024 1719242605.7242808 1719242606.3999186 1719242608.330176 1719242609.081625 1719242620.0841155 1719242626.622884 1719242632.7130654 1719242646.629726 1719242788.043846 1719246563.8788664 1719246565.1245325 1719246565.523271 1719246567.5838163 1719246568.6878052 1719246574.7292345 1719246582.940538 1719246594.208879 1719246624.0132446 1719246646.4423573 1719255511.0461993 1719255514.2679725 1719255514.8902783 1719255533.9694326 1719255535.7519948 1719255561.5833826 1719255600.0428908 1719257206.277582 1719257207.5948808 1719257208.5332088 1719257212.2003682 1719257229.9038367 1719257240.7883828 1719257257.7664475 1719257412.6408064 1719298510.1701732 1719407566.2328699 1719407567.4559505 1719407569.9593308 1719407575.7728598 1719407593.567035 1719407593.8329344 1719407631.4438539 1719407673.9627962 1719490893.0374126 1719490894.4612806 1719490897.4321358 1719490899.1701922 1719490902.0502431 1719490917.8597374 1719490927.1120436 1719490982.7129836 1719491028.2046077 1719658980.759956 1719658982.1867814 1719658983.3265736 1719658984.8375463 1719659006.3760595 1719659008.233768 1719659038.1869128 1719659053.6470735 1719661510.9347355 1719661511.5324843 1719661512.9147425 1719661515.870037 1719661516.9088366 1719661518.3048205 1719661522.8482125 1719661535.0718417 1719661567.8569882 1719661598.4858406 1719662437.4862742 1719662439.475177 1719662440.519351 1719662443.9609544 1719662448.8941991 1719662457.9865503 1719662477.7968066 1719662501.4439266 1719662505.5643024 1719664452.6829715 1719664453.517005 1719664456.0385885 1719664456.5487328 1719664460.285548 1719664473.429615 1719664480.2840178 1719664517.5621357 1719664520.4785154 1719673276.6724093 1719673278.5594711 1719673280.2434716 1719673283.1366646 1719673309.672662 1719673317.2102964 1719673336.6643648 1719673370.991012 1719677715.7309895 1719677719.557844 1719677720.011801 1719677725.3283927 1719677734.3811567 1719677734.578576 1719677747.991037 1719677779.4570024 1719677795.2211277 1719677944.121938 1719677947.0342872 1719677952.954374 1719677957.6550858 1719677967.588756 1719677985.8510435 1719678003.8949015 1719678018.1203597 1719678487.7313912 1719678490.4696572 1719678491.3958938 1719678496.5990489 1719678498.2562368 1719678509.3167796 1719678516.4686754 1719678547.306207 1719678562.7342274 1719678689.5803418 1719678690.270386 1719678691.1140273 1719678692.451933 1719678692.9669394 1719678705.9989023 1719678720.7839897 1719678754.5303414 1719678801.921674 1719679196.1161187 1719679702.7277484 1719679704.884765 1719679705.6118531 1719679707.7974935 1719679710.1557584 1719679723.6905518 1719679734.038543 1719679770.7907984 1719679818.6751614 1719680158.875494 1719680161.4341679 1719680162.4199877 1719680164.2232368 1719680183.9374866 1719680187.663405 1719680221.9159675 1719680235.5601242 1719680708.6096206 1719680709.4699545 1719680715.619083 1719680732.265567 1719680736.4170895 1719680736.932406 1719680738.4691868 1719680769.77296 1719680780.7043424 1719688562.565408 1719691360.4738486 1719691361.0909443 1719691362.8320959 1719691367.614035 1719691371.838276 1719691382.4826112 1719691388.392583 1719691424.3254218 1719691437.8558855 1719691910.8170524 1719691911.8364177 1719691915.5230062 1719691918.5787246 1719691955.9031386 1719691959.146336 1719691960.9298646 1719691962.9000072 1719691972.0988379 1719691975.7922778 1719691986.8865433 1719691997.4708471 1719692032.7521966 1719692053.8494172 1719738721.563538 1719738723.4371152 1719738723.5942557 1719738724.4970622 1719738725.1963532 1719738734.7646797 1719738743.3773084 1719738751.5416954 1719738786.870921 1719738799.769176 1719739777.2650309 1719739778.3169456 1719739779.938744 1719739783.1745806 1719739797.9755929 1719739804.799515 1719739835.4536004 1719739865.0080156 1719740957.4115753 1719740963.4064841 1719740968.0831258 1719740970.203206 1719740970.6358604 1719740983.8126853 1719740998.5138216 1719741026.1598616 1719741034.488669 1719742149.5130558 1719742150.1764612 1719742151.1998274 1719742152.22184 1719742155.7655077 1719742158.0400107 1719742174.5534735 1719742189.252219 1719742216.181138 1719742226.4915278 1719742546.869991 1719742549.0948424 1719742550.334266 1719742552.9718885 1719742554.7338808 1719742557.8963645 1719742562.7436194 1719742573.797242 1719742619.708493 1719742625.194558 1719745259.5410144 1719745261.4883902 1719745262.6057122 1719745263.6752841 1719745286.9080038 1719745289.0641947 1719745328.0916362 1719745349.6027694 1719752167.7671835 1719754514.0760689 1719754514.9256747 1719754516.3132918 1719754536.5157144 1719754539.9762955 1719754596.3803048 1719754599.82873 1719760133.5291634 1719760134.2539825 1719760140.7209601 1719760151.467467 1719760154.502864 1719760158.4525688 1719760203.6156392 1719760312.8365571 1719824939.5139902 1719824940.8243928 1719824942.4226027 1719824943.062349 1719824944.140916 1719824961.630868 1719824966.442031 1719825010.3715134 1719825038.4196992 1719830109.6348207 1719830110.8810217 1719830111.422231 1719830112.20914 1719830117.347853 1719830121.7140367 1719830130.0074415 1719830146.1857674 1719830188.7506788 1719830204.6365817 1719836492.969278 1719836494.6186726 1719836494.6443224 1719836496.742013 1719836523.180333 1719836638.187037 1719836688.0424724 1719839171.3108604 1719841448.5217607 1719841450.4651759 1719841452.4335685 1719841454.0664856 1719841473.2166533 1719841481.9279184 1719841536.3091393 1719841562.9440105 1719841673.1179872 1719842581.891341 1719842582.7098043 1719842584.522381 1719842586.1380289 1719842590.3433087 1719842610.3571744 1719842611.8049507 1719842666.4960856 1719842712.4774687 1719847508.6857514 1719847509.3525307 1719847510.6604362 1719847528.2575898 1719847536.007867 1719847606.7301466 1719847623.6523726 1719847741.2522056 1719993027.9122436 1719993029.0979218 1719993030.7474782 1719993032.9349523 1719993050.6589947 1719993060.693691 1719993090.2760384 1719993113.2468278 1720004323.8437161 1720004327.9480708 1720004329.254853 1720004333.9301894 1720004357.6504843 1720004375.2054017 1720004385.1751335 1720004400.7738714 1720006892.066838 1720018543.5467849 1720018544.207071 1720018548.11588 1720018550.9547276 1720018552.9559293 1720018553.8820128 1720018567.2008767 1720018573.33096 1720018636.918563 1720018725.3587666 1720020012.144781 1720020015.209173 1720020018.3855567 1720020018.6251917 1720020021.5434313 1720020041.9798167 1720020046.4386566 1720020090.0238922 1720020103.3348067 1720095888.5110908 1720095894.3936722 1720095898.7496827 1720095914.40975 1720095932.5874338 1720095936.788244 1720095992.5494847 1720095997.6260736 1720096068.6120174 1720096142.000555 1720113393.4267867 1720113393.9954696 1720113394.5428329 1720113395.3445654 1720113410.3803558 1720113416.6878488 1720113463.1089094 1720113474.4864273 1720178905.152999 1720264983.1573057 1720264984.7289004 1720264991.1436696 1720264996.5567691 1720265012.2315247 1720265016.7129402 1720265054.6461728 1720265068.45914 1720268414.5574844 1720268456.0846417 1720268457.8302736 1720268459.1110072 1720268462.6664674 1720268464.0216665 1720268485.1050167 1720268489.3534741 1720268530.802286 1720268547.8900359 1720269854.7584038 1720269858.775462 1720269869.3305595 1720269883.1087477 1720269894.0281174 1720269941.6018271 1720269968.3731894 1720281992.4461744 1720281996.0212932 1720281997.9298186 1720281999.0800533 1720282019.8583853 1720282022.7717931 1720282064.3937569 1720282089.4292839 1720282979.3870595 1720282980.70788 1720282981.8929803 1720282983.583917 1720283006.0254724 1720283021.6412923 1720283063.0679586 1720283076.427101 1720283146.0883942 1720283148.7675686 1720283150.0253646 1720283151.398002 1720283166.69723 1720283172.1708326 1720283237.126988 1720283251.5744073 1720347929.6809032 1720347930.5536857 1720347931.5924973 1720347933.0147126 1720347950.2618797 1720347962.1530797 1720348006.9132035 1720348019.4262323 1720355684.7588637 1720355688.9037657 1720355690.8150926 1720355694.2809334 1720355695.3445952 1720355734.9794688 1720355736.9226706 1720355738.5939343 1720355743.7059312 1720355745.7016191 1720355746.3900065 1720355755.6159356 1720355767.7396665 1720355817.6985352 1720355825.541677 1720362535.8521876 1720362539.7770073 1720362541.6408083 1720362542.6222377 1720362543.7119908 1720362546.4056485 1720362566.697002 1720362575.465509 1720362600.9130247 1720362615.262974 1720429846.2601721 1720429851.2459822 1720429853.3674114 1720429856.5243065 1720429860.0182812 1720429866.6442153 1720429867.3754158 1720429928.3265693 1720429965.3328753 1720430013.1402261 1720437341.4689736 1720437343.9167843 1720437348.867465 1720437350.1222687 1720437367.6023335 1720437368.6960366 1720437438.242683 1720437464.6256282 1720441473.9818053 1720441475.3272228 1720441476.3406963 1720441478.8895733 1720441479.7282956 1720441491.7034128 1720441500.936126 1720441578.124788 1720441600.7416165 1720508030.779806 1720508034.720798 1720508035.3622708 1720508037.7463782 1720508042.6894598 1720508044.9407175 1720508056.5278485 1720508062.3510454 1720508121.945859 1720508141.6810555 1720723150.2531953 1720723152.0034084 1720723153.4047132 1720723154.3587787 1720723155.6927114 1720723160.229176 1720723181.9268985 1720723192.2047257 1720723210.7215843 1720723229.6315517 1720871823.769133 1720871824.6627216 1720871825.5460563 1720871826.1253562 1720871827.6929772 1720871844.2957664 1720871850.666975 1720871928.7215664 1720871949.1951418 1720874547.0185373 1720969499.4983323 1720969501.5016003 1720969503.052767 1720969503.8038156 1720969508.6751223 1720969518.3859234 1720969527.5263083 1720969531.275996 1720969576.9711084 1720969596.8234456 1721145106.3810425 1721145106.911887 1721145108.9086998 1721145111.0675786 1721145113.3288937 1721145132.1856048 1721145140.2767642 1721145184.267049 1721145216.828088 1721305209.7903893 1721305213.3784285 1721305214.8135803 1721305215.1242259 1721305221.4533546 1721305238.789072 1721305264.8440905 1721305426.81819 1721305485.3038528 1721379138.4693382 1721379141.1253483 1721379142.7651606 1721379147.1431847 1721379162.4500675 1721379163.127343 1721379224.7573798 1721379237.1989245 1721406788.94073 1721406793.3566136 1721406795.4649131 1721406831.6017003 1721406852.2838242 1721406869.9846714 1721406899.919841 1721406912.9084558 1721488399.1502702 1721488401.390993 1721488404.5964868 1721488406.046398 1721488407.5913856 1721488418.311122 1721488424.1997676 1721488427.7730663 1721488504.7484682 1721488525.566082 1721496591.4225824 1721496594.500339 1721496599.4931395 1721496601.0831027 1721496602.28746 1721496625.780832 1721496643.8198357 1721496652.6943266 1721496667.8110917 1721565388.2224255 1721565388.8312228 1721565390.4933197 1721565390.6252916 1721565391.4323554 1721565393.3962724 1721565407.8343496 1721565420.1680913 1721565454.1642957 1721565478.4827487 1721574226.567986 1721574228.2650464 1721574229.2136655 1721574230.5642936 1721574234.564178 1721574240.1197848 1721574253.3657877 1721574304.1189775 1721574326.7021465 1721576971.9406857 1721576974.0474002 1721576977.079685 1721576977.6775851 1721576978.880478 1721576992.2445269 1721577004.8481708 1721577048.988025 1721577065.7160993 1721578295.2526956 1721578298.8162296 1721578299.1991253 1721578300.0686698 1721578302.5384188 1721578304.4118538 1721578321.6604548 1721578324.0449317 1721578440.7719927 1721578479.2742977 1721580017.9542558 1721580019.2280664 1721580020.8857832 1721580021.9373968 1721580024.704843 1721580052.6509597 1721580055.1464536 1721580089.107742 1721580100.2947977 1721650930.8342354 1721650933.5484543 1721650947.093313 1721650950.4567475 1721651005.5955992 1721651481.2783616 1721651559.495912 1721674276.1086073 1721674278.513514 1721674281.290339 1721674283.639705 1721674288.2609918 1721674305.2613103 1721674311.6022947 1721674338.3399606 1721674362.5169706 1721718314.6641715 1721718316.3952758 1721718319.9596653 1721718325.270815 1721718343.0735612 1721718347.1543753 1721718393.3736312 1721718415.8997684 1721910087.0128944 1721910090.1194847 1721910091.1340427 1721910110.6500988 1721910114.7352288 1721910330.7036839 1721910348.0335593 1721910916.43767 1721910918.2617009 1721910918.9612172 1721910920.6596704 1721910923.7422097 1721910927.19123 1721910944.6203954 1721910956.9221787 1721911128.751464 1721911158.3159337 1721912339.4567149 1721912343.9946265 1721912346.3522673 1721912360.1102629 1721912367.2019844 1721912498.5683155 1721912514.5882468 1721987679.8209765 1721987700.8785155 1721987702.3838289 1721987704.0928543 1721987708.7966185 1721987717.842413 1721987731.7817628 1721987743.6735523 1721987755.6558464 1721987776.7134225 1722009022.164185 1722009023.5288925 1722009026.1637077 1722009026.7395837 1722009028.985516 1722009044.6780007 1722009057.0580795 1722009102.7638628 1722009128.2290883 1722011314.4384987 1722011317.0866902 1722011323.0479326 1722011329.1328695 1722011330.6450853 1722011345.1625364 1722011363.1033154 1722011367.4035761 1722011409.0791147 1722011437.4246118 1722083518.8362637 1722083520.1399145 1722083521.4632201 1722083524.563069 1722083525.399378 1722083531.860173 1722083547.3582554 1722083597.739719 1722083631.056319 1722085677.4967399 1722085679.4884202 1722085679.9108589 1722085688.0438259 1722085689.9928405 1722085695.2417676 1722085703.2458162 1722085704.999607 1722085764.2840428 1722085781.77046 1722095979.0386055 1722095980.0828955 1722095981.032806 1722095983.626646 1722095984.984198 1722095999.230339 1722096005.4851468 1722096059.4911695 1722096071.8962398 1722100536.4515254 1722100539.4221365 1722100542.5566645 1722100544.0714207 1722100545.4322321 1722100564.5859752 1722100566.014869 1722100615.2521555 1722100643.20215 1722149013.9013457 1722149015.767447 1722149016.9281707 1722149017.5551665 1722149018.389765 1722149027.7650094 1722149036.6032405 1722149045.8741276 1722149104.189777 1722149107.7602215 1722155521.3010793 1722155522.2409105 1722155523.7213988 1722155528.6886873 1722155542.7506652 1722155672.0228562 1722155681.411199 1722157757.768678 1722157761.2266603 1722157778.985823 1722163153.3098607 1722163155.395189 1722163156.2589576 1722163174.1873949 1722163180.5309765 1722163215.403878 1722163256.7635057 1722165512.4110675 1722174536.351207 1722174538.6816373 1722174539.4588919 1722174542.5816898 1722174554.7090611 1722174566.311441 1722174613.8005621 1722174624.0169446 1722242650.1910343 1722242651.618098 1722242654.8140075 1722242656.8090444 1722242658.0002894 1722242674.320784 1722242686.162094 1722242716.8431196 1722242745.6145446 1722244920.0555336 1722244922.2241864 1722244924.9416807 1722244978.3089955 1722244980.8752184 1722244981.2110722 1722244982.3846757 1722244999.3691816 1722245010.4448211 1722245063.3641362 1722245069.0751998 1722246449.8212233 1722252759.7456295 1722252763.403051 1722252765.549591 1722252766.465789 1722252781.9618795 1722252789.6683662 1722252834.8567882 1722252846.037899 1722255909.6763847 1722255912.8771906 1722255917.6040564 1722255933.7703345 1722255940.327634 1722255954.335101 1722256095.858246 1722256171.285489 1722256831.1770594 1722258348.349472 1722258350.8484561 1722258351.7297373 1722258355.2572641 1722258358.1317604 1722258378.183615 1722258391.2777941 1722258439.4786732 1722258458.8920097 1722258747.4458783 1722258748.4867609 1722258752.014911 1722258753.2976851 1722258776.3941264 1722258780.365012 1722258828.8410087 1722258856.5356793 1722266281.154913 1722266283.9311874 1722266286.8559344 1722266287.742336 1722266295.0477529 1722266307.5419962 1722266318.8401215 1722266368.3401177 1722266390.6271458 1722267600.9945157 1722267613.3273997 1722267615.6415715 1722267629.8862028 1722267646.5896106 1722267701.1500127 1722267710.70105 1722268060.4806027 1722269798.3464947 1722269799.06523 1722269803.173558 1722269805.006228 1722269806.2911599 1722269826.6815646 1722269830.208888 1722269887.5769298 1722269901.5990813 1722271938.8490343 1722271940.654133 1722271942.2798257 1722271945.2685156 1722271954.4873567 1722271960.5731528 1722271970.4570544 1722272032.061529 1722272039.191121 1722285046.130592 1722285053.13936 1722285050.3333395 1722285054.3085802 1722285072.0029724 1722285089.6750438 1722285139.903813 1722285151.8262293 1722286556.865009 1722286557.787786 1722286559.4217722 1722286560.8234248 1722286566.8899527 1722286568.9542303 1722286587.239442 1722286591.8479471 1722286650.8837395 1722286670.6716592 1722287811.6441412 1722287814.9035003 1722287820.1875937 1722287823.045072 1722287833.3711326 1722287840.8799474 1722287847.3387156 1722287910.7062888 1722287933.3743765 1722346814.3318946 1722346815.3555522 1722346816.5075314 1722346819.4600098 1722346823.8913958 1722346840.9840052 1722346852.0418973 1722346901.757354 1722346936.7027256 1722353424.4027636 1722353455.8584085 1722353475.5796852 1722353476.625922 1722353478.1814175 1722353479.2128873 1722353505.9890182 1722353514.8506823 1722353529.4125268 1722353573.6369014 1722357662.938199 1722357666.437098 1722357669.5629907 1722357674.895245 1722357683.176122 1722357690.5174837 1722357699.457917 1722357752.839344 1722357818.180176 1722515375.864221 1722515382.8253098 1722515441.5088887 1722515444.4139678 1722515473.4817035 1722515494.5169368 1722515550.025863 1722515705.8252301 1722515774.3782804 1722703516.6385605 1722703523.7818244 1722703524.9584632 1722703528.4236033 1722703541.265863 1722703551.7528145 1722703605.1434042 1722703617.285085 1722861260.5651002 1722861274.2730734 1722861282.853552 1722861327.648218 1722861328.7040336 1722861341.652638 1722861366.9537344 1722861368.267377 1722861411.8933487 1722957515.2378643 1722957517.9867597 1722957521.0474427 1722957525.66109 1722957526.7974 1722957542.7545946 1722957550.747547 1722965766.1494622 1722965766.9189792 1722965769.080297 1722965775.1350465 1722965776.436328 1722965802.8354776 1722965805.2216742 1722972230.2460885 1722972232.4957376 1722972238.2461116 1722972239.310697 1722972262.4442368 1722972265.5337362 1723119651.996149 1723119671.2755423 1723119674.4815555 1723119675.2286239 1723119700.4973273 1723119732.5752525 1723119837.029244 1723125159.3408673 1723125161.305721 1723125164.671936 1723125185.5027578 1723125201.5769818 1723125281.7976792 1723127344.0401428 1723127345.030985 1723127347.6052334 1723127348.2776942 1723127355.4759185 1723127366.430687 1723127376.5442193 1723127502.6736557 1723127507.9946194 1723127511.6701398 1723127524.3709917 1723127555.333043 1723127624.4754634 1723129978.2325845 1723129980.065203 1723129989.2464702 1723129990.1236107 1723129996.6202312 1723130005.8243701 1723130021.1074052 1723130113.5195165 1723131899.804144 1723131902.20493 1723131905.102239 1723131908.9329078 1723131909.5538316 1723131934.1060607 1723131952.547817 1723132075.5102296 1723132076.8952231 1723132078.9014304 1723132080.5638356 1723132102.4776583 1723132117.5459423 1723132197.1211262 1723134185.454269 1723134186.0828547 1723134188.3349106 1723134189.4652045 1723134190.480767 1723134193.0541909 1723134220.2506118 1723134222.9765935 1723134307.4119363 1723135892.3347054 1723135893.8114343 1723135897.6299603 1723135903.8710804 1723135921.066215 1723135931.0387099 1723136009.1816049 1723136902.2131515 1723136903.9931657 1723136906.1799746 1723136908.3397403 1723136933.3292496 1723136934.7258308 1723137040.877315 1723193766.4798963 1723198497.489374 1723198503.6559103 1723198506.1072052 1723198506.6462848 1723198511.2412324 1723198523.283447 1723198540.268096 1723198601.4533756 1723293918.052099 1723293919.0126128 1723293921.7233214 1723293922.8796544 1723293924.7155743 1723293939.8329105 1723293957.6624916 1723294023.1734905 1723295716.4582942 1723295718.1176283 1723295719.1733673 1723295720.8703227 1723295731.279886 1723295742.4269278 1723295756.1501608 1723295824.8342354 1723296063.7411687 1723296066.0409968 1723296066.9913926 1723296068.4480395 1723296085.9844544 1723296101.2945962 1723296154.130692 1723297450.4546869 1723297453.313314 1723297454.6593533 1723297461.3677888 1723297464.9280722 1723297483.7273545 1723297489.243885 1723297555.934929 1723303640.0538623 1723303641.0859456 1723303666.7665021 1723303674.4819245 1723303792.3911774 1723307055.669447 1723307057.516665 1723307060.937572 1723307065.154463 1723307068.336204 1723307091.879684 1723307102.205826 1723307165.0516765 1723421891.6107564 1723421892.2079666 1723421895.6024501 1723421904.3759992 1723421905.757803 1723421926.5555098 1723422032.8409994 1723457214.2616053 1723457215.15762 1723457217.5868185 1723457254.1931028 1723457260.4853334 1723457313.550356 1723500944.139548 1723500947.844652 1723500950.5009212 1723500972.7893791 1723500986.8719485 1723501045.8168595 1723503249.5519896 1723503250.7019823 1723503252.239709 1723503256.149816 1723503282.5018637 1723503291.6707165 1723503344.7708678 1723617445.5637114 1723617446.120923 1723617447.710768 1723617452.9640238 1723617459.3619127 1723617479.1712415 1723617484.4352062 1723617573.3607473 1723639240.4812639 1723639242.4700098 1723639244.217371 1723639244.9857624 1723639250.0838876 1723639283.742886 1723639306.2462215 1723639394.4827173 1723724470.8341424 1723724471.7962675 1723724472.5649292 1723724483.1117017 1723724489.4274752 1723724504.6824448 1723724742.2423058 1723789488.737526 1723789491.9785106 1723789495.1937232 1723789507.179287 1723789523.8786826 1723789529.5911324 1723789585.4323795 1723969218.427382 1723969221.6018429 1723969222.467898 1723969226.3746696 1723969227.7480848 1723969244.946983 1723969259.1996505 1723969327.049781 1724070102.5254915 1724070104.030959 1724070106.3740706 1724070118.5323465 1724070172.053344 1724070490.7402184 1724143306.904538 1724143311.0641122 1724143311.7600024 1724143315.4748845 1724143317.400293 1724143319.5802855 1724143336.301159 1724143339.2931793 1724143433.1847665 1724158542.3415682 1724158543.136938 1724158545.9649029 1724158546.7066395 1724158551.6076107 1724158570.2962599 1724158577.4562912 1724158661.8227847 1724202592.9038768 1724202628.7645361 1724202629.7426107 1724202639.145731 1724202640.2604976 1724202644.7802536 1724202694.4860175 1724202703.172851 1724202742.1755662 1724320027.2917662 1724320030.2812905 1724320030.9599948 1724320034.4022193 1724320039.9547336 1724320064.6408205 1724320067.8799412 1724320155.4411907 1724322006.8179777 1724322017.021479 1724322100.0275319 1724326816.9750662 1724326835.2257452 1724326839.3397768 1724326858.9847226 1724329530.0523298 1724329531.5851007 1724329532.342777 1724329534.3340228 1724329538.6644125 1724329562.7337675 1724329568.038632 1724329693.312654 1724329728.0111637 1724339828.4843464 1724339832.2171478 1724339834.2105722 1724339836.9052422 1724339842.2160335 1724339853.4929526 1724339860.8692455 1724339927.5192857 1724339972.5675364 1724340171.2986777 1724675112.2099783 1724675112.7536762 1724675113.8609295 1724675130.883486 1724675142.509672 1724675455.240375 1724675476.4276843 1724678442.9240308 1724678443.7646422 1724678447.3701274 1724678450.5327325 1724678471.2342534 1724678481.0344825 1724678614.5176039 1724678662.635488 1724678840.4042537 1724678843.25312 1724678844.0742831 1724678845.7958224 1724678874.517959 1724678879.3479588 1724679030.4941568 1724679097.7171695 1724679895.7099562 1724679898.7889495 1724679900.2195878 1724679903.5279362 1724679921.7844772 1724679928.0266182 1724680045.960651 1724680117.7574298 1724740336.2182548 1724764054.1148956 1724764103.170195 1724764105.5358524 1724764109.538788 1724764111.6916456 1724764113.9705515 1724764139.067442 1724764156.787153 1724764158.9183803 1724764238.4044094 1724931783.1112685 1724931828.8406136 1724931831.20521 1724931839.6174808 1724931841.0950983 1724931846.149007 1724931877.815933 1724931883.4549878 1724931894.0296752 1724931917.710784 1725133164.072982 1725133164.7953568 1725133170.7556214 1725133188.4473302 1725133196.307781 1725133275.3370075 1725133289.371418 1725140712.2051272 1725140713.0222561 1725140716.4887998 1725140718.6381378 1725140720.004144 1725140722.1596622 1725140742.347565 1725140743.618021 1725140797.1206677 1725140803.9172254 1725200633.529623 1725200635.044884 1725200636.8651588 1725200641.4771197 1725200643.175392 1725200662.855143 1725200670.1966913 1725200712.189818 1725200725.6398485 1725200829.3296444 1725207335.0009885 1725207337.3394368 1725207367.0959451 1725207368.6036494 1725207370.6801124 1725207377.3880663 1725207384.7640123 1725207401.538926 1725207505.5956042 1725207507.5365038 1725208502.6187615 1725208505.7267725 1725208507.542662 1725208509.9724796 1725208534.7410796 1725208545.9173281 1725208588.1209402 1725208594.0258324 1725209079.5139468 1725209108.9646592 1725209109.9745634 1725209110.8624318 1725209112.8804767 1725209118.5993817 1725209193.2443478 1725209221.8756156 1725281554.7296872 1725281556.2016904 1725281558.0330102 1725281580.3035154 1725281584.1793041 1725281687.167911 1725281764.955561 1725300224.2238321 1725300225.9345813 1725300229.3170836 1725300230.516357 1725300256.3338172 1725300308.0946443 1725300319.4941478 1725300320.8204544 1725540715.3032386 1725540717.9711885 1725540719.1833887 1725540720.432735 1725540722.1555789 1725540749.0875998 1725540751.213678 1725540972.8921459 1725541015.92986 1725631426.7354417 1725631427.6936705 1725631428.2327724 1725631448.6708682 1725631463.0081913 1725631515.3664324 1725631557.198132 1725822506.3782604 1725822507.5937872 1725822511.661547 1725822512.4515877 1725822515.9412503 1725822535.2268958 1725822593.0592098 1725822598.4597292 1725822607.1766093 1725884435.798726 1725884436.3909311 1725884437.4291615 1725884469.482712 1725884481.8351278 1725884647.5585947 1725884675.1920853 1726143690.4869845 1726143691.3081863 1726143693.3989668 1726143694.4958773 1726143701.1455789 1726143712.3017654 1726143722.4283848 1726143981.2912416 1726144071.9595954 1726302858.4009302 1726675441.8821027 1726675447.1515436 1726675455.56139 1726675468.5214655 1726675479.9343245 1726675529.4341502 1726675578.1315203 1726734255.6599536 1726734258.0744572 1726734261.6568701 1726734263.415758 1726734271.322075 1726734284.6144738 1726734293.6049356 1726734342.2983801 1726734368.8190172 1726829047.453488 1726829048.2625833 1726829050.5636995 1726829053.7786524 1726829056.1417718 1726829059.8768687 1726829083.4874034 1726829086.4730258 1726829091.3235495 1726838086.3674679 1726838087.5454314 1726838090.5266967 1726838091.309051 1726838095.503319 1726838121.7484057 1726838162.286817 1726852924.4158013 1726852947.8678963 1726852969.8119648 1726907944.1144762 1726907946.9047077 1726907954.4580448 1726907957.356998 1726907970.7593565 1726907975.3553808 1726924569.5547562 1726924570.11676 1726924570.6655016 1726924578.9927793 1726924582.2498786 1726924584.8417032 1726924592.4838006 1726924599.1381044 1726924608.6165662 1727094178.8340871 1727094183.3336067 1727094187.5304337 1727094188.7281716 1727094190.2004 1727094197.5468636 1727094204.1370888 1727094213.1934218 1727094224.8191156 1727252538.2230966 1727252545.1595104 1727252559.3410785 1727252560.3491113 1727252585.4905877 1727252604.2638414 1727252611.335605 1727252619.5693839 1727252647.0808942 1727252666.8197966 1727355171.5528011 1727355172.1388216 1727355175.9172277 1727355179.5949962 1727355187.6415644 1727355189.9619722 1727355195.9563243 1727355209.6537554 1727355213.1416783 1727355738.2683496 1727355739.447531 1727355740.8816657 1727355743.0290265 1727355744.3655899 1727355754.689045 1727355768.3128917 1727355773.5655093 1727355789.0512674 1727356845.3867826 1727356849.4635057 1727356851.768166 1727356853.750152 1727356856.3031561 1727356857.9159436 1727356884.2286303 1727356893.986862 1727356913.6343558 1727357844.6776798 1727357847.1814015 1727357851.3251064 1727357863.0378542 1727357870.5985737 1727357881.012939 1727357912.1287177 1727358935.303634 1727358935.9912815 1727358939.3313124 1727358940.3998544 1727358946.4800787 1727358950.667642 1727358960.9032006 1727358974.1791952 1727359005.7682602 1727364185.5690017 1727364186.335221 1727364188.1669273 1727364191.111278 1727364197.9766107 1727364218.0347583 1727364224.4208484 1727364229.735253 1727698959.124807 1727698960.0979502 1727698961.8392282 1727698964.5413785 1727698973.0976288 1727698995.476023 1727699001.1445177 1727699001.8644443 1727951197.7174723 1727951205.6155488 1727951210.6008136 1727951211.924095 1727951214.3595564 1727951239.830181 1727951260.4132447 1727951282.1391022 1727951287.3107123 1727951295.984193 1727957717.7947898 1727957718.6923344 1727957719.9319725 1727957723.2567813 1727957732.4791858 1727957738.5735471 1727957757.3239744 1727957770.9410255 1727958071.3421822 1727958072.6552424 1727958073.4494936 1727958090.4808335 1727958092.377394 1727958098.803949 1727958119.8236375 1727958131.9921308 1728033605.927856 1728033610.166473 1728033618.1204672 1728033619.478822 1728033631.886684 1728033633.5909014 1728033647.518328 1728059474.6622338 1728059487.5971162 1728059514.2836185 1728059537.8234003 1728059539.5742385 1728059555.2033007 1728059577.58866 1728059591.8590653 1728122909.0253503 1728122911.2703123 1728122912.2143638 1728122914.4684803 1728122915.4730194 1728122922.2035043 1728122922.9835937 1728122933.4255273 1728122953.6694286 1728129579.751556 1728129580.3356383 1728129581.3151999 1728129582.1964667 1728129585.9221125 1728129596.659089 1728129602.1400926 1728129611.0264146 1728129613.638498 1728133448.9883578 1728133449.627583 1728133452.256095 1728133453.6784909 1728133457.0713844 1728133462.6810381 1728133480.493868 1728133484.297163 1728133484.900972 1728194810.3820596 1728194811.8586535 1728194812.9597461 1728194816.63949 1728194820.2523391 1728194824.9291325 1728194832.8092308 1728194835.9376342 1728194853.9915667 1728234031.697532 1728234033.8452804 1728234034.8792348 1728234036.522442 1728234038.732697 1728234046.88053 1728234057.2472894 1728234062.2539334 1728234066.9047368 1728303707.3891773 1728303708.2521691 1728303714.9815907 1728303722.5586314 1728303772.3002484 1728303773.1410623 1728303776.6379309 1728303786.609231 1728303836.3226495 1728303846.5049798 1728337169.0340455 1728337170.1327274 1728337174.211485 1728337191.5496802 1728337192.9797745 1728337194.4701893 1728337207.912653 1728537193.6512961 1728732945.4463923 1728732948.6507535 1728732952.2837873 1728732953.691373 1728732955.2932432 1728732956.524756 1728732968.339935 1728732970.5543928 1728732982.2182877 1728737744.7459152 1728737748.98257 1728737752.1383252 1728737761.0445974 1728737812.1413603 1728737818.6112876 1728737826.940009 1728737872.9231803 1728737875.5850608 1728743498.7469113 1728743499.9835532 1728743500.5865278 1728743504.0295928 1728743513.9563892 1728743516.4044924 1728743521.059433 1728743536.4969213 1728743539.457314 1728743942.3254461 1728743947.0616877 1728743948.5496256 1728743952.4485714 1728743956.8069415 1728743972.981716 1728743974.955076 1728743988.2777052 1728745978.289991 1728745979.4105432 1728745981.1054873 1728745981.9421353 1728745985.224251 1728745992.1692357 1728746008.6597588 1728746010.1733787 1728746063.5124123 1728746211.8122053 1728746213.9458363 1728746217.8126671 1728746218.3260763 1728746223.4439285 1728746235.339829 1728746237.54506 1728746240.7656617 1728746242.9190016 1728746253.7251363 1728833700.0260398 1728833701.4446497 1728833702.2353542 1728833703.9480202 1728833708.9518077 1728833713.0262654 1728833714.4510262 1728833723.400574 1728833731.5921385 1728833736.895667 1728835384.371322 1728835385.962284 1728835387.0517457 1728835387.7445607 1728835388.9590096 1728835392.4119325 1728835399.9746296 1728835407.122815 1728835417.8316333 1728835431.4600117 1728836544.9717374 1728836547.9728825 1728836549.3966005 1728836551.46428 1728836552.6611505 1728836564.7708545 1728836575.8413124 1728836577.6584494 1728836582.209422 1728920255.0991843 1728920258.0877094 1728920266.047279 1728920267.7859914 1728920269.8180747 1728920271.430736 1728920272.3737376 1728920275.7158494 1728920285.1150532 1728920313.6354492 1729006711.7335062 1729006718.0533266 1729006720.2043796 1729006723.6731513 1729006726.5683281 1729006733.0146976 1729006754.30765 1729006776.9883995 1729010354.851715 1729010356.3835125 1729010372.5242126 1729010386.5633569 1729010392.79671 1729010395.8405745 1729033820.8557181 1729033823.9684222 1729033826.6887953 1729033828.8346639 1729033829.7552333 1729033835.2953548 1729033851.8851895 1729033867.2496648 1729033873.9356413 1729092755.8003762 1729092757.4442213 1729092760.2669573 1729092762.2494287 1729092763.1737988 1729092776.6677477 1729092783.585181 1729092795.4211159 1729092802.884515 1729093404.8581364 1729093406.1022863 1729093409.6069078 1729093413.4827905 1729093415.0146415 1729093437.0040774 1729093443.9370294 1729093455.6258225 1729093917.3740594 1729093924.7103052 1729093926.2689004 1729093934.4847856 1729093939.4272058 1729093949.0355246 1729093972.820219 1729094446.2924614 1729094448.044019 1729094450.5190663 1729094452.3579662 1729094454.1246204 1729094455.875043 1729094467.1689668 1729094470.4615102 1729094494.8975074 1729094518.1359916 1729104871.5899901 1729104874.876859 1729104876.8862448 1729104877.7222195 1729104879.6530187 1729104887.6756997 1729104891.0999753 1729104907.2810287 1729104915.628079 1729257860.7060654 1729257865.0598102 1729257865.908288 1729257870.1832783 1729257884.2104728 1729257890.3658347 1729257893.8982866 1729257898.6145709 1729332868.8884962 1729332875.6134863 1729332877.9988463 1729332879.5559447 1729332893.679242 1729332894.9814157 1729332920.3224845 1729332947.9222736 1729332968.8512816 1729334085.642702 1729334088.3801568 1729334092.1009166 1729334092.9905782 1729334094.3209932 1729334098.021537 1729334103.7886531 1729334113.7123656 1729334126.603184 1729334133.2773445 1729339236.7112806 1729339237.2109628 1729339239.8039072 1729339241.923618 1729339245.3853216 1729339246.3951786 1729339250.5824714 1729339262.8487272 1729339267.2262473 1729339292.2161791 1729342907.005911 1729342912.4427733 1729342919.0908499 1729342920.2621865 1729342922.3985302 1729342932.4808924 1729342939.7966642 1729342947.7565434 1729342958.935519 1729345509.0483184 1729345510.2446895 1729345512.228264 1729345513.2745836 1729345515.4445262 1729345516.5309505 1729345523.1481001 1729345530.791648 1729345543.021134 1729345564.3512073 1729352269.5894463 1729352271.1257896 1729352272.4453163 1729352278.0577192 1729352281.2217155 1729352286.6776705 1729352298.173631 1729352299.0579467 1729352314.2006667 1729352316.07831 1729355762.6713998 1729355763.7223508 1729355767.140102 1729355768.0427616 1729355770.2150545 1729355779.3283195 1729355787.676488 1729355806.501878 1729358508.6128478 1729358509.3026485 1729358510.1842167 1729358513.0574265 1729358515.126321 1729358516.7900476 1729358525.60399 1729358529.4947524 1729358545.4960544 1729358552.3557 1729367046.3978016 1729367049.017654 1729367050.0929554 1729367051.2651315 1729367056.071756 1729367056.814972 1729367063.5559955 1729367071.520121 1729367080.6116037 1729412704.8927162 1729412706.355342 1729412708.0568678 1729412710.6722658 1729412715.3055286 1729412720.817641 1729412735.5620499 1729412740.1556945 1729412750.209623 1729506881.5077236 1729506882.998659 1729506885.2772717 1729506887.9168231 1729506889.3227882 1729506890.270235 1729506908.287083 1729506917.0852423 1729506922.2671366 1729506925.880165 1729562000.486412 1729562002.1365795 1729562003.450998 1729562005.5320075 1729562013.7140665 1729562014.851959 1729562027.823392 1729562030.9649224 1729562037.4399283 1729772628.024384 1729772632.1716542 1729772633.3096597 1729772641.8233664 1729772643.2488031 1729772652.314984 1729772667.7016115 1729772677.9223237 1729774190.9545734 1729774191.597862 1729774193.9808326 1729774202.2812762 1729774205.5565357 1729774211.2316782 1729774216.5960338 1729774227.0569327 1729774234.6505063 1729956626.8351767 1729956628.2261896 1729956630.6545267 1729956631.7810423 1729956632.7964118 1729956641.0736098 1729956646.7477207 1729956656.1438482 1729956677.1112947 1729963223.1188562 1729963225.7192516 1729963230.0806804 1729963236.5373201 1729963237.9832456 1729963238.6328769 1729963240.6313212 1729963249.340651 1729963252.4305904 1729963258.9741237 1730041013.5380948 1730041015.6442053 1730041026.0668254 1730041067.7284575 1730041076.675968 1730041087.8943112 1730041095.5179813 1730041129.9984517 1730041146.4527524 1730042544.7177842 1730042546.114285 1730042549.491665 1730042552.6548748 1730042554.1026793 1730042562.970534 1730042566.0576777 1730042566.737246 1730042578.9335535 1730044922.608126 1730044923.2814202 1730044926.6715765 1730044933.286997 1730044938.2111177 1730044945.0962775 1730044958.992743 1730044964.1534376 1730108564.953472 1730108566.2638736 1730108567.4402096 1730108574.8510845 1730108575.9162414 1730108588.8945043 1730108595.2026105 1730108647.3785403 1730118135.637466 1730118140.5202587 1730118141.2257318 1730118144.1956835 1730118148.371045 1730118151.6871338 1730118166.2305794 1730118184.2650702 1730118203.2182014 1730179976.65268 1730179977.939642 1730179978.7225032 1730179980.8295987 1730179988.8647323 1730179989.9527414 1730179998.2916584 1730180000.8676643 1730180007.775465 1730180025.6631205 1730218898.9072146 1730218905.6026793 1730218909.059037 1730218910.3365545 1730218915.8225565 1730218926.8502307 1730218932.3286083 1730218939.3001914 1730275298.8027234 1730275301.4654057 1730275303.1072261 1730275304.0636823 1730275317.381003 1730275320.6247735 1730275333.5557346 1730275380.380172 1730280384.1852689 1730280384.8983238 1730280385.6372325 1730280388.6256185 1730280390.6127968 1730280396.4061003 1730280405.0505073 1730280422.5386162 1730280426.1869366 1730280430.868838 1730284674.686032 1730284680.906267 1730284682.2430077 1730284685.2335389 1730284689.0890508 1730284689.7998638 1730284702.695149 1730284715.6218622 1730284722.7031624 1730374527.1452029 1730374527.7010581 1730374529.5714324 1730374532.335925 1730374539.5056646 1730374545.225128 1730374562.1102057 1730374571.857448 1730380728.7295353 1730380731.150879 1730380732.6688063 1730380736.5049667 1730380739.8626847 1730380754.6919937 1730380764.2745686 1730380770.4302964 1730409100.9300206 1730409102.331282 1730409102.9998615 1730409105.8457847 1730409117.0779421 1730409125.186845 1730409140.8327959 1730413799.680919 1730425798.490704 1730425799.8475976 1730425804.5104012 1730425807.6398041 1730425811.7750034 1730425823.3259237 1730425830.182246 1730425831.0041034 1730477208.939486 1730477210.362072 1730477213.3330104 1730477222.7644532 1730477250.6180503 1730477271.8797004 1730477278.7356114 1730477311.7083013 1730477344.9664245 1730551466.2613475 1730551468.1558676 1730551468.6379552 1730551471.574293 1730551485.292978 1730551714.9587398 1730551721.064079 1730551770.7810545 1730551772.724341 1730551779.172007 1730551783.5625727 1730551785.240131 1730551795.530203 1730551816.602113 1730551843.3321774 1730568764.139239 1730568766.4208605 1730568768.0659432 1730568770.7483375 1730568775.3193119 1730568777.1212685 1730568778.2512453 1730568786.6107159 1730568792.1702764 1730568803.3814995 1730572393.2263505 1730572394.2957191 1730572396.1838949 1730572403.882823 1730572407.1082404 1730572415.5606542 1730572418.9502246 1730572426.7249322 1730573493.4395432 1730573494.498661 1730573497.7063038 1730573499.4742029 1730573503.44434 1730573505.044457 1730573507.062294 1730573514.6670637 1730573527.9402637 1730573529.6573448 1730646276.7328491 1730646278.8141346 1730646279.7373104 1730646286.0035422 1730646292.8514357 1730646295.655658 1730646306.019205 1730646327.7861974 1730647912.8937979 1730647913.7561932 1730647916.4450212 1730647919.0412316 1730647921.0074391 1730647926.6910808 1730647930.057654 1730647933.496736 1730647936.6280458 1730647949.4988215 1730807242.5316253 1730807244.3396552 1730807245.8609428 1730807251.8184936 1730807261.783787 1730807265.3647041 1730807272.387132 1730817468.565808 1730817471.377723 1730817472.8056078 1730817482.5650048 1730817497.1087816 1730817499.4315834 1730817503.9007418 1730817513.8748765 1730817523.1081626 1730821401.8298514 1730821406.4129963 1730821407.9715912 1730821409.6416264 1730821412.768464 1730821421.6235604 1730821427.8204122 1730821437.4782767 1730821442.916009 1730822472.9151068 1730822478.4528308 1730822479.8638492 1730822482.0061872 1730822486.754859 1730822490.588171 1730822506.739088 1730822513.804522 1730899260.7787814 1730899264.2263396 1730899273.500649 1730899292.8726277 1730899303.721257 1730901723.905749 1730901742.118694 1730901753.511005 1730903054.6751752 1730903055.8458865 1730903057.2122521 1730903074.4498112 1730971745.8499439 1730971747.5699441 1730971749.1461153 1730971751.4877 1730971759.2653332 1730971761.1175764 1730971775.4306664 1730971783.5866497 1730971803.5608537 1730981972.6511354 1730981973.328158 1730981974.8271549 1730981977.8909194 1730981987.2681918 1730981999.041532 1730981999.8671234 1730982008.7539716 1730982044.559671 1731056397.2586415 1731056402.036135 1731056411.9442914 1731056451.7027507 1731056453.9502587 1731056486.1215286 1731056487.0533705 1731056515.2322998 1731056532.1200871 1731144519.888281 1731144520.509171 1731144523.3933926 1731144527.078465 1731144531.4000866 1731144542.6378856 1731144549.7665086 1731144686.2622302 1731144689.2599902 1731144690.9398296 1731144695.6028743 1731144699.6347964 1731144707.2914085 1731144712.291652 1731144721.7356853 1731144727.467037 1731148127.8145342 1731148129.112714 1731148131.860765 1731148136.942361 1731148141.6284542 1731148154.7230666 1731148155.9279375 1731148162.3672278 1731148397.0358782 1731148397.522588 1731148400.5981908 1731148402.4493976 1731148410.2816496 1731148419.8652954 1731148428.1873734 1731148429.6606069 1731148718.409702 1731148723.2307727 1731148724.7611856 1731148725.445875 1731148728.9497018 1731148733.7036128 1731148749.5031757 1731148755.6574883 1731148767.156155 1731154967.4147255 1731154971.837443 1731154972.7053823 1731154979.110837 1731154980.2745206 1731154994.0468187 1731154998.1615376 1731155002.669648 1731167622.600458 1731167626.352391 1731167629.0613265 1731167632.2916656 1731167638.0113463 1731167644.7619684 1731167645.7460804 1731167653.387026 1731171025.7433338 1731171028.1454437 1731171032.2400746 1731171041.9862351 1731171043.0770853 1731171055.3759856 1731171055.877064 1731171075.172642 1731229412.1347032 1731229415.2789226 1731229416.5422425 1731229418.095707 1731229431.661456 1731229433.0100691 1731229437.1850004 1731229442.8717866 1731229613.1210473 1731229613.8068168 1731229614.5309494 1731229621.1576624 1731229628.7896118 1731229631.4962785 1731229637.5075917 1731229639.5613863 1731229654.606807 1731481286.7534761 1731481288.5645113 1731481290.766877 1731481291.8198197 1731481302.1982982 1731481308.6676452 1731481327.047522 1731481331.2523713 1731593220.8888807 1731593224.1370466 1731593225.8446 1731593231.513437 1731593235.6293445 1731593265.1321702 1731593265.8563323 1731593266.696744 1731593298.358575 1731859628.3740964 1731859630.484212 1731859631.553499 1731859633.175853 1731859634.8326163 1731859637.6302872 1731859651.440454 1731859654.1323884 1731859662.2396228 1731859672.9553397 1731861962.1777155 1731861964.292851 1731861977.7196784 1731861979.7432628 1731861986.7312233 1731861990.4504364 1731922884.9139953 1731922887.2335374 1731922887.9522748 1731922888.5676258 1731922897.286149 1731922906.193417 1731922913.8000236 1731922923.4335632 1731922945.7963576 1731932203.806244 1731932204.5280297 1731932207.3690157 1731932210.3461585 1731932213.994411 1731932222.5832834 1731932223.471831 1731932249.044136 1731932265.9347122 1731932501.2521935 1731932508.8772318 1731932513.0450733 1731932542.3964057 1731932553.9959211 1731932563.2576783 1731932594.0971456 1731933170.9760642 1731933172.4696252 1731933173.7094665 1731933178.535318 1731933182.5050938 1731933185.610432 1731933197.295215 1731933222.811717 1731933232.5881987 1731935401.3611374 1731935413.0451057 1731935414.2300546 1731935416.9610739 1731935429.9369838 1731935445.890509 1731947718.9175668 1731947721.6089666 1731947723.2720885 1731947726.3099442 1731947732.5519915 1731947734.7302103 1731947746.6716468 1731947754.0796657 1731947759.056394 1731963042.2459922 1731963043.3076453 1731963047.4277034 1731963050.4457273 1731963051.789089 1731963059.3552227 1731963066.1642108 1731963898.3942215 1731963899.426723 1731963902.774446 1731963908.7706244 1731963913.0985982 1731963916.1861327 1731963930.2955592 1731965728.4651444 1731965729.8994205 1731965734.3784678 1731965735.846021 1731965741.7106583 1731965743.9287534 1731965753.8558125 1731965761.6160433 1731965769.8767486 1731997802.2921572 1731997810.3072803 1731997821.0103588 1731997823.6369407 1731997842.411579 1732005461.3886943 1732005463.7190425 1732005471.0041788 1732005474.6214101 1732005485.6469896 1732005499.9193833 1732008487.1600018 1732008491.797435 1732008494.5423522 1732008502.4767828 1732008514.2675614 1732008528.0170114 1732031510.4307609 1732031512.470964 1732031513.5795474 1732031515.2409818 1732031523.700186 1732031555.7789493 1732031561.1792595 1732031575.9569871 1732031604.1394897 1732031631.6602669 1732033181.5732715 1732033187.0737615 1732033188.6749732 1732033191.9551766 1732033194.1693351 1732033205.2199373 1732033222.024943 1732033223.8429763 1732041367.0638227 1732041374.360133 1732041375.0871248 1732041386.533412 1732041429.4158008 1732041455.4944332 1732041459.8669043 1732041465.4243455 1732041515.1712544 1732263466.6664398 1732263467.7951367 1732263471.1644146 1732263479.6797717 1732263480.2140698 1732263498.7567801 1732263522.56127 1732264323.2435894 1732288770.6208334 1732288780.6333094 1732288792.343384 1732288797.264224 1732288809.1924157 1732288813.6531975 1732288817.9377081 1732288820.9671955 1732288828.0163698 1732383770.9811113 1732383772.019344 1732383775.677074 1732383783.7112272 1732383785.2454233 1732383791.2049956 1732383804.3264155 1732383828.7691948 1732383855.2422316 1732384005.5223076 1732384006.78085 1732384009.1067138 1732384011.001988 1732384016.0497475 1732384029.856547 1732384038.54369 1732384056.9650784 1732433695.8831894 1732433732.9025521 1732433748.8732421 1732433783.7346292 1732441728.9562159 1732441754.4433556 1732441782.3504713 1732441805.516257 1732451639.3175128 1732451643.1642468 1732451645.2693274 1732451751.4095888 1732452561.6061358 1732452576.3843272 1732452603.0346284 1732452616.329989 1732453335.171801 1732453347.7624328 1732453388.8228903 1732453412.1198726 1732457617.6644711 1732457618.7323854 1732457625.315965 1732457629.101936 1732461125.5489106 1732461128.287391 1732461141.5258722 1732461147.4306962 1732467075.7547572 1732467084.6461084 1732467091.89446 1732467122.5807369 1732468773.0488203 1732468802.825153 1732468813.33293 1732469872.8794227 1732469876.575231 1732469902.8869994 1732469955.3939478 1732470377.6167781 1732470396.1452968 1732470423.8126786 1732470445.830942 1732470991.45309 1732470993.7259717 1732471013.3167658 1732471018.7096245 1732471036.7073948 1732471039.5707095 1732471044.3352518 1732471062.9311054 1732520037.0320818 1732520040.5129967 1732520042.1200364 1732520044.3863719 1732520044.986072 1732520057.2194798 1732520065.5948634 1732520087.8231437 1732520095.1079488 1732536734.1849625 1732536735.187456 1732536736.589417 1732536744.997573 1732536746.8804607 1732536754.527193 1732536760.801082 1732536778.5082223 1732536779.565857 1732553889.4913087 1732553891.8560991 1732553893.615305 1732553897.2921178 1732553899.525495 1732553901.1819782 1732553905.777386 1732553917.4970317 1732553923.9444463 1732562315.4978662 1732562315.966834 1732562318.6292334 1732562322.6073444 1732562327.6694388 1732562346.4216428 1732562356.2182302 1732562357.001847 1732593967.9975262 1732593968.631301 1732593969.3510222 1732593972.3546522 1732593977.7886488 1732593979.985906 1732594000.434706 1732594015.288365 1732594036.3076348 1732616945.9189374 1732616946.8032322 1732616950.1755753 1732616952.190844 1732616956.7188 1732616973.3852801 1732616981.3340652 1732617007.8578043 1732650478.146098 1732650478.8655012 1732650482.054069 1732650483.2019038 1732650491.7780273 1732650501.0392954 1732650504.1629848 1732650520.974529 1732719992.060976 1732719992.9039497 1732719993.6523044 1732719994.3609269 1732719997.193117 1732720008.3417926 1732720024.2752085 1732720025.8679025 1732720054.9436398 1732721005.8010385 1732721008.0343213 1732721010.1515133 1732721017.508236 1732721021.39178 1732721024.1566527 1732721030.3488595 1732721041.7503881 1732721047.331507 1732722433.5197935 1732722435.6278255 1732722439.5679765 1732722441.9508731 1732722446.9056737 1732722454.7095733 1732722468.0639024 1732722477.8043704 1732871671.3932276 1732871672.2253082 1732871678.2360198 1732871684.9135783 1732871686.3062546 1732871687.5788589 1732871689.2884448 1732871707.1721458 1732871713.4964151 1732871719.3099146 1732948701.823288 1732948705.645968 1732948712.4570334 1732948715.2281327 1732948716.8692715 1732948724.1452303 1732948740.629487 1732951478.1179664 1732951478.6306114 1732951481.6304414 1732951482.4399962 1732951490.939268 1732951498.3275948 1732958893.428547 1732958894.411381 1732958918.0187109 1732958927.3729992 1732959282.7071395 1732959313.630829 1732959320.7503846 1732959748.9811394 1732959770.8425634 1732960101.9984646 1732960107.534045 1732960138.5458903 1732960145.0319757 1732962593.7243786 1732962599.6971328 1732962601.0662632 1732962606.605405 1732962608.2602785 1732962610.6957266 1732962611.941968 1732962618.4101582 1732962624.4917603 1732962628.754138 1732970526.5556984 1732970538.7876263 1732970550.6137106 1732970566.5419803 1732970857.9357018 1732970861.2015047 1732970880.6689203 1732970901.5037766 1732975118.6913564 1732975121.714272 1732975124.1275043 1732975126.7590756 1732975127.902717 1732975136.1045487 1732975144.8489838 1732975152.0163014 1732975166.8195279 1732985289.0232406 1732985292.5707827 1732985298.2890525 1732985300.096001 1732985304.9423993 1732985310.3897424 1732985316.3400378 1732985320.7302096 1732985330.646815 1733080179.8714154 1733080182.2174754 1733080183.7056813 1733080187.129284 1733080187.6562762 1733080197.6049402 1733080206.2771382 1733080214.914623 1733080229.6740513 1733140064.208817 1733140065.2534864 1733140065.9737613 1733140069.2690368 1733140070.786767 1733140075.0304115 1733140081.696741 1733140093.7225945 1733140106.7209074 1733140109.0243447 1733143242.2514603 1733143248.2144585 1733143249.4314134 1733143251.6573458 1733143256.0222833 1733143259.6437476 1733143267.2247188 1733143270.0791595 1733143277.795833 1733143286.3701718 1733154982.5744405 1733154986.1220756 1733154987.259687 1733154991.008131 1733154991.8595552 1733154994.1339047 1733155010.4902403 1733155019.416577 1733155042.1721528 1733159155.4314275 1733159167.030669 1733159168.4029393 1733159174.167873 1733159175.1603377 1733159202.731806 1733159210.605375 1733168522.0316908 1733168526.638999 1733168531.6582913 1733168532.5080645 1733168535.4875433 1733168544.9785478 1733168548.9552453 1733168573.5332053 1733169970.4149306 1733169971.7890635 1733169987.607266 1733169988.9386342 1733169990.5251367 1733169992.666319 1733169994.047022 1733169995.7627249 1733170009.7685456 1733170462.0889544 1733170463.9820032 1733170467.044954 1733170471.9154284 1733170480.642101 1733170481.885501 1733170496.5555415 1733170505.309697 1733219253.6427739 1733219256.7237084 1733219261.192824 1733219266.133451 1733219268.4844553 1733219269.1851923 1733219289.6428618 1733219294.3419852 1733219300.7973099 1733219630.9789228 1733219631.5469549 1733219633.5728836 1733219637.2201772 1733219639.1018076 1733219646.767386 1733219660.574712 1733219675.677772 1733219687.30307 1733224231.4707232 1733224232.3889892 1733224234.342062 1733224235.8343258 1733224237.4398193 1733224245.0629716 1733224257.4724257 1733224266.3068144 1733224271.8994398 1733227582.8463392 1733227583.5131407 1733227585.0287392 1733227592.584582 1733227604.602964 1733227610.088609 1733227628.302275 1733227641.8276615 1733228864.4773238 1733228866.74998 1733228869.8279743 1733228872.190608 1733228874.8892612 1733228884.3857858 1733228887.3335903 1733228897.1727421 1733228971.4516807 1733229786.021049 1733229786.66641 1733229790.7480805 1733229799.2262502 1733229802.0443177 1733229804.4731007 1733229811.4373858 1733229813.377825 1733229826.7686434 1733229853.3298552 1733234293.688889 1733234301.798663 1733234304.4010224 1733234305.4084508 1733234306.1285028 1733234308.6419322 1733234314.0123327 1733234319.1362226 1733234340.7632995 1733234876.684493 1733234879.0027857 1733234882.3916202 1733234883.6695943 1733234889.1685822 1733234891.9050684 1733234908.3120115 1733234936.354204 1733234938.8755677 1733238720.608564 1733238726.1778567 1733238730.278317 1733238734.962571 1733238753.1915474 1733238766.1926172 1733238990.5689092 1733238992.9023156 1733239002.4197814 1733239009.9664338 1733239013.7127926 1733239015.8269987 1733239041.6941237 1733239048.5333445 1733240946.6946738 1733240948.684239 1733240949.858537 1733240951.7910414 1733240966.3996506 1733240982.7181993 1733240983.687201 1733240986.7007341 1733242288.9102626 1733242291.8940446 1733242293.693395 1733242298.4761782 1733242306.8164103 1733242311.8970075 1733242318.5424666 1733242336.828924 1733255433.1931605 1733255633.6699867 1733255653.0470135 1733255663.1899922 1733271568.5178902 1733293035.286282 1733293038.8491454 1733293062.8098772 1733293075.5979953 1733306785.4062219 1733306788.1839104 1733306795.809741 1733306798.033864 1733306810.0447462 1733306819.5070994 1733306821.8249385 1733306845.3565247 1733308871.4943094 1733308873.2617729 1733308879.7920218 1733308880.398352 1733308899.693787 1733308903.4764695 1733308904.7923117 1733309390.7614777 1733309395.251379 1733309398.2893078 1733309402.5071542 1733309406.6513014 1733309412.9853697 1733309419.4013913 1733309444.7180636 1733314049.608768 1733314050.8355372 1733314055.470318 1733314072.3486557 1733314098.261678 1733315374.4849255 1733315406.3125675 1733315453.007395 1733322553.0044217 1733322556.9803238 1733322563.83114 1733322576.0566854 1733322596.9634542 1733322598.1692662 1733322768.862828 1733322773.8497927 1733322776.958355 1733322777.9852057 1733322779.067944 1733322785.3724024 1733322790.6682105 1733322802.9243758 1733322827.531432 1733333193.2300014 1733333198.3919308 1733333200.4507997 1733333212.6177614 1733333215.9385328 1733333235.194576 1733333238.831189 1733338333.5444129 1733338335.7633626 1733338346.8919969 1733338361.1912727 1733338380.2940402 1733339052.9226713 1733339057.1518238 1733339057.6057532 1733339061.192743 1733339068.2405028 1733339079.9187348 1733339084.0606103 1733380420.0212486 1733380421.606655 1733380425.2091165 1733380426.0167086 1733380432.8284676 1733380436.2047918 1733380446.2166383 1733380451.8656907 1733380463.5257213 1733384979.0359178 1733384981.606588 1733384985.539735 1733384992.5014267 1733384998.4741216 1733385006.1097124 1733385011.9194536 1733390811.420039 1733390812.1788619 1733390818.8177466 1733390833.786025 1733390835.3938174 1733390838.1063056 1733390844.777927 1733396841.614761 1733396848.0114086 1733396850.8401172 1733396852.8094835 1733396860.2416327 1733396863.0192623 1733396871.7705586 1733396914.0040936 1733401219.1505253 1733401220.0574515 1733401225.063062 1733401226.787789 1733401232.2275171 1733401245.996172 1733401277.5867527 1733449646.5339172 1733449653.2777321 1733449655.3623538 1733449657.6258104 1733449658.5671172 1733449659.9490492 1733449666.6821601 1733449674.7923486 1733449691.2928286 1733494747.931788 1733494753.0851731 1733494757.7123055 1733494758.2674625 1733494762.5787327 1733494782.7055457 1733494783.6043348 1733494789.1412604 1733495742.2988338 1733495743.761341 1733495744.4240904 1733495747.9927275 1733495763.3438127 1733495766.8898356 1733495787.6293023 1733495792.2613227 1733499449.4758797 1733499456.7387803 1733499457.9393198 1733499459.3670979 1733499463.4222405 1733499474.702234 1733499476.049058 1733499483.5740209 1733499498.3721578 1733502662.0274692 1733502663.8277683 1733502665.095098 1733502672.2443776 1733502677.5460172 1733502690.7745686 1733502694.9604292 1733502708.0412395 1733505470.201204 1733505472.1913333 1733505473.263023 1733505476.0696583 1733505482.4900954 1733505487.4447098 1733505505.671235 1733505517.676156 1733505733.499319 1733505734.095049 1733505735.8226748 1733505740.2475958 1733505748.0329335 1733505761.4851673 1733505794.7748582 1733506113.984502 1733506122.9218292 1733506123.361182 1733506123.9724724 1733506128.3213918 1733506138.5410657 1733506143.387333 1733506151.5541925 1733557537.7647562 1733557539.9018676 1733557544.0487056 1733557550.7210174 1733557558.1248958 1733557559.7645786 1733557564.649211 1733557567.2888486 1733565406.164843 1733565406.9513352 1733565418.972544 1733565423.6188152 1733565432.9495125 1733565439.746262 1733567442.0237205 1733567446.3039818 1733567447.3340971 1733567459.8344622 1733567460.4285808 1733567462.8390877 1733567473.067186 1733567935.1028788 1733567938.1556034 1733567940.3346186 1733567950.854293 1733567960.1414592 1733567960.701589 1733567969.7438977 1733567972.6006207 1733570469.411528 1733570470.6235194 1733570471.3499756 1733570472.2118711 1733570474.2138884 1733570485.6307247 1733570492.1640036 1733570493.0946727 1733570511.4052603 1733571081.2802474 1733571083.6984477 1733571084.258744 1733571100.301063 1733571107.8362153 1733571113.5683346 1733571117.6746516 1733585231.6380436 1733585234.323886 1733585236.852115 1733585237.8098404 1733585241.079353 1733585244.1001995 1733585251.813903 1733585259.0539622 1733585263.1471586 1733585750.7919397 1733585756.250291 1733585766.299205 1733585768.5369081 1733585774.1288636 1733585790.8809888 1733585793.410951 1733595927.1657395 1733595931.978675 1733595933.186769 1733595933.7419264 1733595935.2153459 1733595937.777819 1733595948.0802283 1733595961.6471128 1733595996.1958773 1733643664.802906 1733643666.9933524 1733643676.61076 1733643678.5545428 1733643679.6358993 1733643681.6312675 1733643686.9804542 1733643729.4601016 1733643739.8072762 1733650787.7630966 1733650790.2734067 1733650798.6556857 1733650809.237082 1733650810.5124211 1733650837.7441363 1733650867.9347098 1733650874.5275176 1733653494.9788938 1733653495.7485487 1733653496.8101516 1733653508.7553625 1733653509.3915036 1733653519.4390192 1733653534.3760762 1733653537.5714998 1733656739.7554934 1733656740.9948246 1733656745.699247 1733656755.4289315 1733656760.9822845 1733656761.6517587 1733656764.7476268 1733656766.3896408 1733658253.7502165 1733658254.63226 1733658255.2004552 1733658272.5413344 1733658279.3151307 1733658284.36497 1733658290.7471957 1733658918.9721398 1733658920.3418303 1733658925.7979481 1733658940.7062976 1733658948.3468363 1733658956.1735587 1733658970.5708482 1733661213.063345 1733661216.4161725 1733661216.90439 1733661220.4818115 1733661221.8897872 1733661227.467153 1733661233.9002542 1733661235.2784066 1733661242.5368476 1733672735.1560616 1733672737.0928104 1733672741.9912848 1733672744.640307 1733672746.223438 1733672747.8502743 1733672762.349206 1733672764.4948823 1733672769.2089665 1733673042.7114322 1733673048.5305562 1733673050.175404 1733673051.0693357 1733673062.6022651 1733673075.8755403 1733673080.5610647 1733673105.5424361 1733677623.205507 1733677624.1413872 1733677625.5410368 1733677630.676029 1733677641.258817 1733677644.0154574 1733677670.450337 1733677697.539429 1733677706.220611 1733732917.729072 1733732922.778485 1733732924.1954682 1733732925.1251035 1733732939.5123525 1733732943.796028 1733732977.3228796 1733739732.753779 1733739737.683406 1733739741.5038257 1733739743.8315432 1733739758.1880817 1733739770.6115084 1733739789.3433433 1733739808.6955342 1733739812.6888 1733740512.385763 1733740513.2260416 1733740515.098953 1733740523.913746 1733740525.3611784 1733740526.5216775 1733740544.2393446 1733740547.1774135 1733740555.3291698 1733743804.4463463 1733743807.3536985 1733743809.70843 1733743810.3246124 1733743817.6777225 1733743823.017097 1733743839.215962 1733743842.400228 1733743867.113646 1733746817.5787003 1733746818.3561563 1733746827.4099703 1733746831.6853008 1733746847.3427215 1733746849.3852785 1733746903.903557 1733748596.8917224 1733748597.7761698 1733748602.9008763 1733748605.3872135 1733748615.1536703 1733748620.2708554 1733748629.0212128 1733748652.1510158 1733761260.5527625 1733761261.838159 1733761264.4923453 1733761269.7144816 1733761275.7195458 1733761291.0287778 1733761295.432108 1733761316.7537513 1733761804.904209 1733761808.0875254 1733761810.4236267 1733761812.4223142 1733761823.0650399 1733761827.1908689 1733761837.127467 1733761841.3615758 1733761866.1509743 1733762264.8901064 1733762265.9916751 1733762267.266812 1733762271.8752313 1733762272.5526114 1733762280.5551348 1733762288.5907092 1733762294.4682882 1733762324.5145082 1733797678.9547925 1733797680.3043654 1733797686.3321779 1733797693.5512068 1733797703.2558506 1733797707.1447423 1733797708.8686543 1733822509.377478 1733822510.2404916 1733822520.1245093 1733822524.2725966 1733822524.995237 1733822532.6738303 1733822540.19579 1733822555.0441415 1733823236.1631703 1733823239.772133 1733823240.5919967 1733823242.2522368 1733823244.2788386 1733823252.2633336 1733823262.5869706 1733823264.0098014 1733823280.2782557 1733827759.2170558 1733827761.83209 1733827767.0119371 1733827767.9738233 1733827773.2282934 1733827791.2194312 1733827791.7680264 1733827797.6309197 1733832972.2255442 1733832973.1952362 1733832975.952454 1733832995.9818823 1733833000.4753177 1733833002.799605 1733833036.6471875 1733834737.8805032 1733834740.0520172 1733834743.88104 1733834748.1553388 1733834752.4233265 1733834769.8890462 1733834772.4007912 1733834798.1576154 1733836074.259244 1733836077.7049952 1733836083.0826397 1733836084.2656305 1733836088.6810768 1733836102.482965 1733836113.1277158 1733836132.5725064 1733836496.3533037 1733836498.3189676 1733836499.0263884 1733836502.0276124 1733836514.4971824 1733836522.197993 1733836525.4895005 1733836546.553581 1733905764.6046803 1733905768.2721238 1733905769.7859128 1733905775.6284866 1733905777.6412177 1733905789.8565626 1733905797.3834574 1733905812.554496 1733908927.7658398 1733908931.5025 1733908934.0517693 1733908940.4066727 1733908952.016059 1733908964.3180888 1733908989.1316671 1733908993.2989984 1733909288.657325 1733909290.8760068 1733909293.3179958 1733909293.7696488 1733909307.5138328 1733909313.9445667 1733909328.9396684 1733909330.359382 1733909336.699531 1733909902.4304671 1733909904.6518452 1733909910.477193 1733909924.9769745 1733909932.6229227 1733909938.500676 1733909946.0414634 1734006504.1333292 1734006509.8071592 1734006512.048598 1734006517.1330192 1734006518.812081 1734006533.7427895 1734006547.1742134 1734006555.7657967 1734015726.2168474 1734015726.9747858 1734015732.3542402 1734015740.220944 1734015759.9980555 1734015764.1156278 1734015784.5271907 1734027101.1632953 1734027102.2415211 1734027104.4368935 1734027105.446029 1734027107.0598297 1734027117.1169271 1734027128.1979995 1734027139.2692516 1734027140.5368311 1734088774.0993812 1734088777.1879537 1734088777.714932 1734088780.891004 1734088781.4808877 1734088789.5336397 1734088804.045803 1734088816.0933163 1734093159.558811 1734093160.9894395 1734093162.3781676 1734093170.8064487 1734093174.7633927 1734093183.86795 1734093188.411972 1734093196.76535 1734172341.7707095 1734172342.4083743 1734172343.168821 1734172350.172758 1734172356.9757605 1734172363.7750375 1734172388.8443363 1734172416.3446264 1734172430.83665 1734175097.5265257 1734175099.85371 1734175101.877565 1734175104.969263 1734175112.7166493 1734175119.9440668 1734175121.150225 1734175126.1709414 1734177108.2648222 1734177109.5323458 1734177110.9781883 1734177112.6747355 1734177117.3391833 1734177121.0887563 1734177131.8735366 1734177137.6291678 1734177141.3786077 1734199035.8221405 1734199037.481856 1734199038.004862 1734199039.968881 1734199045.415362 1734199064.914838 1734199067.2668197 1734199069.0058367 1734262028.6908529 1734262029.307968 1734262035.2942023 1734262039.4181511 1734262040.3107548 1734262040.8191369 1734262054.9778004 1734262059.1196017 1734262065.9713304 1734264058.8774114 1734264062.150621 1734264063.0401947 1734264065.8985987 1734264074.2219696 1734264081.5155044 1734264092.787558 1734264146.2914078 1734268844.9836473 1734268846.3901615 1734268846.9945705 1734268847.7356365 1734268849.5164173 1734268860.365839 1734268868.1805236 1734268870.3608446 1734268876.3276196 1734269281.15436 1734269287.1708488 1734269288.8807511 1734269289.7311661 1734269293.4040473 1734269296.2506533 1734269304.7172859 1734269325.7669764 1734269329.419911 1734271395.6991515 1734271396.6889472 1734271397.880067 1734271402.6827838 1734271403.8652008 1734271413.4226174 1734271423.0080652 1734271425.488706 1734271427.6578972 1734351688.058646 1734351689.6575918 1734351694.9861565 1734351698.0319583 1734351701.5358753 1734351722.3482032 1734351726.086569 1734351741.6723933 1734367468.4239993 1734367473.1290283 1734367474.3041587 1734367476.32963 1734367487.2137127 1734367493.396583 1734367508.0347528 1734367572.7470653 1734438290.7985852 1734438292.2057211 1734438294.82526 1734438297.8977218 1734438303.43967 1734438311.3271127 1734438323.1823792 1734438391.312719 1734438990.0230591 1734438991.4290752 1734438992.3159082 1734438997.0685658 1734439000.9377115 1734439003.5536366 1734439013.0345373 1734439022.8144507 1734439041.4531271 1734610935.5402877 1734610936.018706 1734610936.7709029 1734610938.0711465 1734610940.2272396 1734610948.181996 1734610963.6168685 1734610969.7630963 1734610976.624657 1734693435.791713 1734693437.9342422 1734693442.8375373 1734693446.8058383 1734693450.5835466 1734693459.3054142 1734693466.8991237 1734693469.2940693 1734693471.3070602 1734969779.4377246 1734969780.6083114 1734969783.713666 1734969790.1905634 1734969798.3195398 1734969803.4121616 1734969810.2726023 1734969815.611365 1734969818.2863302 1735215538.1666918 1735215538.5484898 1735215543.1818237 1735215547.2899783 1735215557.8561838 1735215568.1153088 1735215569.912203 1735215597.7214365 1735298753.3061194 1735298755.0128474 1735298758.4833825 1735298765.6748583 1735298770.1487741 1735298779.8815114 1735298806.5731514 1735298841.728858 1735300814.2834265 1735300815.2847862 1735300820.9974098 1735300823.9439876 1735300829.0210621 1735300837.9418302 1735300848.477985 1735300851.946753 1735508397.0287507 1735508398.5288246 1735508399.4302917 1735508403.8215485 1735508405.3892164 1735508410.275628 1735508424.4502141 1735508431.1793299 1735508468.0790179 1735579413.8945177 1735579414.414634 1735579416.8128467 1735579418.6358535 1735579420.7884207 1735579433.5342782 1735579440.9099731 1735579451.8205795 1735579459.6753137 1735619086.9711988 1735619087.409217 1735619087.9281003 1735619095.159358 1735619099.3349144 1735619101.4988656 1735619112.587005 1735619119.9110858 1735619127.832429 1735711857.8234038 1735711859.564477 1735711862.3517983 1735711863.3506043 1735711872.5843375 1735711873.9384556 1735711892.2770236 1735711935.7533352 1735711956.2635896 1735752840.1028368 1735752843.3724842 1735752843.761337 1735752844.8144312 1735752851.5520108 1735752857.523881 1735752861.484574 1735752869.4489007 1735752870.265695 1735816433.6132152 1735816435.809237 1735816437.337141 1735816442.6280434 1735816454.9639046 1735816459.1432912 1735816462.9862452 1735816467.2984185 1735820518.8371863 1735820520.5738156 1735820522.8006866 1735820529.5624504 1735820530.426708 1735820536.6808848 1735820548.6727474 1735820550.8155315 1735820552.770849 1735905730.1280572 1735905731.5647476 1735905733.118345 1735905734.0669265 1735905734.694602 1735905748.389628 1735905754.5810616 1735905758.8846927 1735905761.8809183 1735920210.2677524 1735920212.436216 1735920213.7218347 1735920219.1996355 1735920226.1635919 1735920241.4036157 1735920241.7497404 1735920250.0450702 1735922820.4782093 1735922821.1348338 1735922822.7804573 1735922835.6868227 1735922981.6318777 1735922985.1768062 1735922989.272801 1735922995.7330163 1735923003.3491628 1735923004.6397786 1735923020.1836908 1735985905.5444398 1735985916.0105693 1735985919.6104634 1735985919.9892411 1735985937.6283722 1735985958.222152 1735986005.935107 1735986021.704869 1735987092.3328984 1735987093.8391883 1735987095.3711596 1735987103.9556334 1735987104.5368266 1735987106.7685935 1735987116.1892285 1735987124.2150946 1735987126.3644824 1735997735.301569 1735997736.5944946 1735997740.4465046 1735997742.8420439 1735997745.0824842 1735997746.6846266 1735997762.8327234 1735997764.1441154 1735997770.4355567 1735999881.9054108 1735999882.537724 1735999885.4977186 1735999886.93881 1735999890.086601 1735999892.2900712 1735999902.443185 1735999913.3734689 1735999914.6378303 1736005021.269936 1736005026.0950496 1736005026.5565746 1736005028.5512946 1736005034.295627 1736005046.0001605 1736005054.8968458 1736005057.636277 1736091843.3751974 1736091844.0270586 1736091855.4683526 1736091857.5741239 1736091923.0427983 1736091924.572181 1736091940.7193031 1736091978.6729257 1736094594.3971121 1736094597.1088984 1736094598.9986238 1736094600.458892 1736094603.2124414 1736094608.6036782 1736094622.655662 1736094631.1214418 1736094649.4742968 1736095641.5843077 1736095646.6030598 1736095659.935441 1736095673.4031339 1736095675.767698 1736096674.6084228 1736096675.5232391 1736096676.2434072 1736096678.1660178 1736096686.8612764 1736096695.1379368 1736096698.5002198 1736096708.280524 1736158560.5399482 1736158561.9534502 1736158563.4882185 1736158564.7752595 1736158574.529928 1736158588.3760154 1736158615.945422 1736158629.2041485 1736158653.2757142 1736165960.2888427 1736165966.1696758 1736165968.4497535 1736165969.0200455 1736165981.8632822 1736165998.8243723 1736166001.2628193 1736166008.3271723 1736240676.5533333 1736240681.200234 1736240686.528377 1736240687.5252 1736240689.8596854 1736240700.8519623 1736240714.9799516 1736240720.5002007 1736259527.365497 1736259536.772254 1736259578.5615714 1736259682.986006 1736260613.78191 1736260615.0057075 1736260618.4702165 1736260622.4034257 1736260624.3663952 1736260635.4417725 1736260639.6916158 1736260642.856217 1736441675.4581223 1736441679.9146483 1736441683.5242102 1736441690.9802032 1736441694.5142927 1736441719.6086934 1736441732.7007813 1736441754.46947 1736441886.5042713 1736441887.8903387 1736441890.8630843 1736441891.7496033 1736441901.1597342 1736441911.8327436 1736441921.6508195 1736441929.3110847 1737053060.7107148 1737053061.7079356 1737053064.9652221 1737053068.0993688 1737053069.2623348 1737053085.2016392 1737053090.228786 1737053098.1883311 1737053100.9433181 1737218159.9871378 1737218160.8943348 1737218173.5094814 1737218175.3223531 1737218175.7673883 1737218206.747201 1737218214.572571 1737218236.5821056 1737218253.0675943 1737281149.6906452 1737281151.7767713 1737281158.6541772 1737281161.3245492 1737281171.5785894 1737281181.0609574 1737281183.4652088 1737634751.2807136 1737634757.2278888 1737634761.4429455 1737634766.177611 1737634770.9341338 1737634780.3815856 1737634781.078672 1737634808.1874688 1737634830.808764 1737980365.2704349 1737980366.532835 1737980372.7169843 1737980378.6984127 1737980392.7996438 1737980402.1677213 1737980408.840801 1738176385.9614975 1738176387.5311823 1738176389.7672567 1738176395.7514846 1738176399.232108 1738176413.4351516 1738176432.6113453 1738176435.5840304 1738307106.897794 1738307110.556664 1738307112.859659 1738307118.9154048 1738307126.0298553 1738307130.3858697 1738307145.7877836 1738307150.676601 1738509315.7534444 1738509317.248571 1738509320.8597095 1738509325.4734414 1738509326.7232912 1738509336.0920534 1738509348.1706765 1738509357.7451594 1738510960.97414 1738510966.4917815 1738510967.4010441 1738510971.0032785 1738510975.2703307 1738510991.4107807 1738511006.686129 1738511007.4859824 1738511557.295736 1738511559.0962 1738511560.9264438 1738511566.4940279 1738511571.443775 1738511573.2373033 1738511580.1756394 1738511592.6698241 1738514823.3109682 1738514824.2517784 1738514825.514968 1738514826.179941 1738514830.463543 1738514836.9260972 1738514850.069192 1738514850.981052 1738514877.4470348 1738563652.295612 1738563653.7358687 1738563661.408399 1738563662.226456 1738563667.1011114 1738563669.3023953 1738563678.3859153 1738563691.8069675 1738563729.4151654 1738585091.3736339 1738585092.5167472 1738585095.8209786 1738585097.641139 1738585107.9601016 1738585110.2047687 1738585113.6362388 1738585121.1674669 1738585175.540115 1738805903.3422842 1738805908.6929772 1738805909.751889 1738805911.667848 1738805919.6154075 1738805933.1037781 1738805936.0323374 1738805938.619792 1739190245.1729622 1739190275.102606 1739190359.784534 1739190366.8907857 1739190382.5055847 1739190416.8249395 1739190450.1152332 1739190482.7457755 1739725878.7171612 1739725883.8818684 1739725891.685329 1739725892.68016 1739725936.528464 1739725943.7014942 1739725970.0041378 1739725977.2309911 1739794871.4846091 1739794875.9820058 1739794876.688585 1739794880.338071 1739794891.5054476 1739794902.4280593 1739794925.2632608 1739794932.1904132 1739988426.6435232 1739988427.7066967 1739988430.0451086 1739988434.0439842 1739988441.0419397 1739988441.7888176 1739988456.312907 1739988461.2888188 1739988487.343532 1740054285.1691186 1740054286.3942266 1740054292.37818 1740054295.811164 1740054308.0411217 1740054312.4567688 1740054322.6335552 1740054333.4984338 1740079286.440632 1740079288.2980962 1740079289.982014 1740079302.4534955 1740079334.7564526 1740079355.0628817 1740079360.4295704 1740079381.8605378 1740157548.6281772 1740157553.7571568 1740157554.7670753 1740157557.3696394 1740157558.3090923 1740157564.9541898 1740157575.4727216 1740157591.5358796 1740157659.8851328 1740220077.4754336 1740220087.2189336 1740220091.073763 1740220094.516704 1740220098.0173957 1740220101.9434617 1740220111.7498071 1740220116.2820933 1740220121.0643718 1740245083.9737985 1740245090.3478086 1740245090.8755617 1740245092.7752793 1740245098.5716355 1740245107.3766751 1740245111.6379035 1740245121.6337688 1740306828.5973806 1740306834.7376788 1740306845.121794 1740306867.0319235 1740306872.6905491 1740306913.480411 1740306920.1069384 1740399729.9223397 1740399825.766838 1740399827.3049707 1740399830.2140074 1740399840.8109517 1740399845.9939446 1740399865.9941838 1740399874.3998785 1740399909.2752402 1740482110.7903411 1740482112.6169007 1740482113.9752886 1740482115.2887034 1740482116.3916032 1740482121.1089497 1740482137.4481843 1740482154.288911 1740482169.020022 1740662877.656166 1740662883.3141673 1740662884.0697079 1740662887.5417233 1740662943.9152436 1740662951.775909 1740662962.4440465 1740663000.0761418 1740698034.6122122 1740698039.362832 1740698040.584123 1740698041.3482378 1740698043.0440652 1740698044.8144715 1740698062.7515821 1740698072.4950461 1740698077.9344592 1740719912.2369485 1740719913.802656 1740719921.609393 1740719922.6849043 1740719923.830786 1740719932.330509 1740719944.6747625 1740719945.5915139 1740758862.4804335 1740758864.3160887 1740758873.1681957 1740758875.706354 1740758876.702129 1740758911.9918113 1740758929.7068546 1740758947.6397083 1740758955.9092875 1740829320.9958465 1740829323.5461824 1740829326.3017564 1740829327.2471852 1740829343.458982 1740829351.5309384 1740829355.2095764 1740830092.8333147 1740830098.5127282 1740830101.1660757 1740830102.6165016 1740830105.7693543 1740830109.3415632 1740830115.824294 1740830122.818993 1740830132.8016496 1740834891.5516295 1740834892.54687 1740834898.2090986 1740834901.943733 1740834906.881616 1740834923.5885248 1740834924.5466075 1740834965.8267653 1740835506.9199913 1740835511.1185188 1740835515.1694639 1740835518.1965115 1740835519.4156275 1740835545.7867088 1740835548.0261815 1740835571.3404436 1740846718.6309428 1740846719.2229779 1740846720.9839458 1740846724.331695 1740846731.2153864 1740846745.9712794 1740846746.6058896 1740846753.5852516 1740851654.8073878 1740851657.1226265 1740851659.0984578 1740851662.5845704 1740851679.0356247 1740851686.6202796 1740853131.9662952 1740853135.2259994 1740853140.0243337 1740853141.5544727 1740853142.5853932 1740853151.5907438 1740853161.4089994 1740853179.152378 1740853234.7913692 1740909590.7676952 1740909593.4394844 1740909594.1006145 1740909600.1618545 1740909605.5640283 1740909627.5641062 1740909629.763059 1740909638.391702 1741538002.746394 1741538004.5974147 1741538007.1031163 1741538011.1803036 1741538022.5535285 1741538023.2208674 1741538035.1005435 1741538037.6209497 1741538053.6795459 1741540241.5225925 1741540243.0384476 1741540243.7290587 1741540248.8801308 1741540250.8812892 1741540255.0324414 1741540275.3322263 1741540278.8879032 1741540279.8883533 1742736926.4213793 1742736929.0452437 1742736929.9147203 1742736941.0108812 1742736943.6206505 1742736953.7565837 1742736955.0753472 1742817897.1766253 1742817906.055439 1742817908.110843 1742817925.20516 1742817931.6035576 1742817933.6209328 1742817941.782805 1742817949.0679486 1742817976.523266 1742820762.8189282 1742820767.58487 1742820769.723738 1742820779.3241792 1742820808.8599684 1742820809.7592335 1742820868.020134 1742833599.6929293 1742833600.6258411 1742833605.432312 1742833606.0664065 1742833609.8345032 1742833621.3044624 1742833629.688015 1742833634.2095566 1742833685.3454952 1742836321.144967 1742836329.1386688 1742836330.3600333 1742836333.159632 1742836336.205278 1742836340.7387507 1742836348.8935614 1742836371.8875759 1742836403.011777 1743006400.4382706 1743006402.8110816 1743006406.0368016 1743006408.5252998 1743006422.3414671 1743006436.7540543 1743006441.0074162 1743006507.553623 1743348894.2369478 1743348901.5321884 1743348903.3034456 1743348912.1285534 1743348913.6900957 1743348919.0135596 1743348934.7863953 1743348939.0275247 1743704487.3344524 1743704488.7368083 1743704493.066661 1743704502.7999954 1743704508.704604 1743704526.4536037 1743704540.3676257 1743704595.6681256 1744540076.4937 1744540077.7716103 1744540080.2340953 1744540087.4633138 1744540090.1468627 1744540090.9323301 1744540104.043849 1744540105.8583179 1744540113.6994038 1744540979.8903549 1744540981.2079186 1744540983.7677922 1744540989.2262633 1744541006.268343 1744541009.6697378 1744541010.7569468 1744542352.2102094 1744542354.7567139 1744542358.0040245 1744542358.6157143 1744542366.1230075 1744542381.9384413 1744542389.4165056 1744542397.4071445 1745173293.8249953 1745173294.6977684 1745173296.4183428 1745173299.7737727 1745173321.02643 1745173328.499534 1745238314.6789122 1745238315.1873124 1745238316.4272435 1745238323.9033215 1745238325.5795352 1745238328.3564548 1745238347.3873117 1745238371.5862057 1745238387.9306889 1745843070.958591 1745843075.5153403 1745843076.3962047 1745843077.0973387 1745843094.5423474 1745843118.8675365 1745843138.420316 1746226656.8705308 1746226657.815519 1746226659.102352 1746226663.2202785 1746226665.2551959 1746226674.0033555 1746226678.4311152 1746226696.077037 1746362184.0793815 1746362190.0461793 1746362191.708346 1746362195.0864835 1746362196.7399127 1746362201.1714997 1746362217.4062338 1746362226.1971035 1746362262.0417452 1746362599.2312064 1746362607.3190908 1746362617.876917 1746362619.045333 1746362649.466091 1746362658.9040372 1746363616.3271368 1746363619.165741 1746363621.2730448 1746363624.960459 1746363630.1416016 1746363642.0023985 1746363648.6735318 1746363701.3209887 1746367035.9069357 1746367040.6509783 1746367046.6282654 1746367051.5990014 1746367060.6876135 1746367064.021934 1746367074.9660578 1746371404.782657 1746371407.2207198 1746371412.0853345 1746371418.4139013 1746371423.897549 1746371428.9851322 1746371441.6439266 1746371486.6761787 1746447841.1483686 1746447845.21004 1746447850.4436421 1746447851.0021956 1746447852.2266257 1746447854.305104 1746447866.7331069 1746447877.529441 1746447904.8588624 1746970866.2850928 1746970871.4382925 1746970876.4223201 1746970877.5313618 1746970896.6955512 1746970907.5881906 1746970913.7251034 1746972125.4956772 1746972131.1131086 1746972134.1966543 1746972136.3567512 1746972140.2242782 1746972163.447233 1746972167.0903578 1746972172.4392664 1747052634.0867045 1747052637.9719176 1747052640.901573 1747052650.1282237 1747052650.804084 1747052656.5234401 1747052660.2318363 1747052672.2194757 1747052680.016201 1747494465.0081844 1747494465.7188168 1747494469.3196251 1747494477.337838 1747494486.9829397 1747494504.5049129 1747494544.0859094 1747494559.1372905 1747496024.7672715 1747496028.2004454 1747496030.561923 1747496032.7285593 1747496037.386692 1747496038.418993 1747496047.849549 1747496057.4868774 1747496135.6289368 1747560799.4387653 1747560800.5358477 1747560804.0414832 1747560806.5466936 1747560809.9259021 1747560811.1534076 1747560819.0543056 1747560829.0155323 1747560842.1566617 1747572646.5470788 1747572647.390134 1747572648.7524438 1747572652.7892008 1747572654.873262 1747572685.5694017 1747572695.3083656 1747572723.2853117 1747573964.4942021 1747573968.209933 1747573970.4658723 1747573971.2906015 1747573977.1336067 1747573984.4106464 1747573998.8427653 1747574004.6505325 1747574075.1307337 1747574305.2764027 1747574306.1658869 1747574311.2029257 1747574311.6356444 1747574321.143026 1747574323.3239775 1747574333.4431956 1747574354.3533092 1747574406.3318686 1747579511.5783572 1747579512.221208 1747579517.5236735 1747579519.637736 1747579524.4089606 1747579535.953931 1747579545.1393197 1747582487.1076038 1747582493.1306417 1747582493.8906002 1747582496.2982512 1747582519.7728572 1747582521.1929443 1747582651.9926095 1747582654.431721 1747582655.285922 1747582657.8852582 1747582686.572977 1747582696.4993298 1747582720.848927 1747663813.9657867 1747663814.9364848 1747663816.62631 1747663817.6334417 1747663818.8450267 1747663825.5548377 1747663846.4810712 1747663865.7397933 1747663890.7066286 1748067724.2420354 1748067729.804218 1748067745.057909 1748067754.8269758 1748067757.5958548 1748067758.5507638 1748070374.502674 1748070381.6441398 1748070383.3808093 1748070391.5950193 1748070416.2224102 1748070434.3698165 1748070435.555058 1748070436.6042447 1748070476.8085542 1748070496.1171339 1748084467.5058494 1748084468.2441168 1748084474.8024223 1748084477.277225 1748084481.1347795 1748084493.7509103 1748084495.9662008 1748084497.9603918 1748084510.263257 1748262319.461814 1748262326.0824232 1748262332.1754222 1748262336.183644 1748262343.4696805 1748262356.9252026 1748262360.7433844 1748262382.4167514 1748262387.204495 1748456951.5199213 1748456954.1033602 1748456961.047204 1748456962.36518 1748456965.1899178 1748456970.0175683 1748456981.9784403 1748456984.6797266 1748456990.9099953 1748457001.6800666 1748551688.3058105 1748551690.0631135 1748551693.6542091 1748551695.5739806 1748551704.4907575 1748551708.129478 1748551710.4948766 1748551720.0561225 1748551720.7178066 1748551734.3925445 1748687373.7607691 1748687380.5627248 1748687383.7903376 1748687386.032045 1748687394.5852222 1748687396.8480425 1748687398.276464 1748687402.4907308 1748687407.7660398 1748687418.5964398 1748697083.773052 1748697089.4772348 1748697092.8141148 1748697094.1940024 1748697094.9007196 1748697102.0838292 1748697132.8360145 1748697150.0251675 1748697187.1960125 1748702521.1370988 1748702531.4553287 1748702533.9648993 1748702538.197775 1748702544.2479873 1748702559.1965306 1748702563.5938144 1748702614.1509361 1748704845.2390134 1748704846.953144 1748704851.1478662 1748704852.389785 1748704858.6064208 1748704867.4006689 1748704880.0561786 1748704884.7375908 1748704907.1115549 1748704914.9893456 1748707249.4935129 1748707258.156049 1748707267.1819637 1748707278.0714958 1748707288.8793342 1748707295.7226372 1748707657.9277403 1748707665.0076687 1748707668.6328948 1748707670.4473636 1748707672.7199476 1748707676.2001882 1748707686.09082 1748707694.7650838 1748707696.7660286 1748707712.3426354 1748712594.9639416 1748712596.8361835 1748712597.2533367 1748712598.4701526 1748712639.9945111 1748712648.4648838 1748712666.6423347 1748712670.6976936 1748712683.751865 1748712694.838877 1748780697.1300132 1748780707.1812928 1748780710.8320565 1748780713.4933453 1748780714.5160713 1748780720.221217 1748780723.211522 1748780729.3108208 1748780734.3013072 1748780738.1098628 1748787367.9196851 1748787373.6341035 1748787374.8326871 1748787376.6386254 1748787378.22919 1748787393.1979444 1748787403.4755344 1748787413.9729302 1748787459.553451 1748871990.789132 1748871995.020706 1748871996.1685622 1748871999.473268 1748872000.461004 1748872018.3708444 1748872029.4726076 1748872043.0605848 1748872044.5643191 1748878636.3922968 1748878639.2287827 1748878640.8189514 1748878641.4030552 1748878648.2457068 1748878652.9519298 1748878667.3149946 1748878670.2457824 1748878706.71913 1748878718.4691658 1749098719.6553814 1749098720.7774096 1749098724.074082 1749098726.3920724 1749098748.0580766 1749098778.3085325 1749098912.5852885 1749098915.8331559 1749098918.0611174 1749098920.7714863 1749098922.0139832 1749098925.4494755 1749098942.071467 1749098942.7237644 1749098944.6195276 1749098952.1434 1749099136.3788838 1749099148.0185165 1749099148.6944551 1749099174.1283717 1749099194.9333398 1749099200.43662 1749099208.8724835 1749099231.0205483 1749099242.1005156 1749099248.5668106 1749126621.6487837 1749126623.688538 1749126627.3696332 1749126631.3988378 1749126638.2690864 1749126655.0908453 1749126659.7739618 1749126672.561119 1749126705.4273717 1749139750.3806634 1749139754.8162315 1749139755.6006756 1749139759.1034007 1749139760.887557 1749139779.7558067 1749139782.278983 1749139794.1488376 1749139827.5752163 1749205752.9047642 1749205758.0134082 1749205759.1623423 1749205773.9736311 1749205779.741236 1749205782.8816354 1749205792.9915836 1749205800.0576766 1749207436.9932654 1749207439.3376372 1749207442.0507126 1749207444.3223388 1749207450.0089462 1749207461.327043 1749207464.8948407 1749207466.3757741 1749207469.173337 1749207629.3760676 1749207631.3845394 1749207641.1218069 1749207644.51641 1749207650.1583064 1749207651.5605333 1749207652.81352 1749207659.088342 1749207660.1834414 1749207666.5334415 1749218815.2893264 1749218816.950752 1749218818.3285556 1749218822.7867248 1749218830.0134652 1749218850.0837555 1749218853.1024146 1749218874.1123745 1749218877.6380124 1749271867.1203532 1749271875.1028454 1749271875.563298 1749271877.454733 1749271880.210177 1749271892.7287812 1749271895.330672 1749271897.2302961 1749271907.042344 1749280038.2102046 1749280039.1501412 1749280042.1373932 1749280057.7576523 1749280085.8312287 1749280088.9918113 1749280100.0247335 1749280122.1361923 1749280151.82418 1749280164.4802487 1749295833.2289293 1749295838.1579623 1749295839.2984896 1749295843.2131975 1749295843.7777479 1749295845.2553825 1749295846.4326391 1749295854.436964 1749295860.3326712 1749295864.1298404 1749309368.4493246 1749309381.3636708 1749309383.1646597 1749309384.0942638 1749309387.6640103 1749309389.23439 1749309399.0786464 1749309401.8483248 1749309405.5220308 1749309449.2977185 1749310907.467713 1749310909.3287082 1749310916.5364704 1749310917.7325003 1749310920.2343166 1749310933.2956555 1749310935.9080079 1749310938.7189498 1749310982.2758734 1749322674.1674924 1749322675.0894198 1749322677.0391877 1749322691.4998703 1749322697.4724205 1749322701.3889818 1749322712.1984563 1749322712.8898647 1749373634.7000587 1749373638.8944862 1749373640.2385037 1749373648.106886 1749373652.0485783 1749373660.711902 1749373676.109536 1749373681.8637192 1749373724.1735797 1749375217.2968209 1749375220.885726 1749375221.7534225 1749375227.9966497 1749375231.575274 1749375246.927451 1749375250.322288 1749375260.3010128 1749375431.9646034 1749375433.6707664 1749375447.2827883 1749375458.8470395 1749375465.1968532 1749375466.3214815 1749375474.8340738 1749390237.9649787 1749390241.9855897 1749390247.4103007 1749390250.009474 1749390253.2129986 1749390259.3222694 1749390273.1098864 1749390274.645784 1749390276.2960196 1749390334.5760574 1749392242.377895 1749392245.8439276 1749392247.4123716 1749392248.3556786 1749392252.8020425 1749392270.550798 1749392274.6797643 1749392279.2192132 1749392286.722365 1749411613.2145607 1749411614.732268 1749411621.26396 1749411625.9782994 1749411635.3499079 1749411641.017848 1749411642.6818094 1749411645.4244514 1749411651.7081828 1749413924.5660992 1749413925.2623918 1749413931.9420364 1749413937.1102436 1749413939.190069 1749413950.1087549 1749413950.858109 1749413955.1419845 1749413965.2417042 1749475183.4130828 1749475269.0891244 1749475280.846001 1749475300.9858892 1749475424.7997751 1749475439.293529 1749475443.358688 1749475545.3827717 1749475584.8560176 1749475599.222495 1749618634.866136 1749618635.7672427 1749618636.6498623 1749618637.9993894 1749618639.5859237 1749618655.1264527 1749618669.2126846 1749618675.6886957 1749618722.4055316 1749622725.3681571 1749623331.8992586 1749623338.5948672 1749624021.5295086 1749624027.1660826 1749624034.3393967 1749624059.3551826 1749624065.3029423 1749624089.2069666 1749624112.0961478 1749624156.4944594 1749627557.6170328 1749627563.7709548 1749627566.3929112 1749627599.0472715 1749627602.9159732 1749627603.3838735 1749627613.2461598 1749627645.581141 1749627661.1322215 1749631132.487801 1749631137.7846777 1749631139.412108 1749631142.746514 1749631146.1334321 1749631155.0891125 1749631161.494069 1749631166.674999 1749631176.7612834 1749631201.0510392 1749632884.8329377 1749632887.012211 1749632888.9150484 1749632893.6216717 1749632894.5124671 1749632896.1735542 1749632902.2687907 1749632921.3957534 1749632935.7908692 1749632951.6520977 1749633187.2506747 1749633190.3788958 1749633191.4032943 1749633195.3396616 1749633196.1310704 1749633197.259268 1749633216.1033268 1749633239.4701803 1749633312.8432822 1749633320.344461 1749634764.6499696 1749634767.173367 1749634771.523061 1749634773.3909554 1749634779.5950031 1749634781.118316 1749634787.29547 1749634805.5617473 1749634810.9764915 1749634814.2035315 1749640748.4963331 1749640749.7684474 1749640750.2619064 1749640754.7561483 1749640766.8769314 1749640790.1035645 1749640790.9451928 1749640801.2948 1749640805.6763635 1749655238.0478213 1749655247.8873465 1749655259.6407182 1749655286.745856 1749655303.6456158 1749655305.511278 1749655312.70322 1749655325.0117638 1749655398.9007478 1749712651.54721 1749712655.934081 1749712657.8582826 1749712661.6096082 1749712668.4279766 1749712680.4651814 1749712686.21438 1749712699.3320618 1749721830.855182 1749721834.6855922 1749721835.5651665 1749721836.6144137 1749721841.478143 1749721843.8823774 1749721855.1086738 1749721867.9388387 1749721875.0416765 1749721879.2328339 1749732133.6596942 1749732135.3497596 1749732141.655937 1749732144.1405883 1749732145.5692327 1749732158.3680172 1749732180.1515033 1749732183.9803326 1749736582.9264092 1749736585.354908 1749736587.0578477 1749736595.4875488 1749736597.2588503 1749736614.8722656 1749736616.2536585 1749736626.8954155 1749736644.5392482 1749736645.7009246 1749739531.1874294 1749739533.13513 1749739533.6555822 1749739535.965754 1749739537.7629826 1749739549.3384633 1749739563.0764222 1749739564.1078699 1749739579.6870344 1749739583.0480855 1749740339.83903 1749740342.3714132 1749740350.120534 1749740350.6521754 1749740352.1002567 1749740355.49081 1749740366.1328075 1749740375.3159406 1749740392.1473715 1749740471.082113 1749747046.3999448 1749747050.4988081 1749747051.2065408 1749747053.0657842 1749747073.8171906 1749747079.023346 1749747108.931413 1749747114.5529356 1749747126.137808 1749747129.3645394 1749748428.7751336 1749748429.2344713 1749748431.537067 1749748432.2051632 1749748434.882207 1749748456.9194813 1749748463.0082138 1749748490.8282359 1749748491.2097864 1749750799.0156703 1749750800.096002 1749750806.0923882 1749750810.6573071 1749750818.1064825 1749750820.5025675 1749750832.1615047 1749750840.0820537 1749750849.3169732 1749750880.6903806 1749752263.3721592 1749752269.0241702 1749752271.5187314 1749752272.3386934 1749752274.153682 1749752297.2797587 1749752308.4526787 1749752332.3235343 1749752373.8145905 1749811480.761157 1749811482.7338417 1749811484.0564961 1749811486.8999205 1749811487.9248195 1749811495.0833464 1749811507.1862533 1749811511.639231 1749811514.662488 1749811517.533321 1749812344.3792236 1749812350.206982 1749812351.204563 1749812352.4549727 1749812353.6899989 1749812366.166027 1749812373.4487863 1749812375.8403049 1749812380.6793523 1749812381.9697902 1749815170.9090002 1749815171.9317243 1749815174.630299 1749815175.2614148 1749815179.4528818 1749815187.344421 1749815196.1581042 1749815203.8359156 1749815206.6176918 1749815259.4852054 1749859758.6398895 1749859761.2934213 1749859763.734038 1749859767.986022 1749859775.409929 1749859776.3732328 1749859795.550158 1749859802.2851381 1749859805.429732 1749859832.0472 1749902075.1299372 1749902075.6157472 1749902076.5964658 1749902079.499213 1749902080.878528 1749902097.4279869 1749902101.63446 1749902107.435497 1749902112.4152546 1749904577.0686636 1749904583.3769503 1749904586.4636397 1749904589.030314 1749904591.9222016 1749904592.8966002 1749904612.8343856 1749904617.307598 1749904626.4113624 1749904662.8498883 1749912211.7811341 1749912214.2153661 1749912218.1345556 1749912219.715525 1749912223.5604692 1749912225.5720553 1749912240.9375608 1749912241.9256985 1749912291.2109222 1749912298.7625544 1750076546.501283 1750076550.6776783 1750076555.6073227 1750076556.5223265 1750076558.0226476 1750076562.8913903 1750076578.3625565 1750076588.2349954 1750076598.8494236 1750076666.8024526 1750112020.9380093 1750112029.2343192 1750112031.7011588 1750112032.4458618 1750112051.2178729 1750112057.2509675 1750112063.4932077 1750112085.0010915 1750112581.7224362 1750112703.9725606 1750112705.7631092 1750112735.3743072 1750112762.3768733 1750112787.421681 1750112792.8325596 1750112793.4704797 1750112807.3919795 1750112819.946196 1750113253.1045556 1750113253.899241 1750113258.1956327 1750113263.9384453 1750113267.0486717 1750113277.0779586 1750113279.327918 1750113283.3153214 1750113322.4880247 1750146864.5753095 1750146868.7486885 1750146872.6152499 1750146874.7673848 1750146893.0411189 1750146897.522212 1750146898.8933263 1750147032.4358764 1750147034.0832617 1750147035.2034974 1750147062.851591 1750147071.3774083 1750147082.1078281 1750147166.2895048 1750147201.5141869 1750147233.0696373 1750147257.1892726 1750147853.784512 1750147859.530698 1750147866.428959 1750147883.1651356 1750147887.1592982 1750147896.8126338 1750147911.3134596 1750147920.819351 1750200358.6303794 1750200360.5763211 1750200361.920015 1750200365.099988 1750200374.0899963 1750200382.0526805 1750200389.6803308 1750200395.137887 1750200395.946482 1750319130.497368 1750319132.5684865 1750319167.7384648 1750319174.36161 1750319198.0307698 1750319218.6176298 1750319238.455424 1750319245.6904848 1750319251.9066992 1750335677.7313075 1750335681.838659 1750335682.2718496 1750335683.2765782 1750335702.586242 1750335712.588418 1750335767.6190648 1750502963.2558582 1750502972.8640456 1750502977.842085 1750502980.354517 1750502983.038681 1750502985.054749 1750502988.6171334 1750502993.587592 1750502997.7213852 1750505662.371309 1750505673.4059393 1750505694.1069899 1750505694.99598 1750505699.495038 1750505700.1377063 1750505840.6451004 1750505842.494917 1750505847.6640582 1750505849.7305999 1750505851.670657 1750505854.782527 1750505863.8916667 1750505867.5244918 1750505876.7239835 1750505886.9933908 1750516320.2753 1750516323.3719172 1750516324.494533 1750516325.2255218 1750516331.5726774 1750516335.0856616 1750516348.0861354 1750516348.7241356 1750516353.4451141 1750516353.9589283 1750516620.4199061 1750516625.3062873 1750516626.4206717 1750516630.5137868 1750516631.5460155 1750516654.8093772 1750516661.3673344 1750516662.9118385 1750516685.066775 1750520688.892653 1750520691.3227167 1750520698.1969924 1750520701.2254708 1750520707.2675326 1750520714.714345 1750520722.506279 1750520779.4648824 1750591023.2526793 1750591029.7906947 1750591033.6760864 1750591038.2577965 1750591039.5859969 1750591041.75532 1750591046.325174 1750591053.242928 1750591055.9179752 1750591059.8156152 1750619759.270681 1750619760.5961554 1750619766.6795948 1750619768.1111012 1750619772.7757778 1750619775.6570215 1750619790.4443107 1750619794.4791846 1750619796.7462895 1750619850.7801914 1750620339.5018923 1750620345.732223 1750620355.8457134 1750620376.2872174 1750620412.3427517 1750620419.4820836 1750620421.2609086 1750620446.5260575 1750622090.78472 1750622091.7098215 1750622096.1691563 1750622100.6803923 1750622104.9237328 1750622105.8404343 1750622113.7479684 1750622123.2251766 1750622124.337181 1750622129.6151385 1750681291.965105 1750681295.2112973 1750681300.780856 1750681305.2473927 1750681306.0782137 1750681309.1641443 1750681341.3806005 1750681441.8443985 1750940633.0334418 1750940637.7753532 1750940642.7058442 1750940644.2142265 1750940648.1112323 1750940660.8890212 1750940663.1971006 1750940666.7814307 1750940687.7098012 1750940742.4480157 1751110725.2078402 1751110729.1739366 1751110730.3148015 1751110733.9212723 1751110735.1801746 1751110741.2618518 1751110752.2854383 1751110757.2074318 1751110758.8447082 1751110790.1221993 1751114981.6072633 1751114982.9551451 1751114983.3459275 1751114986.7715294 1751114991.1609395 1751114991.9845252 1751115010.1980166 1751115017.4232025 1751115053.0503392 1751115066.730599 1751189470.2953637 1751189472.289429 1751189476.6330023 1751189481.17639 1751189481.9573102 1751189484.8299835 1751189494.7784457 1751189507.0900698 1751189551.5453267 1751191153.15442 1751191157.4138577 1751191160.6247377 1751191167.3223672 1751191178.041022 1751191182.9582558 1751191187.4798217 1751191231.0580914 1751210541.5037293 1751210542.6481793 1751210546.0688426 1751210565.4190056 1751210576.4266472 1751210602.0677116 1751210612.8193116 1751210617.5654838 1751210639.9121401 1751210761.052541 1751210763.1451428 1751210764.1585217 1751210765.6493883 1751210774.2062628 1751210786.4356728 1751210797.3688347 1751210800.8474517 1751210842.0230649 1751286298.5361385 1751286299.0539618 1751286309.9448109 1751286330.4786575 1751355143.6259344 1751355146.68288 1751355147.7218432 1751355156.6756976 1751355165.9402833 1751355173.8904796 1751355175.9409008 1751355188.7918036 1751355226.6272078 1751545581.0122294 1751545586.6132703 1751545593.6615384 1751545594.7327814 1751545596.5224533 1751545616.781041 1751545624.3310037 1751545681.4531589 1751545704.627739 1751725818.967529 1751725819.5161512 1751725821.5602055 1751725823.2456803 1751725824.4361553 1751725834.479581 1751725852.156433 1751725853.304842 1751725897.3900046 1751725905.7422347 1751730085.9102023 1751730087.9532862 1751730089.7864442 1751730092.5901027 1751730097.7223408 1751730098.6084144 1751730115.5875676 1751730118.519118 1751730165.6099408 1751730181.8135753 1751732874.3393655 1751732875.3494453 1751732877.5679533 1751732883.9959602 1751732888.6535351 1751732895.8564885 1751732900.8064644 1751732906.3657126 1751732912.9698772 1751740009.8792338 1751802647.7944303 1751802649.198215 1751802653.345696 1751802659.375122 1751802663.2127845 1751802674.4501565 1751802677.4429996 1751802682.8299348 1751802688.28721 1751853616.4622428 1751853620.6045835 1751853622.8813455 1751853627.6323647 1751853628.3295627 1751853630.8563719 1751853640.4701383 1751853645.9375217 1751853647.1251276 1751853652.3462539 1751888466.2609575 1751888467.4893453 1751888470.644313 1751888471.5961049 1751888474.367563 1751888475.778744 1751888493.6230636 1751888511.9997575 1751888555.5523255 1751888594.5809436 1751977069.6957645 1751977071.599551 1751977078.172867 1751977081.300183 1751977087.1417215 1751977093.7141619 1751977100.8432062 1751977139.7281485 1751977179.9199867 1751978326.1916354 1751978328.4840539 1751978338.9560432 1751978341.3715274 1751978357.1786745 1751978367.2191665 1751978372.2492654 1751978383.1259727 1751980162.3040843 1751980174.3750544 1751980175.5560195 1751980178.9389732 1751980184.242051 1751980198.1207654 1751980210.761367 1751980236.0854242 1751981521.3733516 1751981561.7564917 1752053337.3207977 1752053338.8619225 1752053341.3972442 1752053346.3473854 1752053350.2991476 1752053351.9596155 1752053366.2021606 1752053377.5975795 1752053450.5912552 1752057310.3442078 1752065104.6770759 1752065107.2878308 1752065108.424729 1752065109.805908 1752065111.1052766 1752065134.5520885 1752065142.4615617 1752065157.0391557 1752066731.5141857 1752066733.6911905 1752066735.0969563 1752066738.4530632 1752066739.4971445 1752066761.0648172 1752066772.953822 1752066801.1133144 1752067159.2773154 1752068830.9687135 1752068832.173346 1752068835.5154512 1752068839.5407856 1752068846.499726 1752068863.1123843 1752068874.2521362 1752068926.1676552 1752068934.778435 1752205661.7582107 1752205666.3036857 1752205666.8440635 1752205668.3498464 1752205678.4908006 1752205679.9102979 1752205691.515887 1752205705.4272656 1752220171.244901 1752220175.9887323 1752220177.0568392 1752220178.3969288 1752220180.7236824 1752220181.7845435 1752220191.9305685 1752220207.8247237 1752220217.7638764 1752220251.2989273 1752249865.716855 1752249869.9362595 1752249870.4005945 1752249881.748938 1752249892.8276708 1752249896.8790243 1752249908.8752942 1752249917.4683437 1752317363.4795117 1752317370.0336106 1752317390.3611355 1752317398.607496 1752317400.3005273 1752317401.024259 1752317406.7781847 1752317423.9100559 1752317436.6103513 1752317447.8547115 1752319914.6331575 1752319915.4795966 1752319926.760566 1752319941.802452 1752319954.2052486 1752319961.5241613 1752320014.6087837 1752320016.6784222 1752336325.0512245 1752336333.917163 1752336387.8570414 1752406193.7112389 1752406194.5214336 1752406195.635355 1752406199.4264512 1752406204.7821202 1752406220.247316 1752406226.2589955 1752406232.176263 1752406283.0001185 1752406308.260031 1752407210.996911 1752407211.828674 1752407214.9152431 1752407218.776768 1752407233.0008824 1752407248.180142 1752407253.493582 1752407254.4523447 1752407255.5309138 1752407256.869781 1752411688.2908175 1752411690.4053566 1752421497.2642744 1752421498.495637 1752421521.409316 1752421527.077749 1752421529.294662 1752421541.667016 1752421542.9554195 1752421566.3176177 1752421567.4761708 1752422206.6630602 1752422216.0846853 1752422240.574253 1752422243.658565 1752422733.8036196 1752424983.430937 1752425015.0811005 1752425032.2356212 1752425033.2287548 1752425033.9963248 1752425035.8940485 1752425046.9963098 1752425077.1100595 1752425103.4793208 1752426778.1639986 1752426780.7987607 1752426784.201647 1752426791.5249655 1752426804.0015364 1752426808.0771294 1752426848.8854136 1752426862.0891616 1752428571.8599634 1752433661.8094244 1752433662.9587271 1752433664.1917112 1752433685.771401 1752433696.9874265 1752433700.9476068 1752433705.246769 1752433706.4015415 1752433747.4182 1752433753.9025729 1752455476.2998357 1752455479.6996272 1752455482.2440193 1752483546.3578281 1752483551.9453197 1752483553.252048 1752483556.7156012 1752483568.962246 1752483584.3881648 1752483591.3398833 1752483592.6544354 1752483645.051297 1752484105.6790297 1752484170.1442206 1752484791.816609 1752484834.8382723 1752581294.7668931 1752581300.203477 1752581301.6654656 1752581306.5516346 1752581309.2304502 1752581319.2380588 1752581334.545645 1752581335.531903 1752581350.2245443 1752653208.11366 1752653214.7264032 1752653215.6132576 1752653220.876051 1752653222.770341 1752653235.1640432 1752653242.5288699 1752653252.4051535 1752653338.5787513 1752655341.0746193 1752655344.7018456 1752655351.8267777 1752655353.770705 1752655365.720272 1752655367.9655826 1752655372.2233975 1752655379.8366141 1752655380.969712 1752658083.33107 1752658095.3492181 1752658097.3265333 1752658103.705013 1752658119.4050083 1752658125.6491268 1752658140.1298707 1752658157.0762637 1752662380.6002362 1752662381.4293406 1752662385.4971538 1752662391.565842 1752662399.0018964 1752662414.0315292 1752662414.9375114 1752662422.1790829 1752666174.9191167 1752666196.5410588 1752666212.8757172 1752667013.887674 1752668577.7272162 1752668578.4540179 1752668581.5293293 1752668583.950793 1752668588.5230892 1752668599.85014 1752668600.7181296 1752668612.5240064 1752668638.3085136 1752674979.3560166 1752695230.498447 1752695233.0964093 1752695237.1934483 1752695240.3221178 1752695250.9757826 1752695252.022823 1752695262.6248226 1752695265.9665592 1752755414.5913417 1752755416.6762884 1752755417.4517312 1752755422.1348903 1752755428.7812822 1752755441.3666263 1752755447.8217468 1752755463.3045473 1752755550.326027 1752815598.8271685 1752815602.4160266 1752815609.0523677 1752815612.2074547 1752815613.9390266 1752815626.9855943 1752815628.551522 1752815697.9424307 1752824171.8763149 1752824175.7537646 1752824177.8018596 1752824180.0683246 1752824181.5045102 1752824187.5248275 1752824203.2315161 1752824205.9222045 1752824212.0189817 1752909344.2239141 1752909344.6388516 1752909346.401105 1752909355.5477102 1752909366.23498 1752909372.353175 1752909434.874642 1752931130.6346424 1752931131.467248 1752931140.8398387 1752931142.9503345 1752931155.0360262 1752931179.6947343 1752931212.4887893 1752931217.1517313 1752931226.8343508 1752931325.5797493 1752931985.5287938 1752931989.3067138 1752931991.956637 1752931996.0261855 1752932012.876879 1752932021.4536695 1752932022.7543962 1752932060.5794108 1752938384.516586 1752938386.0041265 1752938388.9465365 1752938391.062609 1752938396.614473 1752938420.788231 1752938429.9272988 1752938463.618736 1752938586.3024359 1753081920.181048 1753081924.5152 1753081932.0630558 1753081942.4622169 1753081951.253088 1753081965.0180943 1753081969.2437797 1753082037.394756 1753082089.858027 1753082090.9234664 1753090707.2661088 1753090712.8956099 1753090714.5297365 1753090715.4559264 1753090718.6303651 1753090739.0777605 1753090744.614489 1753090779.8588169 1753090816.3522484 1753109852.260959 1753109860.0056849 1753109861.4736617 1753109862.2648656 1753109866.242469 1753109872.8958058 1753109885.6476934 1753109888.1732457 1753109898.4354076 1753109954.9590533 1753527778.5117466 1753527779.731848 1753527780.577084 1753527791.3466794 1753527801.5885005 1753527810.1640723 1753527816.8174925 1753527845.6910954 1753527875.0335333 1753528087.7175646 1753528091.62572 1753528095.123978 1753528097.9584997 1753528111.0641444 1753528121.4111438 1753528124.0014498 1753528191.185296 1753528771.9768803 1753528772.6663513 1753528780.6560063 1753528781.3893888 1753528792.0522988 1753528795.6139822 1753528803.8401124 1753528805.3791673 1753543354.5843496 1753543368.8904924 1753543381.8730474 1753543389.7707224 1753543400.0396738 1753543401.9568622 1753543423.2695198 1753543426.357917 1753543427.0342505 1753543436.3947318 1753547961.6327457 1753547964.9480078 1753547972.7431076 1753547977.264395 1753547978.7783508 1753547983.9778428 1753547987.5205367 1753547995.981038 1753547997.829545 1753548003.2144182 1753549710.751082 1753555073.117537 1753555075.194001 1753555080.1292431 1753555081.6338127 1753555084.8535955 1753555085.9333053 1753555102.253864 1753555104.3959394 1753555105.8811164 1753555109.921584 1753557013.7667754 1753557019.6222768 1753557021.1462777 1753557023.7295516 1753557037.9135652 1753557039.2593813 1753557053.3965182 1753557114.414277 1753560209.107383 1753607412.7562165 1753607413.8237505 1753607414.9938471 1753607415.4590468 1753607451.9975915 1753607465.7359056 1753607479.331 1753607488.4349377 1753619523.7802236 1753621634.870607 1753621636.5215642 1753621639.034233 1753621645.05623 1753621647.4843652 1753621653.1763496 1753621660.2784498 1753621668.1427321 1753621727.8170462 1753624311.93218 1753624312.5691931 1753624319.2812183 1753624322.309761 1753624325.2693536 1753624342.1486804 1753624343.0279913 1753624343.6775765 1753624379.7460775 1753624421.0528874 1753628448.1217368 1753628452.4393914 1753628457.8755803 1753628468.61442 1753628478.814922 1753628496.1882634 1753628506.2181995 1753628510.35918 1753633880.8245702 1753633884.0189211 1753633888.1368659 1753633889.9688065 1753633894.9289176 1753633909.2709587 1753633912.9586463 1753633914.656439 1753633974.4984894 1753634196.9595485 1753634198.4258742 1753634200.7588377 1753634202.8742635 1753634214.523655 1753634221.3979316 1753634222.6455235 1753634232.2655947 1753634235.5019648 1753635790.6564934 1753635801.1622255 1753635804.1653693 1753635805.7986543 1753635806.8686574 1753635810.6662238 1753635828.0595148 1753635834.7401557 1753635875.2372122 1753635906.12679 1753637939.8341918 1753637941.723922 1753637946.156286 1753637947.7580767 1753637950.0366821 1753637961.358346 1753637979.3405824 1753638007.4410455 1753642653.8151813 1753705434.0385585 1753705437.3170333 1753705440.9904394 1753705446.1188889 1753705447.3851764 1753705450.675415 1753705471.9571779 1753705475.4415438 1753705505.6278014 1753705534.4087162 1753964919.8963556 1753964928.974177 1753964932.0748856 1753964932.9618192 1753964941.4599595 1753964963.5642147 1753964987.6735666 1753965027.0833921 1754050030.3789477 1754050035.0561054 1754050040.0168066 1754050044.233994 1754050054.4163415 1754050064.863411 1754050067.0610914 1754050073.1985257 1754050081.106659 1754050116.7667983 1754051714.1005504 1754147464.6104853 1754147466.0603118 1754147466.8723512 1754147469.322801 1754147471.4604385 1754147480.567856 1754147488.5365741 1754147494.9528346 1754147496.3750696 1754147541.0013463 1754147901.1338613 1754147902.1700509 1754147903.5346334 1754147910.526371 1754147913.5406568 1754147922.1252503 1754147926.2353654 1754147930.73985 1754147934.617274 1754147937.192003 1754154724.6913762 1754154727.3907928 1754154729.7545896 1754154732.281492 1754154733.0530417 1754154743.6075919 1754154757.663202 1754154771.1261935 1754154776.5890312 1754154815.3744185 1754161692.0995958 1754161693.8928325 1754161698.0712461 1754161701.2578607 1754161702.7071328 1754161722.8262532 1754161734.993284 1754161811.8192391 1754161831.204044 1754163693.6155944 1754163701.2349622 1754163704.9144213 1754163705.781919 1754163707.3302922 1754163717.1612923 1754163732.095443 1754163733.6481328 1754163795.264803 1754210911.854374 1754210914.495917 1754210915.6907413 1754210917.0608191 1754210921.2635305 1754210923.115985 1754210941.8069832 1754210942.7540262 1754210945.496934 1754211020.0348015 1754219489.6631823 1754219490.1588373 1754219490.7965908 1754219492.7039154 1754219494.8038013 1754219498.2529283 1754219519.982066 1754219525.1832073 1754219527.7887845 1754219562.5918531 1754221986.949188 1754221993.6517015 1754222013.344442 1754222086.263555 1754222139.0420344 1754222170.0545282 1754222202.5397425 1754222232.3531396 1754222259.1345057 1754222261.757903 1754223031.4519022 1754223031.9048984 1754223033.2070441 1754223036.2916546 1754223038.8532968 1754223040.5199792 1754223067.7043796 1754223070.026523 1754223115.7667549 1754223133.9409313 1754223591.5066426 1754223593.0655425 1754223595.2943885 1754223599.7125196 1754223608.6046302 1754223613.470199 1754223619.4759579 1754223632.459162 1754223681.8974965 1754228561.1553266 1754228562.819451 1754228563.6393201 1754228569.5833647 1754228570.3724957 1754228589.3824787 1754228591.2490494 1754228627.380794 1754228639.0961065 1754232590.2389843 1754232591.4989154 1754232593.2010121 1754232595.9642012 1754232616.50332 1754232621.5638747 1754232639.7652113 1754232674.7439165 1754233070.4743738 1754233072.0152574 1754233073.9464557 1754233075.2448533 1754233079.4979722 1754233080.141323 1754233092.7940302 1754233104.017456 1754233144.346957 1754233162.5799844 1754239909.7946708 1754239915.5617726 1754239916.4486494 1754239935.9771721 1754239984.2906501 1754239990.9896011 1754240011.013253 1754240017.1374927 1754240049.960765 1754240081.5875914 1754293574.2338655 1754293575.0399668 1754293581.1391838 1754293581.863938 1754293603.6632936 1754293613.1434186 1754293618.4339972 1754293679.7011929 1754310285.6145704 1754310291.0624673 1754310294.4581003 1754310295.5655785 1754310296.365084 1754310297.6415553 1754310318.1626227 1754310321.7382398 1754310364.1850843 1754310405.4504304 1754317826.9290524 1754317830.7565248 1754317832.2182643 1754317840.799902 1754317843.7951312 1754317852.457583 1754317853.4192817 1754317862.7597876 1754317868.896572 1754317887.399214 1754318775.8339396 1754318779.9629686 1754318783.297025 1754318784.222822 1754318785.2888439 1754318786.5568762 1754318806.1119292 1754318820.514628 1754318827.4494452 1754323040.2911096 1754323045.0321183 1754323051.0663688 1754323054.277648 1754323055.6279497 1754323061.1204603 1754323069.822695 1754323077.3025553 1754323079.2780805 1754323084.750792 1754323667.7419314 1754323668.2115483 1754323672.5697134 1754323673.6980371 1754323675.405283 1754323677.4616768 1754323689.9075372 1754323705.4609141 1754323708.592731 1754323736.7744064 1754326223.9695542 1754326224.8513129 1754326230.1929665 1754326231.4682832 1754326235.9761422 1754326241.1815274 1754326257.2851758 1754326261.3494196 1754326263.654178 1754326283.3476288 1754330387.2604 1754330390.003617 1754330391.219144 1754330400.809656 1754330402.4465642 1754330414.9430423 1754330422.6040044 1754330437.9510179 1754330474.04123 1754334084.6124992 1754334085.1113546 1754334086.7677271 1754334207.156391 1754334209.7791314 1754334212.4710393 1754334216.8630707 1754334335.936511 1754334337.392412 1754334340.5175052 1754334344.0764573 1754334347.05312 1754334349.616821 1754334358.0505111 1754334359.6280644 1754334374.6576247 1754334409.232203 1754394229.9115093 1754394236.1680892 1754394236.9868488 1754394246.1246827 1754394249.1736414 1754394264.3860807 1754394275.5825715 1754394318.6056807 1754394343.5812619 1754569418.2930825 1754569421.837108 1754569423.1742985 1754569425.1570497 1754569425.9239967 1754569438.7803164 1754569459.056397 1754569474.1716316 1754569488.3651893 1754569492.8347008 1754638639.458234 1754638642.5091085 1754638644.0283828 1754638646.775579 1754638651.3673298 1754638652.4136136 1754638668.26929 1754638677.3526635 1754638685.0813951 1754638748.8697855 1754657291.6403043 1754657292.4744985 1754657293.3465893 1754657293.950285 1754657294.4197512 1754657300.9399118 1754657317.3675215 1754657318.825882 1754657323.5254388 1754657377.0663774 1754661010.431923 1754661013.0314443 1754661014.0538993 1754661015.0904381 1754661016.855073 1754661021.683792 1754661031.7809405 1754661044.7760146 1754661095.190606 1754661130.862394 1754665151.962033 1754665156.751902 1754665157.7375376 1754665158.3834746 1754665289.112908 1754665293.585181 1754665294.382669 1754665297.2250502 1754665298.1869934 1754665299.79884 1754665312.295892 1754665321.8710375 1754665407.6290948 1754665429.5629325 1754718004.3929446 1754718008.645443 1754718009.6582825 1754718012.0243857 1754718014.016908 1754718033.9542181 1754718037.3497593 1754718049.4169745 1754718085.8459666 1754836471.9137306 1754836475.0375721 1754836476.062699 1754836486.104762 1754836487.8068762 1754836488.857057 1754836503.0423374 1754836508.6906729 1754836512.319106 1754836547.3170414 1754838744.581556 1754838745.8280544 1754838750.7695951 1754838754.3971465 1754838755.6916676 1754838762.0266268 1754838769.3110466 1754838775.5133567 1754838778.344381 1754838815.906733 1754915022.5220096 1754915028.4145112 1754915041.4452024 1754915058.7874146 1754915063.0782726 1754915064.996402 1754915074.0698926 1754915083.2008886 1754915091.6328013 1754922333.0725238 1754922339.0960412 1754922340.0241008 1754922341.0449069 1754922369.3095813 1754922375.015952 1754922388.706176 1754922397.81592 1754922423.6951694 1754923112.3074675 1754923118.1217208 1754923119.0933652 1754923123.9948857 1754923126.5217292 1754923132.298002 1754923139.7730455 1754923150.893455 1754923160.6324568 1754923223.8065531 1754929456.570865 1754929457.672234 1754929459.015023 1754929462.5595443 1754929490.6316092 1754929502.694461 1754929526.2692955 1754934106.7113538 1754934110.5575802 1754934114.0763226 1754934114.9115584 1754934115.913665 1754934118.5307214 1754934135.6748009 1754934136.9377642 1754934142.065675 1754934146.296465 1754989412.0507722 1754989415.5522845 1754989420.1753516 1754989424.8790295 1754989426.334825 1754989440.0370219 1754989453.069252 1754989456.1419594 1754989475.0667217 1754990713.266655 1754990721.2494721 1754990725.910558 1754990729.4249978 1754990744.5967226 1754990746.6091092 1754990774.8629506 1754990805.56848 1754998738.3181512 1754998741.2028167 1754998743.5358863 1754998748.5763028 1754998754.2024612 1754998769.7436988 1754998771.4340525 1754998792.499069 1754998810.9800005 1755091295.2237508 1755091297.6697185 1755091317.6695251 1755091359.6534734 1755091379.2650094 1755091389.5992413 1755091446.0126197 1755091451.158804 1755091452.5178423 1755092520.1772451 1755092522.9319377 1755092525.882438 1755092528.8732014 1755092535.9946783 1755092542.6943703 1755092551.4624476 1755092565.35118 1755092616.3713923 1755103831.1122003 1755103834.7719872 1755103837.5307035 1755103840.1106188 1755103843.8362675 1755103859.6927347 1755103866.9314835 1755103877.1440673 1755103931.2784662 1755155603.910527 1755155605.1707687 1755155609.4332795 1755155616.694992 1755155620.9042776 1755155640.531146 1755155646.57202 1755155685.840037 1755161637.7376566 1755161641.828701 1755161646.806685 1755161651.1506295 1755161652.0224833 1755161653.3682384 1755161669.3750222 1755161672.1709075 1755161717.191939 1755161725.931677 1755173000.5957315 1755173001.9000506 1755173008.8519778 1755173014.1254952 1755173014.787355 1755173030.2924156 1755173034.162322 1755173048.7866387 1755173086.536405 1755174292.8822558 1755174295.428002 1755174298.603928 1755174302.125032 1755174321.4670026 1755174378.398244 1755174503.4448552 1755185730.874194 1755185734.3135548 1755185741.2811418 1755185744.5252283 1755185760.6697218 1755185771.0018182 1755185792.5674508 1755185810.4147518 1755186662.427318 1755186666.3672824 1755186672.139668 1755186674.701527 1755186676.5207224 1755186682.5460482 1755186686.701402 1755186702.0690258 1755186732.0374315 1755186750.6634238 1755242389.8940303 1755242391.9020832 1755242419.277163 1755242504.6928837 1755242508.6852958 1755242675.5390825 1755242703.2035072 1755242710.6229627 1755242712.8987422 1755242716.3719594 1755519829.5844069 1755519833.5935352 1755519836.9904127 1755519838.9582396 1755519855.558081 1755519860.363573 1755519868.8485646 1755519920.6822896 1755519942.2387319 1755527975.6788986 1755527978.651766 1755527986.416013 1755527988.6062543 1755527991.0238554 1755528001.242443 1755528019.8285203 1755528023.381777 1755528035.2184818 1755528470.930902 1755528476.349847 1755528477.7076178 1755528481.463617 1755528487.8090794 1755528488.694744 1755528509.8624043 1755528518.2550066 1755528537.321938 1755528556.6828933 1755528766.6240294 1755528772.6573496 1755528774.334497 1755528775.8850696 1755528786.5289903 1755528793.721394 1755528806.0284948 1755528811.3382447 1755528822.3104265 1755528858.0835721 1755529302.2824957 1755529309.1301937 1755529309.8924468 1755529313.6042178 1755529314.6411026 1755529320.2343986 1755529329.5999422 1755529369.8951874 1755529397.511248 1755529409.5458014 1755529792.449044 1755529798.3453658 1755529799.4744263 1755529803.6671424 1755529807.9614284 1755529815.5547583 1755529824.5668454 1755529829.2762125 1755529851.870933 1755529893.2305694 1755530370.323989 1755530373.193505 1755530374.3619177 1755530379.4706616 1755530391.7684755 1755530393.832497 1755530398.6746159 1755530408.721917 1755530453.613735 1755542546.745977 1755542553.4601243 1755542557.5791974 1755542560.4875047 1755542562.3357222 1755542575.9021316 1755542587.4253993 1755542606.7538378 1755542620.2706878 1755542679.175511 1755581239.3919017 1755581242.9592192 1755581248.0982115 1755581250.362873 1755581251.9973235 1755581273.6017663 1755581278.112134 1755581279.7596714 1755683205.293422 1755683208.4407446 1755683215.296143 1755683216.3164744 1755683232.1347709 1755683237.1703007 1755683265.6661882 1755683564.564526 1755697365.6706383 1755697367.8462865 1755697368.8814843 1755697372.6754832 1755697374.0597286 1755697406.1362655 1755697408.9832134 1755697466.2167993 1755697471.2026734 1755767335.8241048 1755767337.7761495 1755767341.8543706 1755767346.6528404 1755767360.1526518 1755767365.7380254 1755767369.697219 1755767423.1748812 1755767430.7915325 1755771307.2372272 1755771310.1699429 1755771314.0174656 1755771317.4156752 1755771324.4522014 1755771343.920328 1755771348.0819685 1755771413.535651 1755771426.3374026 1755779051.9380424 1755779058.067354 1755779060.7318432 1755779065.6053112 1755779067.91052 1755779069.9747307 1755779122.3255653 1755779159.1961684 1755779190.2349162 1755781750.1219249 1755781750.584925 1755781753.7838068 1755781760.9929872 1755781775.3233852 1755781777.7456393 1755781790.3588195 1755781816.2886713 1755858351.8479357 1755858354.3661966 1755858355.4653335 1755858360.082173 1755858363.541813 1755858383.3070207 1755858392.2707088 1755858450.284916 1755858453.2151356 1755864810.5204973 1755864817.79521 1755864819.666758 1755864821.992026 1755864827.1484685 1755864830.7505047 1755864836.0561144 1755864904.5799057 1755864911.224088 1755871864.7463403 1755871865.700705 1755871874.3711174 1755871876.8395483 1755871881.203033 1755871888.7127476 1755871899.9997368 1755871916.2245448 1755871917.60044 1755871945.770296 1755872178.8943074 1755872186.983504 1755872191.7687752 1755872194.5346866 1755872196.1832926 1755872205.9670317 1755872214.1981487 1755872276.6107228 1755872284.6054552 1755944928.0758238 1755944929.0181148 1755944932.1404448 1755944934.0511243 1755944950.4044645 1755944961.2118134 1755945024.5262923 1755945120.3629444 1755963202.5901458 1755963203.293085 1755963205.8935375 1755963212.2584286 1755963212.8997407 1755963222.6679978 1755963230.8555262 1755963231.9183908 1755963241.3830926 1755963397.9453433 1755963400.998559 1755963402.6345365 1755963412.4104345 1755963417.763777 1755963422.6026397 1755963428.342291 1755963439.6799586 1755963476.2933767 1755965151.6507125 1755965154.912003 1755965156.7904503 1755965165.3828666 1755965179.8125389 1755965182.3996332 1755965189.1981287 1755965238.6140528 1755966626.6175234 1755966627.3063796 1755966628.7057528 1755966631.0783293 1755966634.8012874 1755966639.2691996 1755966659.2272258 1755966666.8914418 1755966670.3490558 1755966703.7870758 1755967612.8714328 1755967613.6729198 1755967623.4443798 1755967624.2040484 1755967626.7955487 1755967632.0557587 1755967643.0482206 1755967653.0765295 1755967695.3965862 1756033999.6928086 1756034001.3570006 1756034002.3976445 1756034004.5353584 1756034016.0064967 1756034045.3250484 1756034074.433641 1756034081.1165838 1756051679.111972 1756051689.949049 1756051693.1558483 1756051701.8674443 1756051722.2058275 1756051748.804777 1756051758.8889961 1756051774.9322295 1756051775.8245072 1756051782.817306 1756053674.8424118 1756053677.5552804 1756053678.968204 1756053684.7890909 1756053686.1426823 1756053700.0809133 1756053701.17049 1756053703.5803366 1756053714.9610004 1756053753.5441813 1756062146.2249432 1756062152.6544452 1756062152.4811814 1756062154.4658208 1756062156.493738 1756062173.4410543 1756062183.1047323 1756062217.604999 1756062224.9876451 1756063491.1078897 1756063496.6617112 1756063499.3353674 1756063500.3891282 1756063503.8977914 1756063525.9865055 1756063533.080167 1756063579.8505108 1756063582.6323035 1756072129.3400898 1756072135.2731066 1756072141.0665078 1756072153.2953558 1756072160.2601361 1756072169.0772078 1756072343.9998448 1756125211.4906695 1756125212.328387 1756125214.2974348 1756125221.2147803 1756125231.304783 1756125236.0785177 1756125246.1898239 1756125250.4114323 1756125255.384682 1756125338.3665445 1756310081.775399 1756310086.739538 1756310087.4151154 1756310089.4788582 1756310097.465379 1756310116.5951312 1756310123.0403903 1756310195.6180274 1756310307.5799718 1756324792.3303366 1756324793.7887714 1756324794.8563702 1756324803.2106173 1756324806.297542 1756324819.9633186 1756324839.670165 1756324920.9852116 1756324987.3191826 1756482090.2726345 1756482092.8315275 1756482094.2205503 1756482101.1669152 1756482106.640674 1756482107.3221672 1756482111.8609567 1756482118.665951 1756482137.8609233 1756482185.2321236 1756490572.1480975 1756490576.1325092 1756490577.4044735 1756490584.7298954 1756490593.7054727 1756490594.508246 1756490601.077775 1756490608.3319793 1756490613.894025 1756490662.5819 1756492240.1021197 1756492242.534109 1756492246.8966846 1756492248.4405742 1756492254.5134413 1756492264.3207994 1756492285.7777555 1756492308.5999398 1756492341.6097598 1756513583.9886444 1756513607.1972914 1756513623.5006287 1756513652.210149 1756513664.7416515 1756513669.4077144 1756513673.848115 1756513691.6451051 1756513704.0918295 1756513759.4461706 1756543686.9924748 1756543689.312835 1756543690.9100976 1756543692.1223993 1756543701.1993566 1756543701.9120893 1756543719.4618378 1756543755.2614884 1756543768.6995828 1756554646.1878424 1756554651.6421301 1756554652.9530745 1756554658.6524198 1756554661.4308546 1756554667.5288537 1756554669.1511383 1756554676.6495404 1756554680.4736974 1756554709.1258993 1756560284.335863 1756560285.933871 1756560287.908809 1756560291.6384768 1756560292.458672 1756560313.8946424 1756560321.8388882 1756560325.908103 1756560382.8148215 1756563696.9923987 1756563701.9017537 1756563702.811375 1756563703.8906672 1756563714.253635 1756563732.5171704 1756563734.767729 1756563770.182094 1756563775.9456685 1756567983.683949 1756567991.56894 1756567993.1907952 1756567994.3630297 1756567996.010478 1756567998.5305734 1756568016.7985425 1756568019.5493484 1756568024.0831244 1756568066.684337 1756623320.5544336 1756623322.472054 1756623330.1998444 1756623332.9352598 1756623336.381962 1756623337.7754755 1756623352.333162 1756623365.3432426 1756623398.6320612 1756623433.5529215 1756651806.794219 1756651809.4032423 1756651811.7553992 1756651813.037486 1756651831.3541577 1756651840.1121118 1756651875.5639043 1756651893.71908 1756657336.314789 1756657337.6781893 1756657344.0205686 1756657351.4188898 1756657363.845933 1756657365.71656 1756657377.6119764 1756657383.4340963 1756657448.2905917 1756657547.2515292 1756663699.0600624 1756663705.761575 1756663711.437942 1756663712.1873233 1756663716.33332 1756663730.0981581 1756663739.4198246 1756663744.7488353 1756663762.9796426 1756730636.526893 1756730638.7500653 1756730644.7717385 1756730645.640282 1756730647.9443047 1756730669.7771692 1756730680.0643866 1756730854.7317486 1756731005.6253655 1756812461.4234276 1756812463.1158438 1756812466.4828668 1756812467.756903 1756812468.7449336 1756812489.6910367 1756812492.6029148 1756812525.5468075 1756812569.3577304 1756816339.3495305 1756816341.164291 1756816347.0396016 1756816348.348776 1756816352.214036 1756816356.467143 1756816361.6113038 1756816383.0108232 1756816410.4677415 1756816432.5799692 1757250550.4773295 1757250551.1298668 1757250551.9734964 1757250552.757958 1757250555.4748414 1757250560.3880448 1757250581.049149 1757250588.4147136 1757250627.1143572 1757250674.2455492 1757254212.7658505 1757254218.7390375 1757254227.5592763 1757254230.1855805 1757254240.5517533 1757254244.1242387 1757254252.3621862 1757254338.1887016 1757315702.2559307 1757315703.8898485 1757315705.3952873 1757315707.076994 1757315712.250251 1757315726.671891 1757315731.4795449 1757315805.4317906 1757315899.0124006 1757406652.7380905 1757406655.4549916 1757406656.652004 1757406662.530522 1757406685.7777593 1757406689.457919 1757406721.7381837 1757406766.3391576 1757522851.9774354 1757522855.1329193 1757522858.2322128 1757522859.0345004 1757522862.450237 1757522895.4297178 1757522899.6509047 1757522902.0956619 1757522974.9892027 1757593470.624918 1757593473.7091618 1757593479.5218978 1757593500.0183465 1757593502.5605037 1757593545.0526714 1757593634.8489718 1757593642.9991968 1757593801.1162865 1757593855.9368112 1757759851.9401703 1757759854.1618981 1757759857.3359904 1757759861.5839758 1757759862.5584164 1757759869.2156584 1757759896.1262476 1757759898.967808 1757759919.0617156 1757767575.7318823 1757767577.3116324 1757767578.164892 1757767579.7084188 1757767582.4452462 1757767591.6664143 1757767606.1796238 1757767621.7165635 1757767642.8931715 1757767696.8098483 1757860785.381375 1757860785.9220712 1757860789.7567668 1757860791.9484856 1757860793.619363 1757860800.634484 1757860821.7560308 1757860969.2124605 1757860971.2501225 1757860974.089601 1757860983.6230283 1757860995.4606473 1757861005.9285455 1757861115.845992 1757869253.9140117 1757869256.4396024 1757869258.5740275 1757869263.9215944 1757869267.8763661 1757869268.7663534 1757869274.0691543 1757869300.9069545 1757869322.3778484 1757869410.4702916 1757870798.2686443 1757870804.1248548 1757870806.7007651 1757870809.032035 1757870812.0584605 1757870813.2881002 1757870829.2664254 1757870838.5672476 1757870869.525567 1757870905.564141 1758094886.0981183 1758094889.9322498 1758094891.2626927 1758094898.718456 1758094900.569667 1758094915.4495225 1758094922.0363855 1758094952.5641358 1758095013.700299 1758198488.148094 1758198489.796498 1758198490.5393128 1758198495.096042 1758198501.3216105 1758198516.7062492 1758198519.4233909 1758198546.4314828 1758198640.9332113 1758272137.4220994 1758272139.738268 1758272143.227976 1758272156.597657 1758272190.698047 1758272196.0740888 1758272208.9434507 1758272238.1286738 1758272260.6139212 1758272449.394718 1758376904.6455922 1758376932.3074038 1758376948.930031 1758376971.2760975 1758376988.0856025 1758377009.1713164 1758377013.5835123 1758377048.9492967 1758377161.0676274 1758379289.6113198 1758379290.2530682 1758379290.8906834 1758379294.675036 1758379300.961393 1758379317.8066623 1758379323.2454424 1758379382.9791315 1758379436.5179815 1758383797.1264625 1758383803.1973991 1758383804.7967987 1758383807.4729981 1758383816.634885 1758383821.6915572 1758383835.7692916 1758383847.0809147 1758383858.7766733 1758383959.9250615 1758436806.4146972 1758436807.1329958 1758436809.3260841 1758436811.4417937 1758436827.3085277 1758436833.948449 1758436841.838951 1758436892.3199496 1758437202.6245308 1758443980.2173722 1758443983.3484104 1758443984.4110887 1758443990.683742 1758443991.5369225 1758443992.2086768 1758444010.2000234 1758444026.1857007 1758444124.608413 1758444134.7710118 1758465760.986729 1758465762.3181996 1758465764.0645068 1758465765.3632345 1758465787.950925 1758465790.680185 1758465801.6848671 1758465819.947332 1758465892.7116282 1758469620.1688812 1758469622.2927094 1758469623.5728564 1758469626.4591117 1758469627.0488255 1758469658.6069713 1758469665.5531895 1758469694.4000585 1758469756.5381064 1758470108.986735 1758470124.057676 1758470125.9493299 1758470131.5719683 1758470132.0934024 1758470137.9475138 1758470152.9088888 1758470156.1865952 1758470237.0114837 1758470254.5041 1758473686.2613904 1758473687.3080168 1758473689.074438 1758473693.3072124 1758473702.961244 1758473713.9129097 1758473726.2750452 1758473728.0962465 1758473842.3047895 1758789324.575525 1758789326.8829281 1758789331.1484952 1758789336.1290336 1758789346.26325 1758789353.666283 1758789358.8292425 1758789391.3956625 1758789394.393225 1758789579.999567 1758790671.02605 1758790672.8537107 1758790679.772759 1758790689.91073 1758790691.5338035 1758790692.7503328 1758790694.4285848 1758790707.107544 1758790732.2181475 1758790744.552918 1758803421.38217 1758803422.191356 1758803426.5482674 1758803427.662299 1758803428.821401 1758803455.564844 1758803459.5975406 1758803468.6731277 1758803572.6319895 1758987995.8475184 1758987996.6889234 1758988001.7106867 1758988011.6054077 1758988012.5404832 1758988030.3667586 1758988033.3406215 1758988115.726078 1758988277.8816535 1758991548.528388 1758991549.5032086 1758991557.7442715 1758991563.3105981 1758991572.8650045 1758991574.2282062 1758991582.1383522 1758991660.158998 1758991685.4292345 1759149060.2126746 1759149061.0146425 1759149064.611687 1759149067.7415888 1759149073.5355003 1759149094.2505076 1759149129.422489 1759149210.0339108 1759678901.9160364 1759678907.6715856 1759678932.9189944 1759679009.2559366 1759679011.4334173 1759679017.9236014 1759679022.8569818 1759679057.7054338 1759679059.8628235 1759679088.7659316 1759680202.6930416 1759680211.6861782 1759680213.267575 1759680221.0871046 1759680234.2229006 1759680244.7382803 1759680250.0741076 1759680311.640205 1759682581.4376502 1759682582.058753 1759682583.4463851 1759682584.8480828 1759682589.7484057 1759682591.9313192 1759682598.784222 1759682615.6336246 1759682685.3061302 1759682727.9810057 1759997168.5617237 1759997172.2804568 1759997174.3058667 1759997176.6075652 1759997183.6703053 1759997190.440064 1759997200.358024 1759997225.7491734 1759997368.1660178 1760065861.3042967 1760065868.189436 1760065869.2846282 1760065871.4562247 1760065893.879352 1760065900.3684113 1760065918.0518327 1760065963.6096683 1760069079.7001333 1760109020.464128 1760109022.5795572 1760109044.0690029 1760109052.5592253 1760109053.2782536 1760109062.9402142 1760109077.3545287 1760109094.5194438 1760109119.3457763 1760109131.098082 1760110188.1789145 1760110195.7505786 1760110197.687359 1760110199.661814 1760110202.7336934 1760110209.8629327 1760110223.4093578 1760110262.6597283 1760176958.6276183 1760176961.2292545 1760176965.6712897 1760176969.2640572 1760176980.9633286 1760176982.6216314 1760176983.3697286 1760176986.4191535 1760177000.5208561 1760177046.5203931 1760181743.7265334 1760181744.3741639 1760181748.5661814 1760181754.3712742 1760181765.4268498 1760181771.427125 1760181781.9578679 1760181907.003855 1760186961.2749624 1760186963.2880752 1760186972.4420753 1760186977.2224278 1760186977.9336514 1760186982.7370312 1760186983.9564476 1760186986.7875197 1760186989.8342474 1760187116.5768108 1760192063.4595168 1760192069.9260569 1760192071.0044608 1760192075.7647357 1760192078.064715 1760192079.395327 1760192096.9100592 1760192106.8860312 1760192220.910232 1760197171.8456156 1760197176.329728 1760197184.2266924 1760197188.62888 1760197194.3378708 1760197205.5518498 1760197220.2591972 1760197234.3463988 1760197246.756236 1760201835.284966 1760201836.5706768 1760201844.7961292 1760201845.2753227 1760201846.253655 1760201860.5191386 1760201861.6324472 1760201891.4585385 1760201934.3117514 1760203521.6871166 1760203524.4583154 1760203526.1673923 1760203527.7793536 1760203528.6421568 1760203533.0249124 1760203540.580649 1760203558.7832 1760203565.6265962 1760203704.2483034 1760208400.6732097 1760208402.0070264 1760208404.8436205 1760208408.2806673 1760208413.4959168 1760208416.4589143 1760208423.4273822 1760208434.2644088 1760208646.3928986 1760260672.7115512 1760260673.3789666 1760260674.1465495 1760260686.8978753 1760260701.1833951 1760260767.301787 1760260784.846258 1760260786.6696696 1760260797.917884 1760262121.7993038 1760269891.4179525 1760269892.1435916 1760269893.2471051 1760269895.8574095 1760269902.5837235 1760269903.350184 1760269911.580905 1760269926.0960793 1760269976.1379318 1760285301.0387683 1760285304.6327496 1760285306.5802863 1760285311.277028 1760285313.8499649 1760285326.521916 1760285331.085437 1760285333.3500106 1760285484.9395401 1760302085.5402446 1760302086.7340791 1760302092.4930632 1760302093.1862915 1760302097.047335 1760302113.5237918 1760302114.7217674 1760302129.6338432 1760302204.5704675 1760328946.4815428 1760328947.71341 1760328952.97125 1760328953.5222723 1760328956.548482 1760328973.4973283 1760328974.073793 1760328996.5082657 1760329090.1493146 1760347710.922032 1760347720.1702354 1760347724.736095 1760347727.9769988 1760347729.5172718 1760347730.3231437 1760347733.3761768 1760347743.8931594 1760347745.6416194 1760347915.0102088 1760358647.9662585 1760358648.6792915 1760358649.2804878 1760358654.0842292 1760358671.0118513 1760358677.122437 1760358683.546623 1760358718.8457167 1760370390.2076175 1760370391.397971 1760370394.622414 1760370396.471747 1760370407.4859722 1760370425.7107582 1760370426.7731693 1760370541.6130474 1760424893.1850412 1760424894.1859853 1760424895.6856303 1760424898.6068366 1760424902.0461578 1760424913.1799345 1760424917.4821265 1760424921.1070764 1760425021.3093822 1760743146.793899 1760743150.532634 1760743152.9184196 1760743156.833466 1760743157.5592577 1760743161.1552167 1760743171.198314 1760743175.1721282 1760743217.3190475 1760786575.1475165 1760786580.451427 1760786585.9220862 1760786592.0383992 1760786597.66885 1760786599.3244073 1760786612.9410458 1760786685.614658 1760786711.8526483 1760788122.718024 1760788130.2036352 1760788131.7925465 1760788133.8885221 1760788138.6973095 1760788141.6066995 1760788165.2763598 1760788262.0012178 1760793264.967267 1760793271.4599068 1760793272.682385 1760793279.1230643 1760793284.9563894 1760793289.1663685 1760793292.1584153 1760793320.8553169 1760793519.0003898 1760793524.6424658 1760793526.575326 1760793529.069538 1760793532.6066246 1760793537.5595367 1760793544.3480856 1760793560.866959 1760793674.0022 1760860124.4421682 1760860126.1444528 1760860133.036754 1760860145.1253457 1760860150.0040295 1760860157.6127007 1760860213.5287194 1760860254.2642376 1760860261.6253562 1760860413.0565133 1760869223.0697606 1760869226.7882934 1760869231.149606 1760869240.8386393 1760869244.1520154 1760869246.3574295 1760869254.6131852 1760869268.0096996 1760869301.3809862 1760869573.2066333 1760869576.4536045 1760869581.78191 1760869584.255531 1760869588.763384 1760869589.75701 1760869598.6541889 1760869601.4438689 1760869610.7774029 1760869698.1974425 1760938815.440873 1760938815.8425229 1760938822.7376003 1760938831.250733 1760938833.930654 1760938835.1285305 1760938835.796545 1760938843.6164384 1760938860.5747712 1760972532.9978673 1760972534.3429718 1760972540.7126017 1760972545.0473254 1760972554.6597133 1760972555.7788084 1760972557.0478446 1760972580.0633926 1760972657.9048338 1761060369.5720823 1761060374.0631437 1761060380.4744687 1761060381.3302562 1761060383.1159825 1761060385.4865553 1761060395.3019264 1761060581.2982967 1761060585.6111755 1761060590.0977602 1761060591.2101505 1761060593.1073785 1761060598.4627094 1761060618.359523 1761060624.4569325 1761060729.5115902 1761144853.0819714 1761144856.689801 1761144857.4272952 1761144857.989736 1761144859.7585185 1761144861.2797425 1761144880.3253202 1761144889.7398975 1761144947.037287 1761148048.739978 1761148050.631192 1761148052.721287 1761148054.8056633 1761148059.5820656 1761148063.3975248 1761148087.5545166 1761148090.5621092 1761148131.0594964 1761148229.1727126 1761212441.3152373 1761212442.0500846 1761212448.6663396 1761212456.9727566 1761212465.1971743 1761212471.6861997 1761212512.632466 1761212517.142052 1761212536.051563 1761212571.3813605 1761217281.3986537 1761217306.1535387 1761217313.6426508 1761217320.8573422 1761217330.3046353 1761217334.2626648 1761217357.7038624 1761217376.540221 1761217381.1343498 1761217475.373226 1761219269.170714 1761219276.183937 1761219278.1303427 1761219281.116449 1761219283.073473 1761219287.7204525 1761219309.497512 1761219312.9766653 1761219332.7687204 1761222439.838213 1761222442.6421044 1761222451.2844505 1761222453.0715046 1761222456.7843916 1761222458.6897311 1761222471.0094128 1761222480.8025346 1761222485.4113288 1761222529.244105 1761295100.522707 1761295102.4320357 1761295103.7916367 1761295111.0924425 1761295112.4658391 1761295118.298571 1761295128.6002736 1761295138.7218268 1761295176.1645088 1761311464.8069572 1761311466.517216 1761311469.0799317 1761311469.693539 1761311471.3626993 1761311472.9784894 1761311481.0966003 1761311498.1026597 1761311500.2232938 1761311525.0575533 1761383754.5454621 1761383757.3220978 1761383761.223058 1761383761.8817794 1761383769.4942296 1761383771.735202 1761383775.1095457 1761383780.9610267 1761383821.0147321 1761383893.7472773 1761408662.3846736 1761408664.6186817 1761408666.5762887 1761408667.3478622 1761408675.0225043 1761408677.9694781 1761408680.248723 1761408699.4657342 1761408707.8276389 1761408834.6558533 1761470753.6233206 1761470755.1946387 1761470760.2358305 1761470765.7691329 1761470774.8850012 1761470778.1507916 1761470784.4810855 1761470787.0317824 1761470798.0484314 1761470913.4951358 1761501822.1993885 1761501828.0765977 1761501834.5608828 1761501837.3458037 1761501842.1671865 1761501842.6012266 1761501849.8652487 1761501854.5500402 1761501944.6396515 1761568585.206552 1761568594.6564615 1761568597.3226542 1761568598.3210044 1761568600.2232356 1761568618.5227046 1761568630.444256 1761568663.0719657 1761568779.782653 1761568887.4298677 1761579967.571521 1761579969.10766 1761579970.350306 1761579975.7025917 1761579985.395596 1761579988.7035441 1761580001.1484468 1761580005.97187 1761580032.0797098 1761732621.0596154 1761732622.4862742 1761732624.583479 1761732641.1949139 1761732643.8280423 1761732667.5962641 1761732678.8320563 1761732708.341875 1761732739.0964832 1761732741.0047672 1761733333.6166253 1761733340.287924 1761733344.3041735 1761733349.9582686 1761733355.0360234 1761733363.931928 1761733369.92241 1761733497.7672007 1761733499.7289472 1761733502.6771982 1761733505.561072 1761733522.8919158 1761733524.7920578 1761733526.7814734 1761733536.03033 1761733559.1054711 1761733973.2625349 1761733974.8804538 1761733975.8670855 1761733983.4152267 1761733984.5874498 1761733985.617361 1761734000.0249293 1761734016.5178993 1761734058.1966867 1761739154.979861 1761739160.741309 1761739163.0372496 1761739165.1003692 1761739176.9402776 1761739183.5748458 1761739190.8559542 1761739198.0391276 1761739224.2763262 1761739651.787256 1761739659.5065682 1761739661.7434552 1761739662.7944498 1761739672.0530784 1761739674.6446283 1761739681.3101513 1761739881.4297092 1761753515.4783666 1761753519.595589 1761753528.9743803 1761753531.3077066 1761753532.3792512 1761753543.5615988 1761753555.2167263 1761753821.0167503 1761756820.567883 1761756822.7604883 1761756824.7155573 1761756829.902521 1761756831.3815246 1761756839.1349351 1761756844.7806425 1761756851.6347315 1761756864.8949487 1761757084.5832186 1761783971.8902345 1761783975.955501 1761783979.7629645 1761783982.5048652 1761783984.0125172 1761783994.9253206 1761784007.3848386 1761784007.9892821 1761784116.5959563 1761812842.0582845 1761812842.858573 1761812850.7051184 1761812853.665147 1761812856.4933705 1761812862.5699618 1761812863.5919237 1761812871.8366818 1761812980.4047241 1761813109.5922022 1761813119.0922732 1761813120.0996842 1761813125.9788857 1761813136.455482 1761813137.3587613 1761813144.156814 1761813404.6076884 1761815250.9121108 1761815253.333122 1761815261.2016864 1761815266.7144861 1761815274.8910897 1761815283.2405734 1761815285.803323 1761815313.78364 1761815315.6396675 1761816551.8261442 1761816556.620063 1761816560.7388778 1761816561.7038183 1761816563.653961 1761816571.7262235 1761816598.5983844 1761816603.679053 1761816616.107075 1761816982.505621 1761816983.3680015 1761816992.1575406 1761816995.186787 1761816996.6600037 1761816998.3273346 1761817012.2697558 1761817021.7558877 1761817048.4622328 1761818678.486974 1761818680.3207557 1761818683.0676215 1761818683.7666762 1761818696.0210476 1761818706.5787892 1761818717.8600068 1761818723.6918113 1761819171.0990624 1761828198.7066338 1761828202.5303748 1761828210.6003237 1761828231.9966207 1761828235.4440167 1761828238.9658937 1761828285.0829797 1761828339.8987975 1761828348.659788 1761828407.4981537 1761838695.6500044 1761838696.3330994 1761838699.4536595 1761838700.7025476 1761838710.6912897 1761838719.1276152 1761838856.688787 1761838862.4126012 1761838866.7453022 1761838872.676898 1761838876.31469 1761838881.1648023 1761838882.255903 1761838886.8290792 1761839034.2050247 1761839036.4394672 1761839041.3663592 1761839045.8587894 1761839046.9232655 1761839058.9090395 1761839063.191618 1761839064.4754827 1761839100.7322073 1761903364.8073344 1761903366.282132 1761903369.2671845 1761903373.6632118 1761903396.633601 1761903401.9476395 1761903425.4567928 1761907794.4028182 1761907798.267677 1761907802.7829356 1761907806.6542995 1761907808.755848 1761907810.6964827 1761907819.1398387 1761907819.9082677 1761907831.778921 1761907861.5249884 1761916175.7201128 1761916181.8167076 1761916183.6725361 1761916186.4976492 1761916188.5812843 1761916206.4783504 1761916210.9515936 1761916239.7759252 1761916244.5611362 1761916256.3694642 1761918708.0654619 1761918709.2721436 1761918710.4901214 1761918711.0832524 1761918717.9547687 1761918725.1858885 1761918729.5807498 1761918732.4273076 1761918748.7229514 1761918784.7492945 1761924853.904902 1761924930.7075958 1761924931.704748 1761924936.018988 1761924936.6370103 1761924950.064064 1761924951.2240555 1761924952.1859083 1761924964.102679 1761925061.6673362 1761931328.381721 1761931362.0425394 1761931366.6559973 1761931387.689871 1761931395.9854743 1761931443.699999 1761931449.67774 1761931483.457332 1761931525.4132876 1761932426.3424194 1761932438.22436 1761932440.9574938 1761932444.2187312 1761932445.4122531 1761932446.3095675 1761932449.411533 1761932450.8779695 1761932458.8442442 1761932554.581199 1761943206.0485408 1761943208.721901 1761943209.7145672 1761943231.8070157 1761943250.5338347 1761943258.9555643 1761943286.6451633 1761943316.8918748 1761943325.365103 1761943902.1533275 1761943904.2363207 1761943911.0530365 1761943911.9343462 1761943916.8543684 1761943929.6059718 1761943932.7973747 1761944032.3762949 1761972625.1348531 1761972631.2784424 1761972634.7716472 1761972636.1866002 1761972650.59014 1761972658.7792203 1761972697.2746897 1761998643.266348 1761998644.9597728 1761998651.870806 1761998655.6946402 1761998657.3297527 1761998675.5200093 1761998686.3667939 1761998782.1904857 1762002372.3393233 1762002383.5091453 1762002456.6738017 1762002463.6045744 1762002478.2381296 1762002483.4908178 1762002496.9344296 1762002503.075543 1762002641.5141308 1762003784.2051804 1762003786.6937287 1762003787.9662147 1762003804.7873077 1762003807.2316003 1762003818.263784 1762003867.0438159 1762004551.510921 1762004553.6924763 1762004560.7829566 1762004563.0963054 1762004565.8813064 1762004570.809282 1762004582.4673772 1762004704.970945 1762010469.8733897 1762010474.2603297 1762010480.9687178 1762010485.2649827 1762010489.78939 1762010505.1184232 1762010569.005523 1762011149.9099917 1762011151.630804 1762011153.7875993 1762011157.8205986 1762011159.814798 1762011164.3464637 1762011175.4887507 1762011192.3388321 1762011314.9134667 1762016545.3331056 1762016553.595649 1762016558.990784 1762016562.646232 1762016564.002207 1762016579.8990319 1762016585.4553425 1762016599.7099645 1762016717.1077857 1762016882.2061126 1762016885.560252 1762018726.31528 1762018727.0032678 1762018734.9585347 1762018738.825398 1762018743.6514335 1762018754.7986135 1762018765.327472 1762018870.7137697 1762020052.1141596 1762020057.0351884 1762020059.9044833 1762020065.3989885 1762020067.811667 1762020076.477097 1762020079.396898 1762020091.510058 1762020115.2351296 1762071057.9529824 1762071063.6751099 1762071066.499017 1762071067.3919523 1762071073.8159995 1762071091.9804113 1762071107.408353 1762071263.8868177 1762101819.8454258 1762101824.7539666 1762101829.8303137 1762101831.1636562 1762101838.2514503 1762101841.9861197 1762101853.6021614 1762101861.0454462 1762101911.296313 1762105806.2418687 1762105843.1352499 1762105848.6053684 1762105849.3388176 1762105857.7725208 1762105890.6376925 1762105928.2757473 1762105944.803276 1762105971.790727 1762108123.201678 1762108128.0310478 1762108135.0505812 1762108146.1856859 1762108155.7639487 1762108157.3915591 1762108167.899605 1762172555.87825 1762172564.126668 1762172577.4182642 1762172591.5535257 1762172618.802497 1762172627.0197368 1762172671.4228137 1762172710.2156913 1762172716.7204862 1762182285.9299097 1762182288.5652134 1762182291.2938004 1762182293.269225 1762182294.2326968 1762182303.8357842 1762182306.2251508 1762182321.2300313 1762182430.8417692 1762184529.1819077 1762184536.512359 1762184537.1591082 1762184537.760621 1762184539.0728261 1762184554.332873 1762184568.5305755 1762184589.301031 1762184609.7697651 1762200904.005787 1762200907.18115 1762200913.502514 1762200914.23389 1762200917.573258 1762200921.9871643 1762200928.988474 1762200931.0818367 1762200967.8282592 1762209280.490971 1762253101.193741 1762253107.0873806 1762253110.1899955 1762253115.4174728 1762253129.0361514 1762253133.7874737 1762253162.8910217 1762253182.9230866 1762253184.2797866 1762260330.9593165 1762260333.0245092 1762260339.4750998 1762260341.6916134 1762260343.3884668 1762260348.187566 1762260355.5107586 1762260363.932035 1762260505.9395063 1762287891.7447214 1762287897.3504825 1762287900.7250962 1762287906.7337685 1762287908.2938457 1762287909.971187 1762287927.4461327 1762287984.259216 1762422474.7089126 1762422475.465572 1762422482.2303576 1762422486.473266 1762422488.7677093 1762422489.7465184 1762422497.7767348 1762422511.8179455 1762422593.4148452 1762436140.7360206 1762436146.750907 1762436148.420587 1762436149.0124712 1762436151.6360707 1762436164.3627691 1762436166.0090265 1762436216.9200459 1762522496.3923283 1762522499.0286534 1762522500.3733065 1762522500.8749893 1762522502.2203865 1762522503.506489 1762522524.1964445 1762522526.187269 1762522572.350876 1762604641.8171883 1762604642.384963 1762604643.5394833 1762604652.4941573 1762604663.9734704 1762604681.0171967 1762604706.881941 1762604717.9407048 1762604738.9008565 1762616292.5187433 1762616350.6337602 1762616377.5028427 1762616440.264139 1762616453.3365035 1762616457.5079691 1762616461.5424132 1762616478.7812738 1762616616.4936285 1762621980.1461287 1762621980.8402362 1762621985.1854296 1762621987.6974733 1762621989.4274623 1762621992.8795457 1762621995.4352868 1762622132.197382 1762622133.042379 1762622142.6368914 1762622143.8745382 1762622146.6899445 1762622156.4792702 1762622157.5314913 1762622204.3318274 1762622591.3178737 1762622593.5971794 1762622596.546724 1762622598.5373664 1762622614.1202447 1762622617.400571 1762622636.2234461 1762622636.7881298 1762622682.3763316 1762623186.3071823 1762623189.6776576 1762623193.4851882 1762623195.928299 1762623199.3596818 1762623201.9214406 1762623205.9429522 1762623215.2832174 1762623330.8150814 1762685883.0941963 1762685903.8723197 1762685927.283401 1762685936.761773 1762685958.2256646 1762685984.6082613 1762685999.784007 1762686016.7443185 1762686040.941506 1762686604.1537943 1762686605.0731802 1762686607.4993882 1762686618.869133 1762686620.846673 1762686632.4037566 1762686636.965218 1762686660.1538556 1762687486.9320269 1762687504.2483954 1762687507.263849 1762687513.4480598 1762687513.9274237 1762687521.5279539 1762687523.2285419 1762687632.7838094 1762687713.467016 1762689993.6343405 1762689998.1456513 1762690000.826434 1762690006.796545 1762690010.5455694 1762690014.0553174 1762690023.0149443 1762690026.3884199 1762690050.6457598 1762690601.9759095 1762690603.5830753 1762690604.9104593 1762690617.4960287 1762690618.9582949 1762690621.2141972 1762690624.0565562 1762690635.8852017 1762695377.9534924 1762695379.8920557 1762695387.0601099 1762695389.252808 1762695390.468865 1762695402.8316972 1762695499.562626 1762695529.2544737 1762709105.3129528 1762709108.0436068 1762709117.5377827 1762709118.5359573 1762709127.5769272 1762709128.4510138 1762709132.7309337 1762709163.794322 1763297062.6462157 1763297063.718993 1763297064.156321 1763297066.0391867 1763297069.557291 1763297080.286124 1763297086.3967721 1763297087.650356 1763299191.865496 1763299192.9348702 1763299198.4212236 1763299199.801592 1763299204.5713706 1763299209.050733 1763299219.0118797 1763299227.9297895 1763302380.1910982 1763302382.197532 1763302383.6581008 1763302392.1376574 1763302398.1155136 1763302403.0585613 1763302407.618657 1763302416.5956852 1763302419.1865063 1763302793.966636 1763302795.4213364 1763302797.1293983 1763302797.9772894 1763302801.348963 1763302803.8687665 1763302810.6713228 1763302816.0434008 1763302819.5563455 1763303612.8964972 1763303614.4866087 1763303617.5355716 1763303620.0610914 1763303622.02864 1763303626.9398384 1763303630.710819 1763303638.1577716 1763303643.232244 1763308113.9014347 1763308122.4819312 1763308140.4671648 1763308145.2055862 1763308146.7704184 1763308168.3040445 1763308181.1838708 1763308182.6945477 1763308218.14928 1763382992.5026288 1763382994.5812373 1763383067.165341 1763383082.5999503 1763383088.843485 1763383110.3557034 1763383170.7782712 1763383210.6378741 1763383246.8616576 1763386839.210291 1763386839.9151208 1763386844.3694417 1763386848.766369 1763386849.4183211 1763386850.6483958 1763386855.4940298 1763386862.358006 1763386867.5119295 1763389241.0266955 1763389285.7207963 1763389309.7197878 1763389314.1105762 1763389321.9944794 1763389335.3969219 1763389381.59872 1763389386.467899 1763389390.7888556 1763546239.090256 1763546239.7797186 1763546252.0421507 1763546253.0514424 1763546255.3455715 1763546265.2387855 1763546269.9594424 1763546272.4304173 1763642042.9531288 1763642044.3326356 1763642048.0169668 1763642049.6969402 1763642057.2456183 1763642064.7353468 1763642065.2131665 1763642073.5537636 1763642080.0179844 1763659926.9954894 1763659930.3687325 1763659935.5686922 1763659937.5839558 1763659958.96232 1763659963.6969051 1763660103.7222788 1763660120.1527593 1763660133.9003205 1763789923.6157908 1763789934.517366 1763789942.4983094 1763789954.7262015 1763790034.771286 1763790041.4361985 1763790045.903533 1763790079.5756056 1763795168.8845222 1763795172.1928253 1763795173.0381145 1763795180.4388633 1763795182.2695243 1763795185.2208147 1763795201.8603241 1763795207.6413875 1763919853.1434977 1763919863.9553008 1763919864.5607672 1763919866.6655488 1763919871.3080835 1763919880.8117497 1763919882.552756 1763920697.2940915 1763952872.7848387 1763952876.492404 1763952879.5763636 1763952881.379629 1763952884.1267953 1763952890.6836202 1763952892.4930377 1763952893.4756386 1763987125.6737487 1763987126.725239 1763987144.1404214 1763987154.748037 1763987199.961115 1763987216.088118 1763987231.719802 1763987310.7274327 1763987366.2468972 1764011072.3707397 1764011072.9961948 1764011077.8855467 1764011079.9896512 1764011083.0571504 1764011090.3551934 1764011100.6690629 1764011915.3394165 1764218186.5586534 1764218189.3324022 1764218190.2522562 1764218204.7683747 1764218208.701724 1764218210.0649126 1764218218.7979891 1764340315.2158823 1764340321.8420427 1764340324.050802 1764340327.1663163 1764340329.2468398 1764340332.0343747 1764340335.1212754 1764360876.3445911 1764360884.9453511 1764360899.9534636 1764360901.9353132 1764360905.4604099 1764360906.0657322 1764360950.4120343 1764361027.9019718 1764361037.5838752 1764363073.981725 1764363075.6741886 1764363079.0219173 1764363095.41827 1764363098.2861693 1764363124.3888063 1764363142.6363301 1764363219.1545677 1764363241.7134886 1765187032.8380136 1765187035.453364 1765187042.338773 1765187044.5671895 1765187045.9196754 1765187047.8885398 1765187051.2035475 1765187058.7123928 1765187060.6759374 1765355427.1373546 1765355428.2110195 1765355429.8868406 1765355444.2209935 1765355448.3313894 1765355449.6444044 1765355463.7727923 1765355509.568022 1765360614.6304975 1765360627.278244 1765360699.6176698 1765360700.3069332 1765360702.7569158 1765360727.5694447 1765360734.068348 1765360738.853782 1765360751.4475017 1765365473.0148964 1765365476.4291492 1765365477.6918364 1765365485.5428207 1765365488.3033526 1765365496.4341197 1765365499.204723 1765365501.9174285 1765365509.546715 1765557509.2392964 1765557517.8780813 1765557523.434449 1765557525.9953475 1765557530.5092058 1765557550.3774416 1765557576.56148 1765557638.3009307 1765634922.4164693 1765640546.4406013 1765640555.8154743 1765640569.9443984 1765640571.8285775 1765640589.8454623 1765640597.2192576 1765640600.685116 1765640601.791428 1765643204.8700292 1765643206.6251795 1765643210.194346 1765643213.5972345 1765643216.0359607 1765643223.1245673 1765643235.8558447 1765643236.6084464 1765643237.377273 1765643461.6558518 1765643465.6197562 1765643468.7124977 1765643470.595265 1765643471.002281 1765643474.730295 1765643477.3206208 1765643484.8833282 1765644898.6106436 1765644899.5319552 1765644904.2567694 1765644907.0171332 1765644907.4870572 1765644909.9574072 1765644922.176685 1765644923.162431 1765644925.752624 1765650682.681714 1765650807.9693182 1765650812.0510752 1765650814.6558144 1765650815.0367496 1765650815.822579 1765650817.1819093 1765650840.9738505 1765650841.5835085 1765723890.041584 1765723901.878552 1765723913.9920568 1765723940.7441728 1765723953.6822717 1765723965.2455328 1765723975.6101594 1765723981.7978325 1765723998.121029 1765801572.220802 1765801586.4000347 1765801589.783504 1765801601.659667 1765801611.0200794 1765801676.5740016 1765801689.931427 1765879653.3422017 1765879654.6520367 1765879655.818434 1765879665.157804 1765879674.2655952 1765879727.529927 1765879740.0749133 1765879756.2488542 1765879767.9327204 1765880050.2235658 1765881066.7586555 1765881071.0245862 1765881071.5761216 1765881074.3021216 1765881077.7869434 1765881082.084883 1765881098.7095683 1765881099.5209198 1765890220.8121464 1765890223.076022 1765890229.5600839 1765890230.3226686 1765890234.1518707 1765890234.8996077 1765890240.9570239 1765890254.1053715 1765904461.6480265 1765904469.4855177 1765904473.118679 1765904476.6461954 1765904481.4827998 1765904482.7578373 1765904571.3059204 1765904580.1127 1765904624.410078 1766060957.0203218 1766060959.152164 1766060969.126864 1766060969.7474778 1766060987.2880044 1766060989.7890246 1766061003.9739647 1766061014.4612226 1766125832.056241 1766125835.0174904 1766125842.5458252 1766125847.860071 1766125850.0030906 1766125862.1761515 1766125863.6121485 1766125866.3684192 1766175187.6213129 1766175189.7560964 1766175192.2463057 1766175198.3198903 1766175203.6143293 1766175217.1426938 1766175278.720896 1766175281.0863192 1766925258.8068514 1766925261.8128085 1766925263.4731135 1766925264.5417693 1766925273.9132488 1766925280.2520475 1766925286.0638998 1766925295.908001 1766996858.593534 1766996859.3148115 1766996862.3900332 1766996863.9632237 1766996866.002261 1766996937.9445057 1766996946.8544555 1766996953.7118356 1766996998.3924599 1767005750.2315245 1767005752.713343 1767005753.7751043 1767005757.1741123 1767005760.8929029 1767005762.1786122 1767005765.7549138 1767005778.0547214 1767008189.6399276 1767008192.654333 1767008193.6334174 1767008194.1320896 1767008208.67269 1767008238.5539753 1767008258.371955 1767008359.6306872 1767008476.939767 1767008478.8546765 1767008479.2277246 1767008487.6395764 1767008494.452409 1767008496.4467835 1767008503.1518207 1767008505.3925378 1767008664.5282934 1767008670.6300914 1767008679.8526978 1767008681.2375803 1767008682.3679552 1767008686.4423952 1767008695.2620165 1767008696.4385452 1767008704.9496138 1767009731.1481624 1767009736.6050348 1767009738.860095 1767009741.8063154 1767009743.983117 1767009746.3949685 1767009758.005734 1767009765.2569134 1767010364.389463 1767010368.3234975 1767010376.3448942 1767010377.593191 1767010504.9921572 1767010505.7261412 1767010510.4794931 1767010512.9828248 1767010527.2291083 1767010529.7752872 1767010535.682247 1767013234.505958 1767013236.1389487 1767013238.1251016 1767013241.8454356 1767013242.544342 1767013247.3394504 1767013252.5731487 1767013256.2700813 1767013268.1770554 1767014261.9281383 1767014266.5664349 1767014267.77517 1767014285.8610258 1767014294.4500647 1767014298.7737455 1767014357.5287437 1767014364.8542192 1767014365.1898136 1767015032.0413318 1767015036.6794896 1767015037.0758255 1767015038.859089 1767015043.0507755 1767015043.795858 1767015058.7398818 1767015095.810186 1767015154.788291 1767016332.7769127 1767016341.7485373 1767016342.9278643 1767016343.4213676 1767016348.1831532 1767016356.9269874 1767016359.0096195 1767086066.2820609 1767086068.4097233 1767086104.5986426 1767086129.9135897 1767086146.020534 1767086154.2456412 1767086191.4983408 1767086194.8544183 1767086207.8455625 1767091900.6769624 1767091903.20487 1767091907.0771337 1767091911.2956107 1767091912.657855 1767091913.5171046 1767091917.2010088 1767091917.9127343 1767091923.4502337 1767092144.3763077 1767092144.6971657 1767092149.4341872 1767092150.4952488 1767092152.413446 1767092154.7418704 1767092167.4040303 1767092176.555279 1767092757.8919811 1767092759.227804 1767092761.611345 1767092765.8312247 1767092766.121263 1767092767.1874857 1767092779.6019578 1767092785.9529996 1767092787.807154 1767093406.5766206 1767093411.6432137 1767093416.292331 1767093416.841238 1767093420.1784983 1767093428.7357821 1767093430.451345 1767093437.9603465 1767270196.5264738 1767270198.6590161 1767270199.2853298 1767270202.7026517 1767270205.0109453 1767270212.2577412 1767270213.599389 1767270219.447361 1767270237.6540856 1767408777.352056 1767408779.8253002 1767408783.4031243 1767408786.606049 1767408792.9385245 1767408806.0961204 1767408808.6286788 1767450463.487253 1767450468.0185769 1767450469.3266888 1767450477.658307 1767450479.7213383 1767450487.8546865 1767450494.1723776 1767450504.1038587 1767523570.7468324 1767523573.4585876 1767523575.5568817 1767523578.0597918 1767523579.9227304 1767523580.686402 1767523584.8810203 1767523598.5700417 1767523599.3585181 1767524360.418623 1767524367.86007 1767524370.6017756 1767524371.3623307 1767524373.1854727 1767524377.3173368 1767524383.0169208 1767524387.166389 1767526612.655363 1767526620.893646 1767526666.0753863 1767526741.7127984 1767526760.5003262 1767526761.18435 1767526781.8502042 1767526808.215066 1767526846.9572792 1767540381.7925 1767540385.6660693 1767540389.1432114 1767540390.0299299 1767540391.0120437 1767540392.6561732 1767540396.2349198 1767540400.0953155 1767540407.0494602 1767603125.4719348 1767603129.6360354 1767603132.9295096 1767603136.400303 1767603139.1755438 1767603142.2036078 1767603146.9356022 1767603158.5485249 1767608453.8039553 1767608457.8362336 1767608473.1001418 1767608488.1931834 1767608525.184708 1767608547.776067 1767608574.4276385 1767608589.07131 1767608625.029423 1767609758.056628 1767609766.2764363 1767609770.6267624 1767609774.770277 1767609783.1370986 1767609784.4607327 1767609785.6430619 1767779970.3057816 1767779971.8273609 1767779974.343106 1767779975.9782546 1767779977.4753609 1767779978.2106094 1767779987.0569248 1767779988.502298 1767779992.3459094 1767781824.669599 1767781826.8218884 1767781830.172712 1767781832.6331336 1767781833.5870175 1767781838.157459 1767781849.438812 1767781855.110409 1767781856.0296986 1767783173.776942 1767783174.918709 1767783178.598568 1767783183.0167508 1767783185.1235716 1767783187.9137797 1767783190.6841505 1767783192.9388943 1767783194.3727446 1767789950.2846448 1767789950.780807 1767789951.7242458 1767789952.1188505 1767789954.9040453 1767789958.2523339 1767789964.9183238 1767789971.6630306 1767789988.1764913 1767794790.8767462 1767794797.9905484 1767794799.6897795 1767794800.677061 1767794803.3192046 1767794804.7557886 1767794810.129956 1767794817.6165998 1767794881.6264374 1767797113.9344013 1767797117.1024604 1767797119.4598038 1767797124.4368665 1767797125.005286 1767797125.6584253 1767797129.4499178 1767797142.6675413 1767804596.0774035 1767804597.0101094 1767804601.0117264 1767804601.8242528 1767804608.4628296 1767804615.409722 1767804626.2616994 1767804628.0655315 1767805286.2890604 1767805290.1657245 1767805294.8932576 1767805298.5421705 1767805300.1252146 1767805310.2346702 1767805311.8608637 1767806446.308764 1767806447.263031 1767806448.0307293 1767806449.6280806 1767806453.1115158 1767806455.2822442 1767806464.841296 1767806470.414619 1767806472.2149243 1767862534.1300757 1767862537.0822213 1767862538.015854 1767862540.5166407 1767862541.1621358 1767862543.53903 1767862548.4412358 1767862552.0026646 1767862559.5569992 1767875049.769152 1767875056.1616 1767875057.091702 1767875057.7781708 1767875063.8182845 1767875067.8484592 1767875072.015592 1767875084.231258 1767876200.634965 1767876205.9777443 1767876210.1790633 1767876211.1054254 1767876216.819659 1767876222.141576 1767876406.389355 1767876441.8357987 1767876482.82653 1767876492.9608855 1767876495.5181966 1767876505.5005298 1767876518.0242822 1767876543.5972047 1767876623.2839305 1767878590.5782363 1767878597.0823655 1767878600.7762733 1767878602.9763505 1767878607.4425566 1767878610.740943 1767880829.6364706 1767880836.354983 1767880837.814495 1767880838.7678552 1767880844.222659 1767880847.8437169 1767880853.18519 1767880861.3127449 1767880864.864189 1767886085.2988107 1767886100.009519 1767886110.4870822 1767886157.126238 1767886211.455036 1767886227.9047942 1767886239.5314128 1767886248.4401996 1767886269.623906 1767887877.780074 1767887879.653932 1767887883.437103 1767887884.8039067 1767887888.9499557 1767887890.333735 1767887897.9374743 1767887900.5198562 1767887902.473257 1767888586.8256478 1767888590.6860585 1767888592.5849898 1767888594.1425657 1767888596.96389 1767888598.0899355 1767888610.4946456 1767888611.4842644 1767888621.0345175 1767894668.1983907 1767894670.6740375 1767894672.3232863 1767894676.8063247 1767894680.8864522 1767894687.7080142 1767894691.1440587 1767894693.037532 1767894706.8682427 1767896385.028477 1767896385.6117723 1767896393.1601806 1767896394.332155 1767896396.101103 1767896400.9222782 1767896402.012056 1767896409.3551488 1767896414.0472367 1767954456.721825 1767954463.118075 1767954466.2569473 1767954467.282363 1767954471.615229 1767954472.5900018 1767954479.6348743 1767954481.8718064 1767954485.2681139 1767965138.1393619 1767965143.4655793 1767965147.434867 1767965148.9427965 1767965156.3537724 1767965167.2213993 1767965169.49993 1767970290.6593683 1767970292.970802 1767970298.57375 1767970299.585969 1767970337.0942743 1767970372.4892268 1767976666.6998365 1767976673.101222 1767976675.6020813 1767976679.096784 1767976683.9167645 1767976687.3609555 1767976713.1541333 1767976719.0766773 1767976725.1059823 1767978117.2996187 1767978120.0221531 1767978122.7937603 1767978123.5929458 1767978129.2806196 1767978141.6026158 1767978142.2001743 1767978146.1618307 1767979940.4418714 1767979943.6162307 1767979945.0338674 1767979946.6955743 1767979949.2711825 1767979955.3020587 1767979962.6219144 1767979967.7086596 1767982298.8471909 1767982300.1005816 1767982303.920526 1767982307.4450893 1767982311.7769759 1767982313.248131 1767982316.173381 1767982324.9440858 1767982325.6764736 1768045869.2330077 1768045870.236356 1768045872.2891514 1768045874.5468063 1768045881.3387985 1768045884.8452904 1768045889.1161494 1768045897.4951403 1768045902.8267422 1768048025.6877735 1768048027.7286327 1768048029.5608556 1768048032.5990238 1768048044.1846335 1768048050.7798657 1768048062.4111714 1768048065.024833 1768053088.504781 1768053113.4159126 1768053117.7720275 1768053144.3447492 1768053146.5680668 1768053147.6142244 1768053159.8059928 1768053169.9699647 1768053172.8624737 1768053292.9160326 1768053294.911726 1768053296.1000555 1768053299.749482 1768053300.7807405 1768053302.7820969 1768053313.845262 1768053317.4048727 1768053330.3916922 1768053588.9192967 1768053589.8108206 1768053595.3978446 1768053614.1973078 1768053615.303289 1768053615.9164264 1768053627.2831788 1768053639.0435984 1768056937.9889069 1768056943.7953987 1768056976.7951229 1768057046.8843918 1768057085.6750104 1768057101.4190998 1768057109.3534727 1768057119.7842429 1768057136.5627928 1768079666.113722 1768079668.6683514 1768079673.4090157 1768079675.4893627 1768079685.4717195 1768079685.8670487 1768079690.291896 1768079692.9432077 1768079697.3771555 1768086168.1487443 1768086176.3513515 1768086177.216495 1768086177.898571 1768086179.6137946 1768086182.7242186 1768086192.3760135 1768086192.740066 1768086212.396135 1768134697.2728767 1768134704.8010283 1768134707.7121792 1768134708.0560768 1768134711.1750917 1768134713.4217865 1768134713.7260768 1768134715.5332298 1768134728.5465925 1768294912.787784 1768294915.6571844 1768294916.5206225 1768294917.7396455 1768294920.193792 1768294928.9164357 1768294930.5203264 1768294931.5069704 1768294943.4769967 1768308426.7526467 1768308431.2754452 1768308432.647019 1768308435.5231614 1768308439.2533436 1768308441.8660333 1768308447.0069115 1768308460.593248 1768324698.3590894 1768324700.4846914 1768324751.4691803 1768324765.183994 1768324772.6904168 1768324782.8927166 1768324798.4914553 1768324839.4870424 1768324874.4531574 1768384225.4799273 1768384229.7895231 1768384230.484599 1768384233.816662 1768384238.3189883 1768384248.4386628 1768384252.7716544 1768384261.2794209 1768384806.177688 1768384809.5460305 1768384811.4714494 1768384816.6815825 1768384819.9323728 1768384828.6584098 1768384830.7775512 1768384831.721024 1768384838.19614 1768393401.9596107 1768393405.5755694 1768393406.0980704 1768393406.9103317 1768393414.240275 1768393420.344335 1768393423.9467418 1768393424.9939027 1768393946.0471222 1768393947.9344432 1768393948.3867533 1768393956.1279247 1768393956.8507793 1768393957.677266 1768393964.51897 1768393969.2088404 1768393979.8658965 1768406697.5229118 1768406700.0978663 1768406708.7858956 1768406710.7479894 1768406711.659276 1768406714.616408 1768406717.5029907 1768406718.8020518 1768407432.1623812 1768407433.9276476 1768407438.4175367 1768407446.9722466 1768407451.619536 1768407452.932411 1768407455.5550284 1768407461.7541678 1768407470.464264 1768466929.7111862 1768466930.7620823 1768466939.288962 1768466949.7309234 1768466955.0143619 1768466958.2070162 1768466967.4488463 1768551779.1706276 1768562169.41472 1768562181.1047812 1768562189.7693236 1768562190.8138013 1768562197.070462 1768562200.7975888 1768562202.7073588 1768562205.321664 1768562208.3421023 1768610272.5089388 1768610273.9870481 1768610274.6940825 1768610277.9353135 1768610285.045674 1768610290.080227 1768610296.824196 1768610306.0538583 1768648520.2463694 1768648524.3537803 1768648526.0771394 1768648529.4067469 1768648534.5302858 1768750756.6713378 1768750760.8883185 1768750762.2632756 1768750763.0123136 1768750763.9212747 1768750769.8994906 1768750772.5732853 1768750777.4850461 1768752413.340801 1768752420.6023462 1768752422.6215243 1768752425.7867491 1768752427.6385326 1768752429.650268 1768752431.0732105 1768752441.6148021 1768752447.8566244 1768754200.131358 1768754211.6892462 1768754212.3077621 1768754216.445737 1768754220.9125214 1768754225.1230843 1768754225.6267507 1768754245.372674 1768796002.133248 1768796010.3023002 1768796011.5949295 1768796015.0323164 1768796015.8145432 1768796019.2814276 1768796026.593093 1768796031.6583393 1768796033.0877004 1769188837.0375812 1769188837.786761 1769188847.6208885 1769188851.0616503 1769188854.4203012 1769188859.236143 1769188871.306891 1769356115.074438 1769356117.2475653 1769356138.9818916 1769356139.6534898 1769356182.5385997 1769356183.954588 1769356185.6475754 1769356198.3801432 1769431198.390828 1769431201.5240662 1769431206.2080142 1769431206.6666946 1769431207.3521287 1769431209.8815796 1769431211.4100068 1769431213.8480275 1769431217.1288738 1769520574.57131 1769520580.9615748 1769520583.5518386 1769520584.6905546 1769520585.5634441 1769520599.9041538 1769520600.6451283 1769520627.5367892 1769520670.975549 1769599648.6679952 1769599655.1322901 1769599664.7568235 1769599666.4479232 1769599667.6139998 1769599682.9860744 1769599684.0950832 1769601234.0402722 1769601238.249395 1769601244.869996 1769601245.8162582 1769601257.4308686 1769601257.9740627 1769601260.8389282 1769601263.5695539 1769601271.478781 1769602947.2968462 1769602955.2546017 1769602959.1448636 1769602963.4101026 1769602970.7160242 1769602973.4823887 1769602981.6378336 1769602989.1562142 1769608598.3435633 1769608604.2349756 1769608604.601876 1769608605.4494705 1769608611.9154606 1769608617.0367196 1769608624.0631845 1769608627.4674208 1769608640.567906 1769610568.8423088 1769610570.6535783 1769610572.2760155 1769610574.9860072 1769610586.6524737 1769610584.3325677 1769610585.0414965 1769610603.931985 1769610612.5651 1769613447.7525485 1769613452.023495 1769613455.6614032 1769613474.061038 1769613477.762277 1769613522.2723105 1769613574.9480097 1769613575.9668584 1769613618.426645 1769726028.804288 1769726032.290003 1769726034.8757539 1769726041.8972003 1769726044.0577905 1769726045.1911438 1769726055.1641352 1769754949.819708 1769754950.1370707 1769754954.8530273 1769754958.0237353 1769754960.5883057 1769754966.0287259 1769754972.351571 1769754974.738888 1769754977.4281905 1769788282.907655 1769788288.5253084 1769788289.849481 1769788293.4059806 1769788295.6611738 1769788308.423529 1769788312.2817266 1769858473.3065324 1769858484.3433414 1769858555.512316 1769858647.5416012 1769858704.5140238 1769858713.3436747 1769858778.3269293 1769858802.0247488 1769858808.7230027 1769941971.4940948 1769941972.732963 1769941977.5641046 1769941982.1623034 1769941982.645791 1769941987.1513543 1769941988.775115 1769941990.5303235 1769950644.8137155 1769950646.2848487 1769950650.8295712 1769950652.0341804 1769950653.6078181 1769950660.5014696 1769950663.2128892 1769950670.5772336 1769950681.001842 1770017224.4015572 1770017226.0972135 1770017227.5026927 1770017231.749207 1770017242.5412765 1770017252.5441816 1770017271.3818393 1770029567.1518002 1770029570.340307 1770029573.6867454 1770029564.3587599 1770029577.2411828 1770029579.9578333 1770029583.1690521 1770029584.482004 1770029593.8162978 1770035028.269459 1770035041.1115882 1770035049.301453 1770035056.7874146 1770035063.4050725 1770035065.1114447 1770035065.5057907 1770035066.744156 1770035070.5860257 1770051243.1616974 1770051250.1983073 1770051251.8492804 1770051252.817322 1770051253.8113017 1770051261.6732495 1770051263.4817977 1770051287.4125712 1770051294.594631 1770054466.1206534 1770054467.1777632 1770054473.0102155 1770054474.1452157 1770054475.1106331 1770054477.808786 1770054483.3615644 1770054489.1622334 1770054493.8870437 1770155681.8264794 1770155688.659341 1770155691.0762267 1770155691.5853927 1770155693.353376 1770155701.8069544 1770155776.465049 1770155813.0368989 1770155847.1930277 1770156004.0932982 1770156009.3996131 1770156012.5004926 1770156014.5202863 1770156019.0435586 1770156023.4328444 1770156024.366795 1770156029.4199026 1770156036.9079852 1770198504.7005956 1770198505.974699 1770198510.613558 1770198516.2578535 1770198519.501817 1770198520.6840563 1770198522.328126 1770198523.844168 1770216381.141068 1770216384.9809282 1770216386.078784 1770216388.4733496 1770216397.7242239 1770216398.7499428 1770216405.7132208 1770216407.6655917 1770216464.6069107 1770285838.4310648 1770285839.4047208 1770285845.1482618 1770285847.8905082 1770285841.2767158 1770285852.6968825 1770285861.5700352 1770285864.8976052 1770285866.8076255 1770286841.6262429 1770292963.8278131 1770292966.564227 1770292977.1111255 1770292978.987983 1770292983.425502 1770292985.7778904 1770292992.654737 1770293005.2807176 1770293727.1439166 1770293736.492512 1770293742.9712944 1770293748.1470556 1770293750.9539392 1770293753.1042962 1770293754.1672068 1770293755.9334252 1770293762.1849937 1770294177.6031017 1770294179.2221286 1770294182.409861 1770294185.4034204 1770294189.954195 1770294192.2262456 1770294195.2364454 1770294209.3209252 1770294216.7605686 1770296074.3093114 1770296079.5112505 1770296085.0671687 1770296089.0901968 1770296091.5357335 1770296093.746994 1770296103.4383368 1770296115.1115165 1770296116.7188926 1770299387.0234706 1770299393.734676 1770299396.5552564 1770299397.9449227 1770299398.405942 1770299406.1220129 1770299411.0808227 1770299418.005087 1770304628.2581263 1770304632.1874857 1770304635.5848792 1770304637.4246569 1770304645.8792233 1770304652.500186 1770304796.5059683 1770304805.3266668 1770304805.9559672 1770306998.81128 1770352891.2765408 1770352956.2453735 1770352986.6446555 1770353015.8254614 1770353024.4290829 1770353034.2017062 1770353118.7308602 1770353204.512918 1770353218.492321 1770367607.3939998 1770367610.0111365 1770367614.45688 1770367615.195527 1770367615.6579452 1770367618.4807427 1770367627.2286937 1770367641.6742887 1770367688.8227878 1770375402.595021 1770375403.2182865 1770375406.9050174 1770375407.8124533 1770375411.0714655 1770375418.803763 1770375419.6336913 1770375426.5908537 1770375438.3355699 1770377679.8791206 1770377685.893547 1770377691.212522 1770377694.2193422 1770377700.6231124 1770377707.430232 1770388325.7926264 1770388332.1394527 1770388335.5754883 1770388338.1641219 1770388485.2298472 1770388486.7889037 1770388498.7128625 1770388510.505477 1770388524.7809443 1770448313.438776 1770448313.9616911 1770448318.2289886 1770448319.6247897 1770448320.5280318 1770448321.4971566 1770448326.5257752 1770448328.488793 1770448349.434152 1770474541.5718706 1770474662.913524 1770474669.9453278 1770474672.0780892 1770474675.1842391 1770474678.9146457 1770474687.7994618 1770474688.8756824 1770474691.3726463 1770474692.9100966 1770481605.699769 1770481608.6086423 1770481611.768069 1770481613.7110043 1770481624.7046242 1770481630.5988204 1770481631.8143861 1770481637.0272915 1770482484.29333 1770482491.0655518 1770482497.2632189 1770482497.7695203 1770482498.5569618 1770482502.8524082 1770482505.567013 1770482508.9287205 1770482525.3033104 1770488366.9155667 1770488370.9018245 1770488372.2807295 1770488380.6067863 1770488380.9800029 1770488384.2862618 1770488384.7730534 1770488387.3612244 1770547755.0958505 1770547759.2344968 1770547760.8083112 1770547764.0160139 1770547767.344153 1770547769.2391427 1770547775.804789 1770547787.0251117 1770552981.288764 1770553003.9997299 1770553069.368204 1770553083.7589478 1770553087.3663883 1770553088.7641938 1770553093.710568 1770553094.2635589 1770553127.7866013 1770630887.801219 1770630892.8695138 1770630895.7021675 1770630897.280305 1770630898.801555 1770630909.526364 1770630962.881308 1770630966.585008 1770630973.0093026 1770639812.003858 1770639817.971794 1770639830.878849 1770639886.5446465 1770639892.9692142 1770639894.882578 1770639896.724656 1770639904.0340664 1770639918.555993 1770666463.2497134 1770666489.4294336 1770666494.062041 1770666543.0114794 1770666596.8524406 1770666637.062504 1770666660.894903 1770678196.9051228 1770678200.1169786 1770678203.065707 1770678293.564291 1770678296.2945912 1770678299.3110435 1770678306.325338 1770678318.2274911 1770678330.3257508 1770713495.7730114 1770713496.5848763 1770713497.807587 1770713498.528954 1770713507.7146904 1770713515.1544588 1770713517.8683257 1770713540.7203977 1770808063.4899719 1770808066.430682 1770808070.9095547 1770808073.9356825 1770808075.619688 1770808077.9274998 1770808093.0801852 1770808095.7556472 1770808891.1125565 1770808892.6134186 1770808898.3738124 1770808900.2658844 1770808901.484776 1770808909.4623446 1770808912.6182282 1770808916.8051906 1770808917.5748165 1770809447.4234073 1770809452.9602368 1770809453.6279988 1770809454.0772502 1770809455.1354978 1770809455.6678789 1770809456.6628273 1770809465.8118029 1770809469.5300505 1770810357.3477256 1770810359.343377 1770810362.88448 1770810363.456319 1770810371.1891587 1770810377.7186735 1770810392.244661 1770810406.1654177 1770899096.5793927 1770899098.3827033 1770899101.0838323 1770899102.4842598 1770899104.6827645 1770899111.809342 1770899112.9919648 1770899128.6597016 1770899248.5425107 1771076341.0126917 1771076343.506212 1771076350.479432 1771076351.6451955 1771076356.9553094 1771076366.3930233 1771076377.9620905 1771153613.0499876 1771153615.8472834 1771153620.339606 1771153633.8619168 1771153650.6205938 1771153687.2132227 1771153708.54045 1771153716.4352381 1771164876.0520263 1771164879.5962496 1771164880.594281 1771164884.0660386 1771164886.7604036 1771164904.1516867 1771164906.802209 1771164908.281534 1771165042.0703905 1771165045.7845407 1771165046.2814014 1771165047.8980622 1771165061.7444115 1771165066.7939172 1771174013.7134352 1771174015.9087002 1771174018.5526137 1771174020.0801136 1771174022.5137017 1771174027.8996327 1771174030.041202 1771174031.6948006 1771174038.2379742 1771175143.8134773 1771175149.462427 1771175151.9771097 1771175153.8716705 1771175157.0586224 1771175159.955862 1771175161.3851736 1771175295.0077727 1771175296.0930247 1771175300.7326233 1771175301.8456702 1771175303.9392393 1771175306.2821484 1771175309.090323 1771175318.9579391 1771175322.8382182 1771176996.9813175 1771177000.1674964 1771177002.6654875 1771177004.0820394 1771177011.4292345 1771177014.6017056 1771177017.5282974 1771177021.4518795 1771177024.6343913 1771185405.2020059 1771185407.9832363 1771185451.4425006 1771185466.3495464 1771185500.8092175 1771185539.0877485 1771185591.724145 1771185598.1286225 1771185614.1913784 1771244458.7711375 1771244660.7247722 1771244684.6490598 1771244694.3202388 1771244735.967286 1771244842.5954037 1771245183.3800526 1771245497.0590835 1771245644.0315454 1771600012.0328515 1771600018.626791 1771600020.4096375 1771600021.169344 1771600023.745423 1771600028.3680377 1771600028.8611665 1771600038.381504 1771600042.4843132 1771684030.1196742 1771684031.4314518 1771684033.397595 1771684034.3962631 1771684036.2810757 1771684045.215912 1771684053.1180193 1771684054.5356603 1771757003.813362 1771757005.1222928 1771757006.111422 1771757007.1642048 1771757017.1231 1771757021.1513972 1771757028.3927412 1771757030.9026449 1771764363.7003086 1771764364.442254 1771764365.4441075 1771764370.843027 1771764382.209699 1771764468.0461407 1771764493.6582198 1771780294.343606 1771780296.5097165 1771780298.4102716 1771780299.0157566 1771780308.3770611 1771780309.7407043 1771780314.8731542 1771780321.8025336 1771780324.5329354 1771837751.3228168 1771837756.767008 1771837760.2879758 1771837769.8369215 1771837770.2048807 1771837772.8549726 1771837788.6489344 1771839299.4875984 1771839305.4016466 1771839307.9862158 1771839308.9755557 1771839310.5828793 1771839322.6886103 1771839323.2381954 1771839325.3454525 1771865784.6298401 1771865786.3726418 1771865787.318743 1771865803.3110325 1771865811.3406887 1771972820.8536546 1771972821.5067422 1771972840.4580994 1771972846.1839893 1771972884.3953075 1771972886.8935175 1771972892.4252405 1771972902.1194937 1772004121.2945533 1772004122.7917647 1772004124.9790232 1772004129.7317517 1772004134.1553736 1772004140.8575795 1772004142.5861886 1772004147.0769281 1772039635.139008 1772039636.0414748 1772039639.855896 1772039648.0528839 1772039651.6689503 1772039654.9362936 1772039660.0298471 1772039667.3506672 1772097086.5031183 1772097098.1678927 1772097111.1263285 1772097117.7405796 1772109463.553514 1772109466.3407483 1772109480.4852076 1772109481.6438973 1772109484.0316198 1772109485.8141325 1772109494.0484235 1772125617.511287 1772125620.4649448 1772125620.9415054 1772125625.5994627 1772125633.153215 1772125651.902158 1772125654.4224913 1772125794.3522947 1772125796.7602608 1772125799.6996412 1772125812.3675652 1772125813.0661526 1772125813.6645544 1772125816.1068468 1772183828.892642 1772183832.5869255 1772183835.152446 1772183843.5205145 1772183852.0932834 1772183859.433871 1772183868.0199094 1772280404.2078578 1772280404.69581 1772280407.464592 1772280409.17338 1772280410.9133086 1772280413.3649797 1772280421.0677361 1772280423.5847754 1772295578.4514158 1772295580.894601 1772295581.7305021 1772295582.7096155 1772295583.8931496 1772295588.8290505 1772295589.741979 1772295599.709021 1772295602.4200597 1772297271.8931916 1772297272.796662 1772297276.1779351 1772297281.0048177 1772297287.5373304 1772297289.1350865 1772297290.1080134 1772297296.3202076 1772297945.7492647 1772297949.3261893 1772297951.851947 1772297953.4251385 1772297961.0872998 1772297962.237692 1772297968.548078 1772297976.193011 1772298793.4816813 1772298801.7994263 1772298804.3413033 1772298816.8963897 1772298819.4326506 1772298821.0167608 1772298821.461571 1772299046.3897016 1772299050.552813 1772299058.2212174 1772299059.2914927 1772299066.873316 1772299073.6742685 1772299786.0516667 1772299787.7142491 1772299788.997042 1772299795.5276682 1772299806.997665 1772299816.2948682 1772300068.4680173 1772300074.1381872 1772300075.076055 1772300080.9735785 1772300090.6366215 1772300094.4405732 1772300530.293983 1772300534.5245671 1772300544.3982706 1772300548.0080998 1772300552.9624085 1772300570.5476682 1772300932.9506423 1772300936.419418 1772300941.5620844 1772300943.8668664 1772300964.111361 1772328442.6384232 1772328443.3122764 1772328444.0383964 1772328454.9741364 1772328455.7685978 1772328456.676097 1772328464.6393201 1772328468.4323661 1772328473.5744238 1772351413.8249013 1772383323.1008327 1772383329.9349842 1772383331.386728 1772383332.146261 1772383333.3551807 1772383335.9397588 1772383337.1753385 1772383342.6916847 1772383348.262124 1772383821.0542176 1772383823.6034913 1772383825.878503 1772383826.176101 1772383827.88893 1772383832.7978203 1772383842.736432 1772383847.1015575 1772383850.6285467 1772454124.9551854 1772454151.6994405 1772454233.6164246 1772454250.9810789 1772454289.6593218 1772454310.1916735 1772454394.1553872 1772454398.7474406 1772454562.4118385 1772713528.9459274 1772713544.885845 1772713545.9493737 1772713650.5365589 1772713668.5272853 1772713706.8689525 1772713719.4318998 1772714313.3804982 1772714634.441328 1772764959.4377325 1772764964.7828572 1772764967.7785013 1772764970.1141407 1772764973.2195883 1772764984.4319944 1772765126.5007186 1772787175.2837644 1772787179.9415834 1772787186.6077988 1772787186.8416843 1772787187.15247 1772787198.6093411 1772787204.9290109 1772787209.0141208 1772809991.9257238 1772809992.8731363 1772809997.4999394 1772810001.7896464 1772810005.7003007 1772810006.7824953 1772810008.0087657 1772810021.9598997 1772810085.6787655 1772905492.0566986 1772905498.5148373 1772905501.3888893 1772905503.641356 1772905509.1755662 1772905511.2718103 1772905521.3545146 1772905530.8175929 1772967830.8897622 1772967834.800573 1772967835.3464074 1772967838.857526 1772967842.5253148 1772967849.667246 1772967857.5036254 1772967858.8364737 1772967861.6873882 1772984316.610907 1772984318.0384367 1772984361.0834682 1772984389.3850882 1772984403.9999688 1772984440.3767893 1772984445.8218489 1772984475.5563498 1772984492.1683066 1772986406.4741344 1772986410.3417528 1772986411.5768716 1772986412.093717 1772986415.0171423 1772986419.9504926 1772986423.3365016 1772986428.4155931 1773059898.1412277 1773059935.98033 1773060041.6970541 1773060054.2331545 1773061011.8323395 1773061314.2291052 1773061380.437499 1773061414.112351 1773061436.1397038 1773145071.5631673 1773145145.0533056 1773145299.1570978 1773145317.0917435 1773145361.1160474 1773145431.9178998 1773145447.205267 1773145574.0338075 1773145864.4072688 1773145867.958283 1773145870.8676126 1773145873.084005 1773145874.1125846 1773145883.6725326 1773145885.4807596 1773145903.0986722 1773158716.4506488 1773209697.8553648 1773209704.3154953 1773209707.7399786 1773209708.3590436 1773209712.3566198 1773209715.2477503 1773209716.6491067 1773209717.4205372 1773209727.397243 1773243569.3923771 1773243579.9017727 1773327509.4352446 1773327512.384058 1773327517.778177 1773327519.3600962 1773327525.9831553 1773327530.2042542 1773327531.6041195 1773327533.6185954 1773342044.3975337 1773342047.2800632 1773342047.7213204 1773342051.3167768 1773342070.793869 1773422305.7551844 1773422306.8472383 1773422307.260621 1773422307.861149 1773422309.2151213 1773433616.940507 1773433617.8015654 1773433618.1402817 1773433618.8915472 1773433620.1571712 1773433636.6559062 1773433685.9827228 1773433769.0329056 1773433793.9351418 1773436822.279561 1773496529.2417994 1773496531.6484542 1773496534.2970135 1773496540.2494192 1773496542.5848348 1773496556.6658444 1773496557.646253 1773508559.8649719 1773508564.2156093 1773508565.6863298 1773508566.2063718 1773508567.2482834 1773508576.2386317 1773508579.5570102 1773508588.7930615 1773526091.7305086 1773526094.7576952 1773526099.7316136 1773526101.0460598 1773526102.468852 1773526107.369785 1773526110.1862388 1773526115.115235 1773526116.7317014 1773531665.82529 1773531666.3771586 1773531666.8047104 1773531667.4920819 1773531668.6569617 1773533178.7996001 1773533179.23835 1773533180.4051468 1773533180.702309 1773533326.7572465 1773533328.9965563 1773533329.9414577 1773533330.16112 1773533330.968805 1773533332.2384558 1773533342.702904 1773533347.4469643 1773533359.1699326 1773663912.872022 1773663917.414473 1773663920.1189451 1773663923.0031617 1773663929.1929984 1773663934.9318051 1773663938.2461636 1773663945.447361 1773663948.7060542 1773923127.7739248 1773923140.1724749 1773923171.917618 1773923216.2591379 1773923290.2481165 1773923351.7546723 1773923387.236511 1773924177.1936789 1773924247.1279826 1774116622.3116958 1774116626.685884 1774116631.36191 1774116634.4917035 1774116636.007466 1774116646.396959 1774116649.9595244 1774122611.4872355 1774122612.0778387 1774122617.113013 1774122623.748957 1774122624.2195117 1774122627.254311 1774122631.9285514 1774122633.3222346 1774122643.6527953 1774123449.8178384 1774123455.4579494 1774123456.9654434 1774123460.0542014 1774123468.123217 1774123470.894454 1774123473.1936722 1774123615.9096093 1774123617.057869 1774123618.2236078 1774123620.8008826 1774123627.442505 1774123629.493724 1774123630.8533177 1774123636.9826944 1774123643.869337 1774125064.8095303 1774125068.9721835 1774125072.345307 1774125073.838626 1774125078.0622084 1774125078.9767094 1774125084.6969202 1774125096.4611142 1774165455.8215635 1774165456.3814306 1774165458.2990782 1774165464.2143352 1774165468.043054 1774165468.4514842 1774165473.8426971 1774165484.6675928 1774165490.0981755 1774173607.1004112 1774173625.73087 1774173709.2447455 1774173744.2978158 1774173764.3022842 1774173786.8334386 1774173805.8676367 1774173809.644974 1774173889.2116613 1774179069.3753922 1774179134.4216766 1774179147.1273863 1774179151.712217 1774179172.1551447 1774179178.1981494 1774179230.1370556 1774179231.5304184 1774179279.552431 1774183796.2095468 1774183796.7006834 1774183797.983253 1774183801.156979 1774183802.2355645 1774183811.2893264 1774183822.0530934 1774183824.9673326 1774191717.4712055 1774191718.3463879 1774191721.421663 1774191725.149967 1774191727.2233143 1774191732.0443897 1774191735.698229 1774191737.403349 1774268525.0307348 1774268526.373377 1774268527.2372344 1774268537.347842 1774268572.9748507 1774268604.4843407 1774268639.346915 1774268687.8962731 1774268712.863652 1774527755.3994756 1774527759.1027331 1774527759.7701855 1774527766.0900435 1774527768.3282084 1774527775.64296 1774527847.611203 1774527868.9990609 1774527892.2252436 1774873655.527003 1774873666.6517813 1774873668.6499827 1774873672.1687975 1774873674.125012 1774873676.3726752 1774873680.1577253 1774873685.824583 1774875895.7435656 1774875899.2784672 1774875902.3986785 1774875905.0208993 1774875905.594042 1774875909.4528077 1774875914.4021006 1774875918.060093 1774876701.5632007 1774876702.4201756 1774876704.384826 1774876706.8571978 1774876710.02423 1774876719.672133 1774876732.959303 1774876733.9153466 1774876736.3431017 1774880824.6487224 1774880825.8109229 1774880832.7772617 1774880833.8427367 1774880836.6255288 1774880839.2399762 1774880841.9262152 1774880851.3003206 1774881363.6655617 1774881367.4241898 1774881372.1439908 1774881374.0549834 1774881385.053962 1774881389.3328514 1774881393.963817 1774881394.7380836 1774881400.2569187 1775231066.5313282 1775231119.1918912 1775231129.4662294 1775231177.3856704 1775231196.8174288 1775231214.4311275 1775231297.0647576 1775231334.9891703 1775231338.6613705 1775232630.3965228 1775232640.9850821 1775232648.2935927 1775232767.7549682 1775232769.345424 1775232773.8040285 1775232779.7044146 1775232795.4553795 1775232797.4147656 1775234999.7864647 1775235006.9964473 1775235009.0573256 1775235017.2879946 1775235271.5614855 1775235283.7214663 1775235285.2803273 1775235306.43616 1775241999.4150372 1775242123.5503404 1775242126.3104184 1775242143.7351582 1775242210.8824239 1775242221.0156906 1775242396.821857 1775242449.6782231 1775242917.341283 1775312885.8533607 1775312892.5294592 1775312916.0363607 1775312923.368411 1775312928.9784486 1775312930.7954159 1775312939.4274864 1775318471.3398528 1775318474.8361926 1775318479.0674982 1775318483.5954714 1775318484.0378363 1775318488.6386657 1775318489.0825813 1775319309.9300623 1775319312.934079 1775319315.2263668 1775319319.3970985 1775319376.0797794 1775319379.438265 1775319387.2380319 1775319400.7464328 1775319407.4777956 1775322237.4052963 1775322237.8814938 1775322241.1159406 1775322242.6739452 1775322247.1877317 1775322250.2518969 1775322251.8086483 1775322254.6575804 1775322268.3851843 1775381179.7835803 1775381180.9311726 1775381187.0079129 1775381187.4863334 1775381190.7522886 1775381197.9658923 1775381202.1844847 1775381202.9599855 1775402318.8826947 1775402321.8426278 1775402322.2964063 1775402323.9786787 1775402325.1313353 1775402325.7507243 1775402334.9895287 1775402342.0844438 1775402350.98194 1775462783.7941637 1775462786.3998082 1775462791.9899664 1775462797.2010918 1775462817.1794748 1775462854.5869381 1775462868.0183764 1775462878.52322 1775464091.0254564 1775464097.9112625 1775464102.6998096 1775464107.9394155 1775464109.435578 1775464111.759231 1775464115.5834837 1775464125.0957696 1775464128.2511601 1775466263.7154732 1775478270.6244485 1775478281.4753964 1775478288.554501 1775478310.7563734 1775478311.489444 1775478314.0560038 1775478327.5556254 1775478336.92283 1775478403.020345 1775492855.630969 1775492865.677199 1775492871.0985777 1775492913.0388153 1775492914.2092292 1775492916.9741492 1775492924.6610458 1775492936.5097935 1775494313.6594186 1775494318.0464292 1775494319.3477843 1775494320.2532756 1775494321.7131712 1775494327.6839483 1775494328.640422 1775494331.6578414 1775494365.9452775 1775551071.1644187 1775551074.4337926 1775551079.0472832 1775551083.2774842 1775551085.7583468 1775551090.7644863 1775737435.2773647 1775737438.7938755 1775737439.635319 1775737447.1997576 1775737453.2451897 1775737457.3720942 1775737460.0834644 1775737479.3835547 1776083164.7412949 1776083166.0760298 1776083172.9341552 1776083173.2533977 1776083177.1253726 1776083177.7411783 1776083180.209172 1776083263.7892222 1776083286.7843368 1776342281.6236448 1776342324.3168411 1776342367.6482716 1776342394.2922654 1776342405.7413058 1776342434.293768 1776342520.3987992 1776343739.3542569 1776343741.3466635 1776343749.4476836 1776343754.4298182 1776343755.0325396 1776343769.2924407 1776343775.1753948 1776343828.6562598 1776343854.564765 1776344633.014359 1776344637.3803189 1776344644.7009134 1776344655.25513 1776344660.5385182 1776344822.1057956 1776344856.866423 1776344870.981311 1776344900.9728403 1776344911.9065537 1776344991.6632652 1776345011.4701812 1776345020.397637 1776345020.6287603 1776494589.0378575 1776494589.6638293 1776494594.2250469 1776494594.5081048 1776494594.7770948 1776494598.6157148 1776494600.1698377 1776494607.1387196 1776494618.9425201 1776496070.773081 1776496074.2403238 1776496082.1198342 1776500548.6272972 1776500550.8541093 1776500552.396871 1776500561.6513975 1776500561.9745164 1776500563.704424 1776500564.6515799 1776500569.7395694 1776500573.3939784 1776513541.9652882 1776513542.9883733 1776513543.6343865 1776513544.158197 1776513553.7539227 1776513556.4451942 1776513559.8873482 1776513565.521203 1776513566.9828477 1776515776.2957382 1776515778.0470045 1776515783.6812472 1776515788.2738 1776515788.6813345 1776515789.7096481 1776515791.667823 1776515799.8251324 1776515806.7688403 1776521436.0148668 1776521440.1395595 1776521442.0799096 1776521444.7308571 1776521446.7341077 1776521450.7588751 1776521456.820204 1776521457.2570791 1776521462.973624 1776525730.7254903 1776525731.5157208 1776525732.2143252 1776525735.2291906 1776525739.6271024 1776525745.47407 1776525747.4315937 1776525748.1166008 1776530796.9598818 1776530834.8976426 1776530864.183933 1776530904.1523414 1776530906.5831788 1776530917.970012 1776530957.2714953 1776530958.9008594 1776530975.3914669 1776602223.330836 1776602243.389179 1776602275.7255769 1776602286.458232 1776602300.1333187 1776602300.6690238 1776602301.1831164 1776602314.4517279 1776602954.1821818 1776602955.5293558 1776602959.3396807 1776602962.849875 1776602970.9934807 1776602971.7103772 1776602974.2212696 1776602980.194477 1776688037.9927702 1776688046.959831 1776688056.5510614 1776688061.4678383 1776688066.5871947 1776688113.6823382 1776688153.5094948 1776688265.2301989 1776688298.7890384 1776732662.0460057 1776732665.8318326 1776732666.489607 1776732670.0498426 1776732671.863852 1776732676.685261 1776732678.7114165 1776732685.426199 1776732686.6590118 1777121007.3493567 1777121011.3679473 1777121015.6233008 1777121017.4013567 1777121021.4683287 1777121025.4130871 1777121033.1263654 1777121034.594803 1777121036.4797184 1777124043.4091897 1777124045.9143817 1777124049.68581 1777124050.627295 1777124050.8497925 1777124063.542509 1777124065.626547 1777124068.4933844 1777125999.781397 1777126000.7849672 1777126001.1903439 1777126003.6446674 1777126009.2178264 1777126014.702515 1777126015.3995945 1777126026.6103077 1777126027.3554199 1777134789.5697863 1777134794.8848414 1777134798.203008 1777134802.584216 1777134805.801339 1777134810.2188227 1777134810.6067982 1777134815.5159879 1777287340.259427 1777287342.5806 1777287394.4660351 1777287403.198653 1777287414.5551069 1777287429.0213566 1777287435.7822795 1777287438.907569 1777287443.075804 1777293571.550748 1777293575.1182587 1777293575.6059732 1777293579.0007524 1777293579.7482665 1777293582.7539198 1777293588.9424148 1777293591.4147072 1777363065.5634713 1777363068.047331 1777363068.8651152 1777363069.2966669 1777363073.8316216 1777363082.3102756 1777363084.8887331 1777363085.6754465 1777808351.4681172 1777808352.1735678 8qdoh4kv6mk64eto5hywkgq6bis46ui 740342 740341 2026-05-03T11:44:58Z Pywikibot-oauth 29170 740342 wikitext text/x-wiki 1717938323.983468 1717938325.9381392 1717938327.6745121 1717938345.265466 1717938346.1106002 1717938350.5920074 1717938353.0482574 1717953288.8608625 1717953293.9055603 1717953292.1927369 1717953292.2962074 1717953294.2398 1717953312.240725 1717953316.1704223 1717953317.268496 1717953318.2313948 1717997567.7045777 1718009302.675245 1718009303.0268657 1718009305.1731467 1718009309.4585795 1718009328.7909298 1718009333.1985834 1718009383.5844293 1718009385.1342936 1718009386.2813547 1718009388.613266 1718009398.8815582 1718009408.5800366 1718009439.4752173 1718009607.9868848 1718009609.3225954 1718009610.7008185 1718009611.3111014 1718009614.7206109 1718009619.8805332 1718009633.8648026 1718009654.4389236 1718013612.7444367 1718013615.4898036 1718013616.8618758 1718013617.578818 1718013628.183184 1718013640.3193917 1718013648.6140828 1718013688.6004112 1718016374.1180348 1718016375.439417 1718016376.2004616 1718016380.8626587 1718016404.172379 1718016421.9062774 1718017148.5199714 1718017151.167183 1718017152.579374 1718017154.8653364 1718017156.385661 1718017173.681575 1718017176.016188 1718017200.9282327 1718018372.899415 1718018659.6671212 1718018660.4208403 1718018662.0027812 1718018664.5138478 1718018682.755611 1718018686.6985393 1718018704.9304743 1718021145.9996097 1718021148.1332645 1718021148.8790848 1718021151.64248 1718021152.3035438 1718021183.5700638 1718021188.2089362 1718021194.6740658 1718021912.815989 1718021915.923219 1718021917.6584659 1718021919.7312863 1718021921.5385063 1718021940.462804 1718021956.3317823 1718021965.900075 1718022675.5741732 1718025361.51236 1718025362.1419137 1718025363.549265 1718025365.794714 1718025367.0023723 1718025381.4007874 1718025386.8869488 1718025390.1932719 1718025420.3657703 1718026112.6940236 1718026114.5253518 1718026116.9373848 1718026119.4845717 1718026120.817934 1718026123.051878 1718026136.3197055 1718026140.8453245 1718026145.4011593 1718026163.7837195 1718029773.4831073 1718029774.3958006 1718029775.4855509 1718029776.785981 1718029781.6460838 1718029783.6814554 1718029795.5788717 1718029798.7532082 1718029803.2993777 1718029839.3786342 1718088780.7319355 1718088783.1151495 1718088785.5244112 1718088786.0638566 1718088790.2916877 1718088800.889361 1718088810.884886 1718088814.4438264 1718088814.2049983 1718098333.8518348 1718098334.492469 1718098335.9334357 1718098338.9121008 1718098351.4070423 1718098360.9338825 1718098363.3991063 1718098388.9819927 1718098502.7364287 1718098783.731209 1718098785.4471197 1718098788.7367818 1718098790.8354266 1718098793.2723055 1718098796.6948872 1718098804.8592188 1718098809.4647124 1718098817.6042728 1718098830.9912333 1718099231.027644 1718099234.4692736 1718099235.052649 1718099236.3166866 1718099255.4998035 1718099256.26313 1718099258.3496053 1718099280.7436473 1718111091.2757294 1718111094.233729 1718111096.5565636 1718111103.6016734 1718111108.502889 1718111116.434526 1718111142.8487227 1718114486.9111218 1718114488.8848925 1718114492.5300286 1718114505.449661 1718114508.5768387 1718114513.384398 1718114557.7346702 1718120951.709677 1718120954.2943966 1718120955.4632218 1718120962.1287925 1718120969.2791822 1718120975.7068148 1718120983.0374181 1718120998.2290237 1718167739.5514672 1718167741.361884 1718167744.7950137 1718167745.417929 1718167757.8886697 1718167765.954192 1718167775.6431954 1718168307.9341757 1718168309.0630918 1718168310.747874 1718168311.1551263 1718168311.824176 1718168328.8877923 1718168329.1683598 1718168332.8930173 1718168334.318795 1718170628.1888835 1718170631.9050498 1718170632.746343 1718170634.9433777 1718170636.927007 1718170654.1273365 1718170656.173754 1718170657.3509326 1718170659.621824 1718170887.5461829 1718204836.6592476 1718204841.3648756 1718204842.685919 1718204846.9438975 1718204855.260591 1718204857.186586 1718204866.7263968 1718204946.7416897 1718206153.2249477 1718206154.0826955 1718206156.8141618 1718206166.206424 1718206170.4542036 1718206189.6599023 1718206193.0557477 1718206209.0511112 1718206394.678831 1718206399.1699252 1718206403.0055304 1718206416.9370177 1718206422.3951635 1718206426.1713943 1718206481.3811412 1718207931.4095542 1718207936.0076962 1718207937.0227344 1718207938.648662 1718207951.2997663 1718207962.9280522 1718207970.8110354 1718207986.3565502 1718270206.6322293 1718270208.396686 1718270209.8471525 1718270212.1417482 1718270212.8735263 1718270225.4295442 1718270229.9387715 1718270233.8893638 1718270249.8745449 1718278524.21183 1718278526.7441041 1718278529.0446036 1718278530.6510525 1718278533.3816156 1718278541.910818 1718278549.337206 1718278552.886615 1718278569.0438437 1718287801.4408586 1718287803.4836357 1718287804.9007418 1718287808.1488054 1718287808.4518878 1718287822.867423 1718287826.7880008 1718287855.8315911 1718297766.9014719 1718297767.4670007 1718297769.5687966 1718297772.4048378 1718297777.3219984 1718297790.6331906 1718297792.4884562 1718297795.184645 1718302176.0627773 1718302177.5144217 1718302178.8230069 1718302194.8260093 1718302201.1135983 1718302206.1642869 1718302218.1861632 1718302219.3047798 1718336718.1941583 1718365268.4987638 1718365269.641732 1718365270.5083897 1718365271.728583 1718365274.002535 1718365291.8463135 1718365294.8545115 1718365301.4906988 1718365315.3869822 1718365505.726982 1718448902.0726335 1718448904.9608967 1718448905.7732697 1718448907.9344823 1718448914.5668309 1718448928.1298878 1718448928.9807873 1718448930.3379903 1718448930.331011 1718454069.948404 1718454073.9749632 1718454076.1152103 1718454077.8158538 1718454080.9835265 1718454093.4771943 1718454096.5800304 1718454103.1700485 1718454102.7764804 1718456201.0723767 1718456201.771049 1718456204.8900273 1718456223.2486367 1718456226.5021062 1718456230.0176444 1718456234.8390899 1718459952.221978 1718459952.9086947 1718459954.7137554 1718459957.011037 1718459957.8085938 1718459970.2652814 1718459973.344553 1718459980.3818643 1718459980.794316 1718467221.4074085 1718467223.9760313 1718467225.2852647 1718467226.4534006 1718467227.5403411 1718467238.6423047 1718467245.6560714 1718467249.314935 1718467250.7741568 1718470146.792804 1718470150.8378944 1718470152.434354 1718470155.6266527 1718470156.4344456 1718470167.0206006 1718470170.511652 1718470178.847092 1718470180.4159863 1718477476.8284774 1718477478.9504488 1718477480.2399306 1718477483.233796 1718477495.1057756 1718477505.138055 1718477508.230259 1718477509.4137573 1718479108.4211571 1718515652.3761146 1718515657.7088983 1718515658.6416357 1718515660.4557362 1718515660.9534945 1718515671.641125 1718515676.942455 1718515679.664335 1718515691.044993 1718516411.4838226 1718517061.1334279 1718517064.36412 1718517066.351747 1718517067.9823635 1718517070.1635823 1718517078.9948351 1718517089.3589723 1718517090.8877964 1718517687.892127 1718517688.3769186 1718517689.950249 1718517694.0879142 1718517702.0483367 1718517711.8517518 1718517713.7155662 1718517722.782742 1718517837.657381 1718531410.3578694 1718531413.2360501 1718531413.7496576 1718531414.6364017 1718531415.9476206 1718531419.6359458 1718531428.8146567 1718531435.9711194 1718531436.9587393 1718531438.3370793 1718536061.2031472 1718536064.3968182 1718536065.9384258 1718536068.7385488 1718536072.2085466 1718536082.2379959 1718536083.1270118 1718536090.3124897 1718536093.951949 1718541954.3876143 1718541956.0022333 1718541956.941455 1718541957.5561693 1718541958.0702612 1718541975.0538633 1718541980.5246894 1718541981.3653994 1718542008.4670186 1718636379.6202543 1718636381.1092196 1718636382.0674365 1718636383.378525 1718636390.121835 1718636402.868477 1718636403.469083 1718636414.6279762 1718636448.2600234 1718638626.856629 1718638627.783421 1718638633.7572656 1718638635.0484576 1718638639.7305253 1718638645.3893626 1718638654.4974911 1718638655.9837 1718638656.509398 1718638675.2028575 1718730999.6562796 1718731002.9459317 1718731004.5080602 1718731005.8755076 1718731020.2701058 1718731025.4137113 1718731062.9800775 1718744024.6903846 1718744025.9837515 1718744028.94272 1718744030.9566023 1718744042.0349915 1718744050.1404827 1718744054.1966991 1718773967.0703459 1718773968.0080812 1718773970.3090975 1718773970.3435733 1718773971.079693 1718773995.5025868 1718773996.6876066 1718773997.3720262 1718773999.1633239 1718886004.5143113 1718886004.9995835 1718886009.3486383 1718886011.502742 1718886020.6752129 1718886021.2545116 1718886026.1455162 1718886031.2892191 1718886086.0996928 1718961575.2159712 1718961577.248636 1718961579.266859 1718961584.0054727 1718961585.5416117 1718961596.9843493 1718961608.302492 1718961614.6889198 1718961616.3877892 1718968603.7748945 1718968607.0690818 1718968607.9450648 1718968609.6774971 1718968612.2656987 1718968614.1366622 1718968625.3810906 1718968629.4604537 1718968641.5719926 1718968681.1329365 1718968682.261607 1718968683.5617135 1718968684.106964 1718968688.5447705 1718968690.5267246 1718968697.4459171 1718968705.5173635 1718968709.6065145 1718968741.2709723 1719060263.9319239 1719060265.1403356 1719060266.340842 1719060269.3961422 1719060283.8203645 1719060288.0482583 1719060294.2719293 1719060297.7118967 1719061420.802171 1719061422.6048853 1719061423.7334316 1719061425.0414433 1719061433.5318284 1719061439.1523328 1719061445.326212 1719061461.978173 1719061880.7222142 1719061882.552266 1719061884.4065745 1719061884.964865 1719061892.874263 1719061895.8984957 1719061904.7980072 1719061914.2728014 1719061944.038279 1719062152.8865724 1719067189.487594 1719067190.1866813 1719067191.4030895 1719067193.725632 1719067202.8044908 1719067204.7037551 1719067216.787414 1719067229.7356596 1719067909.3010273 1719067911.3103838 1719067911.9389522 1719067912.7892058 1719067915.1173623 1719067926.6543186 1719067935.485951 1719067939.5406718 1719067944.3043442 1719145650.792378 1719145652.1845744 1719145652.8407626 1719145655.4633198 1719145657.428794 1719145666.624809 1719145677.3898938 1719145679.7491868 1719145690.3449385 1719151844.203008 1719151847.829848 1719151852.1046011 1719151856.2039797 1719151862.2484019 1719151867.8664546 1719151870.772161 1719151874.5618086 1719155047.2379646 1719155049.7190826 1719155050.821006 1719155051.5469427 1719155054.5321891 1719155064.8799038 1719155067.3398724 1719155073.8036382 1719155105.9072046 1719155891.186099 1719155894.1741269 1719155894.702736 1719155901.2573574 1719155905.927427 1719155918.0138943 1719155919.6432118 1719155949.5647342 1719171489.1549513 1719171489.9106762 1719171494.0356336 1719171499.7293534 1719171510.372511 1719171513.5158641 1719171519.8476577 1719171642.8685024 1719242605.7242808 1719242606.3999186 1719242608.330176 1719242609.081625 1719242620.0841155 1719242626.622884 1719242632.7130654 1719242646.629726 1719242788.043846 1719246563.8788664 1719246565.1245325 1719246565.523271 1719246567.5838163 1719246568.6878052 1719246574.7292345 1719246582.940538 1719246594.208879 1719246624.0132446 1719246646.4423573 1719255511.0461993 1719255514.2679725 1719255514.8902783 1719255533.9694326 1719255535.7519948 1719255561.5833826 1719255600.0428908 1719257206.277582 1719257207.5948808 1719257208.5332088 1719257212.2003682 1719257229.9038367 1719257240.7883828 1719257257.7664475 1719257412.6408064 1719298510.1701732 1719407566.2328699 1719407567.4559505 1719407569.9593308 1719407575.7728598 1719407593.567035 1719407593.8329344 1719407631.4438539 1719407673.9627962 1719490893.0374126 1719490894.4612806 1719490897.4321358 1719490899.1701922 1719490902.0502431 1719490917.8597374 1719490927.1120436 1719490982.7129836 1719491028.2046077 1719658980.759956 1719658982.1867814 1719658983.3265736 1719658984.8375463 1719659006.3760595 1719659008.233768 1719659038.1869128 1719659053.6470735 1719661510.9347355 1719661511.5324843 1719661512.9147425 1719661515.870037 1719661516.9088366 1719661518.3048205 1719661522.8482125 1719661535.0718417 1719661567.8569882 1719661598.4858406 1719662437.4862742 1719662439.475177 1719662440.519351 1719662443.9609544 1719662448.8941991 1719662457.9865503 1719662477.7968066 1719662501.4439266 1719662505.5643024 1719664452.6829715 1719664453.517005 1719664456.0385885 1719664456.5487328 1719664460.285548 1719664473.429615 1719664480.2840178 1719664517.5621357 1719664520.4785154 1719673276.6724093 1719673278.5594711 1719673280.2434716 1719673283.1366646 1719673309.672662 1719673317.2102964 1719673336.6643648 1719673370.991012 1719677715.7309895 1719677719.557844 1719677720.011801 1719677725.3283927 1719677734.3811567 1719677734.578576 1719677747.991037 1719677779.4570024 1719677795.2211277 1719677944.121938 1719677947.0342872 1719677952.954374 1719677957.6550858 1719677967.588756 1719677985.8510435 1719678003.8949015 1719678018.1203597 1719678487.7313912 1719678490.4696572 1719678491.3958938 1719678496.5990489 1719678498.2562368 1719678509.3167796 1719678516.4686754 1719678547.306207 1719678562.7342274 1719678689.5803418 1719678690.270386 1719678691.1140273 1719678692.451933 1719678692.9669394 1719678705.9989023 1719678720.7839897 1719678754.5303414 1719678801.921674 1719679196.1161187 1719679702.7277484 1719679704.884765 1719679705.6118531 1719679707.7974935 1719679710.1557584 1719679723.6905518 1719679734.038543 1719679770.7907984 1719679818.6751614 1719680158.875494 1719680161.4341679 1719680162.4199877 1719680164.2232368 1719680183.9374866 1719680187.663405 1719680221.9159675 1719680235.5601242 1719680708.6096206 1719680709.4699545 1719680715.619083 1719680732.265567 1719680736.4170895 1719680736.932406 1719680738.4691868 1719680769.77296 1719680780.7043424 1719688562.565408 1719691360.4738486 1719691361.0909443 1719691362.8320959 1719691367.614035 1719691371.838276 1719691382.4826112 1719691388.392583 1719691424.3254218 1719691437.8558855 1719691910.8170524 1719691911.8364177 1719691915.5230062 1719691918.5787246 1719691955.9031386 1719691959.146336 1719691960.9298646 1719691962.9000072 1719691972.0988379 1719691975.7922778 1719691986.8865433 1719691997.4708471 1719692032.7521966 1719692053.8494172 1719738721.563538 1719738723.4371152 1719738723.5942557 1719738724.4970622 1719738725.1963532 1719738734.7646797 1719738743.3773084 1719738751.5416954 1719738786.870921 1719738799.769176 1719739777.2650309 1719739778.3169456 1719739779.938744 1719739783.1745806 1719739797.9755929 1719739804.799515 1719739835.4536004 1719739865.0080156 1719740957.4115753 1719740963.4064841 1719740968.0831258 1719740970.203206 1719740970.6358604 1719740983.8126853 1719740998.5138216 1719741026.1598616 1719741034.488669 1719742149.5130558 1719742150.1764612 1719742151.1998274 1719742152.22184 1719742155.7655077 1719742158.0400107 1719742174.5534735 1719742189.252219 1719742216.181138 1719742226.4915278 1719742546.869991 1719742549.0948424 1719742550.334266 1719742552.9718885 1719742554.7338808 1719742557.8963645 1719742562.7436194 1719742573.797242 1719742619.708493 1719742625.194558 1719745259.5410144 1719745261.4883902 1719745262.6057122 1719745263.6752841 1719745286.9080038 1719745289.0641947 1719745328.0916362 1719745349.6027694 1719752167.7671835 1719754514.0760689 1719754514.9256747 1719754516.3132918 1719754536.5157144 1719754539.9762955 1719754596.3803048 1719754599.82873 1719760133.5291634 1719760134.2539825 1719760140.7209601 1719760151.467467 1719760154.502864 1719760158.4525688 1719760203.6156392 1719760312.8365571 1719824939.5139902 1719824940.8243928 1719824942.4226027 1719824943.062349 1719824944.140916 1719824961.630868 1719824966.442031 1719825010.3715134 1719825038.4196992 1719830109.6348207 1719830110.8810217 1719830111.422231 1719830112.20914 1719830117.347853 1719830121.7140367 1719830130.0074415 1719830146.1857674 1719830188.7506788 1719830204.6365817 1719836492.969278 1719836494.6186726 1719836494.6443224 1719836496.742013 1719836523.180333 1719836638.187037 1719836688.0424724 1719839171.3108604 1719841448.5217607 1719841450.4651759 1719841452.4335685 1719841454.0664856 1719841473.2166533 1719841481.9279184 1719841536.3091393 1719841562.9440105 1719841673.1179872 1719842581.891341 1719842582.7098043 1719842584.522381 1719842586.1380289 1719842590.3433087 1719842610.3571744 1719842611.8049507 1719842666.4960856 1719842712.4774687 1719847508.6857514 1719847509.3525307 1719847510.6604362 1719847528.2575898 1719847536.007867 1719847606.7301466 1719847623.6523726 1719847741.2522056 1719993027.9122436 1719993029.0979218 1719993030.7474782 1719993032.9349523 1719993050.6589947 1719993060.693691 1719993090.2760384 1719993113.2468278 1720004323.8437161 1720004327.9480708 1720004329.254853 1720004333.9301894 1720004357.6504843 1720004375.2054017 1720004385.1751335 1720004400.7738714 1720006892.066838 1720018543.5467849 1720018544.207071 1720018548.11588 1720018550.9547276 1720018552.9559293 1720018553.8820128 1720018567.2008767 1720018573.33096 1720018636.918563 1720018725.3587666 1720020012.144781 1720020015.209173 1720020018.3855567 1720020018.6251917 1720020021.5434313 1720020041.9798167 1720020046.4386566 1720020090.0238922 1720020103.3348067 1720095888.5110908 1720095894.3936722 1720095898.7496827 1720095914.40975 1720095932.5874338 1720095936.788244 1720095992.5494847 1720095997.6260736 1720096068.6120174 1720096142.000555 1720113393.4267867 1720113393.9954696 1720113394.5428329 1720113395.3445654 1720113410.3803558 1720113416.6878488 1720113463.1089094 1720113474.4864273 1720178905.152999 1720264983.1573057 1720264984.7289004 1720264991.1436696 1720264996.5567691 1720265012.2315247 1720265016.7129402 1720265054.6461728 1720265068.45914 1720268414.5574844 1720268456.0846417 1720268457.8302736 1720268459.1110072 1720268462.6664674 1720268464.0216665 1720268485.1050167 1720268489.3534741 1720268530.802286 1720268547.8900359 1720269854.7584038 1720269858.775462 1720269869.3305595 1720269883.1087477 1720269894.0281174 1720269941.6018271 1720269968.3731894 1720281992.4461744 1720281996.0212932 1720281997.9298186 1720281999.0800533 1720282019.8583853 1720282022.7717931 1720282064.3937569 1720282089.4292839 1720282979.3870595 1720282980.70788 1720282981.8929803 1720282983.583917 1720283006.0254724 1720283021.6412923 1720283063.0679586 1720283076.427101 1720283146.0883942 1720283148.7675686 1720283150.0253646 1720283151.398002 1720283166.69723 1720283172.1708326 1720283237.126988 1720283251.5744073 1720347929.6809032 1720347930.5536857 1720347931.5924973 1720347933.0147126 1720347950.2618797 1720347962.1530797 1720348006.9132035 1720348019.4262323 1720355684.7588637 1720355688.9037657 1720355690.8150926 1720355694.2809334 1720355695.3445952 1720355734.9794688 1720355736.9226706 1720355738.5939343 1720355743.7059312 1720355745.7016191 1720355746.3900065 1720355755.6159356 1720355767.7396665 1720355817.6985352 1720355825.541677 1720362535.8521876 1720362539.7770073 1720362541.6408083 1720362542.6222377 1720362543.7119908 1720362546.4056485 1720362566.697002 1720362575.465509 1720362600.9130247 1720362615.262974 1720429846.2601721 1720429851.2459822 1720429853.3674114 1720429856.5243065 1720429860.0182812 1720429866.6442153 1720429867.3754158 1720429928.3265693 1720429965.3328753 1720430013.1402261 1720437341.4689736 1720437343.9167843 1720437348.867465 1720437350.1222687 1720437367.6023335 1720437368.6960366 1720437438.242683 1720437464.6256282 1720441473.9818053 1720441475.3272228 1720441476.3406963 1720441478.8895733 1720441479.7282956 1720441491.7034128 1720441500.936126 1720441578.124788 1720441600.7416165 1720508030.779806 1720508034.720798 1720508035.3622708 1720508037.7463782 1720508042.6894598 1720508044.9407175 1720508056.5278485 1720508062.3510454 1720508121.945859 1720508141.6810555 1720723150.2531953 1720723152.0034084 1720723153.4047132 1720723154.3587787 1720723155.6927114 1720723160.229176 1720723181.9268985 1720723192.2047257 1720723210.7215843 1720723229.6315517 1720871823.769133 1720871824.6627216 1720871825.5460563 1720871826.1253562 1720871827.6929772 1720871844.2957664 1720871850.666975 1720871928.7215664 1720871949.1951418 1720874547.0185373 1720969499.4983323 1720969501.5016003 1720969503.052767 1720969503.8038156 1720969508.6751223 1720969518.3859234 1720969527.5263083 1720969531.275996 1720969576.9711084 1720969596.8234456 1721145106.3810425 1721145106.911887 1721145108.9086998 1721145111.0675786 1721145113.3288937 1721145132.1856048 1721145140.2767642 1721145184.267049 1721145216.828088 1721305209.7903893 1721305213.3784285 1721305214.8135803 1721305215.1242259 1721305221.4533546 1721305238.789072 1721305264.8440905 1721305426.81819 1721305485.3038528 1721379138.4693382 1721379141.1253483 1721379142.7651606 1721379147.1431847 1721379162.4500675 1721379163.127343 1721379224.7573798 1721379237.1989245 1721406788.94073 1721406793.3566136 1721406795.4649131 1721406831.6017003 1721406852.2838242 1721406869.9846714 1721406899.919841 1721406912.9084558 1721488399.1502702 1721488401.390993 1721488404.5964868 1721488406.046398 1721488407.5913856 1721488418.311122 1721488424.1997676 1721488427.7730663 1721488504.7484682 1721488525.566082 1721496591.4225824 1721496594.500339 1721496599.4931395 1721496601.0831027 1721496602.28746 1721496625.780832 1721496643.8198357 1721496652.6943266 1721496667.8110917 1721565388.2224255 1721565388.8312228 1721565390.4933197 1721565390.6252916 1721565391.4323554 1721565393.3962724 1721565407.8343496 1721565420.1680913 1721565454.1642957 1721565478.4827487 1721574226.567986 1721574228.2650464 1721574229.2136655 1721574230.5642936 1721574234.564178 1721574240.1197848 1721574253.3657877 1721574304.1189775 1721574326.7021465 1721576971.9406857 1721576974.0474002 1721576977.079685 1721576977.6775851 1721576978.880478 1721576992.2445269 1721577004.8481708 1721577048.988025 1721577065.7160993 1721578295.2526956 1721578298.8162296 1721578299.1991253 1721578300.0686698 1721578302.5384188 1721578304.4118538 1721578321.6604548 1721578324.0449317 1721578440.7719927 1721578479.2742977 1721580017.9542558 1721580019.2280664 1721580020.8857832 1721580021.9373968 1721580024.704843 1721580052.6509597 1721580055.1464536 1721580089.107742 1721580100.2947977 1721650930.8342354 1721650933.5484543 1721650947.093313 1721650950.4567475 1721651005.5955992 1721651481.2783616 1721651559.495912 1721674276.1086073 1721674278.513514 1721674281.290339 1721674283.639705 1721674288.2609918 1721674305.2613103 1721674311.6022947 1721674338.3399606 1721674362.5169706 1721718314.6641715 1721718316.3952758 1721718319.9596653 1721718325.270815 1721718343.0735612 1721718347.1543753 1721718393.3736312 1721718415.8997684 1721910087.0128944 1721910090.1194847 1721910091.1340427 1721910110.6500988 1721910114.7352288 1721910330.7036839 1721910348.0335593 1721910916.43767 1721910918.2617009 1721910918.9612172 1721910920.6596704 1721910923.7422097 1721910927.19123 1721910944.6203954 1721910956.9221787 1721911128.751464 1721911158.3159337 1721912339.4567149 1721912343.9946265 1721912346.3522673 1721912360.1102629 1721912367.2019844 1721912498.5683155 1721912514.5882468 1721987679.8209765 1721987700.8785155 1721987702.3838289 1721987704.0928543 1721987708.7966185 1721987717.842413 1721987731.7817628 1721987743.6735523 1721987755.6558464 1721987776.7134225 1722009022.164185 1722009023.5288925 1722009026.1637077 1722009026.7395837 1722009028.985516 1722009044.6780007 1722009057.0580795 1722009102.7638628 1722009128.2290883 1722011314.4384987 1722011317.0866902 1722011323.0479326 1722011329.1328695 1722011330.6450853 1722011345.1625364 1722011363.1033154 1722011367.4035761 1722011409.0791147 1722011437.4246118 1722083518.8362637 1722083520.1399145 1722083521.4632201 1722083524.563069 1722083525.399378 1722083531.860173 1722083547.3582554 1722083597.739719 1722083631.056319 1722085677.4967399 1722085679.4884202 1722085679.9108589 1722085688.0438259 1722085689.9928405 1722085695.2417676 1722085703.2458162 1722085704.999607 1722085764.2840428 1722085781.77046 1722095979.0386055 1722095980.0828955 1722095981.032806 1722095983.626646 1722095984.984198 1722095999.230339 1722096005.4851468 1722096059.4911695 1722096071.8962398 1722100536.4515254 1722100539.4221365 1722100542.5566645 1722100544.0714207 1722100545.4322321 1722100564.5859752 1722100566.014869 1722100615.2521555 1722100643.20215 1722149013.9013457 1722149015.767447 1722149016.9281707 1722149017.5551665 1722149018.389765 1722149027.7650094 1722149036.6032405 1722149045.8741276 1722149104.189777 1722149107.7602215 1722155521.3010793 1722155522.2409105 1722155523.7213988 1722155528.6886873 1722155542.7506652 1722155672.0228562 1722155681.411199 1722157757.768678 1722157761.2266603 1722157778.985823 1722163153.3098607 1722163155.395189 1722163156.2589576 1722163174.1873949 1722163180.5309765 1722163215.403878 1722163256.7635057 1722165512.4110675 1722174536.351207 1722174538.6816373 1722174539.4588919 1722174542.5816898 1722174554.7090611 1722174566.311441 1722174613.8005621 1722174624.0169446 1722242650.1910343 1722242651.618098 1722242654.8140075 1722242656.8090444 1722242658.0002894 1722242674.320784 1722242686.162094 1722242716.8431196 1722242745.6145446 1722244920.0555336 1722244922.2241864 1722244924.9416807 1722244978.3089955 1722244980.8752184 1722244981.2110722 1722244982.3846757 1722244999.3691816 1722245010.4448211 1722245063.3641362 1722245069.0751998 1722246449.8212233 1722252759.7456295 1722252763.403051 1722252765.549591 1722252766.465789 1722252781.9618795 1722252789.6683662 1722252834.8567882 1722252846.037899 1722255909.6763847 1722255912.8771906 1722255917.6040564 1722255933.7703345 1722255940.327634 1722255954.335101 1722256095.858246 1722256171.285489 1722256831.1770594 1722258348.349472 1722258350.8484561 1722258351.7297373 1722258355.2572641 1722258358.1317604 1722258378.183615 1722258391.2777941 1722258439.4786732 1722258458.8920097 1722258747.4458783 1722258748.4867609 1722258752.014911 1722258753.2976851 1722258776.3941264 1722258780.365012 1722258828.8410087 1722258856.5356793 1722266281.154913 1722266283.9311874 1722266286.8559344 1722266287.742336 1722266295.0477529 1722266307.5419962 1722266318.8401215 1722266368.3401177 1722266390.6271458 1722267600.9945157 1722267613.3273997 1722267615.6415715 1722267629.8862028 1722267646.5896106 1722267701.1500127 1722267710.70105 1722268060.4806027 1722269798.3464947 1722269799.06523 1722269803.173558 1722269805.006228 1722269806.2911599 1722269826.6815646 1722269830.208888 1722269887.5769298 1722269901.5990813 1722271938.8490343 1722271940.654133 1722271942.2798257 1722271945.2685156 1722271954.4873567 1722271960.5731528 1722271970.4570544 1722272032.061529 1722272039.191121 1722285046.130592 1722285053.13936 1722285050.3333395 1722285054.3085802 1722285072.0029724 1722285089.6750438 1722285139.903813 1722285151.8262293 1722286556.865009 1722286557.787786 1722286559.4217722 1722286560.8234248 1722286566.8899527 1722286568.9542303 1722286587.239442 1722286591.8479471 1722286650.8837395 1722286670.6716592 1722287811.6441412 1722287814.9035003 1722287820.1875937 1722287823.045072 1722287833.3711326 1722287840.8799474 1722287847.3387156 1722287910.7062888 1722287933.3743765 1722346814.3318946 1722346815.3555522 1722346816.5075314 1722346819.4600098 1722346823.8913958 1722346840.9840052 1722346852.0418973 1722346901.757354 1722346936.7027256 1722353424.4027636 1722353455.8584085 1722353475.5796852 1722353476.625922 1722353478.1814175 1722353479.2128873 1722353505.9890182 1722353514.8506823 1722353529.4125268 1722353573.6369014 1722357662.938199 1722357666.437098 1722357669.5629907 1722357674.895245 1722357683.176122 1722357690.5174837 1722357699.457917 1722357752.839344 1722357818.180176 1722515375.864221 1722515382.8253098 1722515441.5088887 1722515444.4139678 1722515473.4817035 1722515494.5169368 1722515550.025863 1722515705.8252301 1722515774.3782804 1722703516.6385605 1722703523.7818244 1722703524.9584632 1722703528.4236033 1722703541.265863 1722703551.7528145 1722703605.1434042 1722703617.285085 1722861260.5651002 1722861274.2730734 1722861282.853552 1722861327.648218 1722861328.7040336 1722861341.652638 1722861366.9537344 1722861368.267377 1722861411.8933487 1722957515.2378643 1722957517.9867597 1722957521.0474427 1722957525.66109 1722957526.7974 1722957542.7545946 1722957550.747547 1722965766.1494622 1722965766.9189792 1722965769.080297 1722965775.1350465 1722965776.436328 1722965802.8354776 1722965805.2216742 1722972230.2460885 1722972232.4957376 1722972238.2461116 1722972239.310697 1722972262.4442368 1722972265.5337362 1723119651.996149 1723119671.2755423 1723119674.4815555 1723119675.2286239 1723119700.4973273 1723119732.5752525 1723119837.029244 1723125159.3408673 1723125161.305721 1723125164.671936 1723125185.5027578 1723125201.5769818 1723125281.7976792 1723127344.0401428 1723127345.030985 1723127347.6052334 1723127348.2776942 1723127355.4759185 1723127366.430687 1723127376.5442193 1723127502.6736557 1723127507.9946194 1723127511.6701398 1723127524.3709917 1723127555.333043 1723127624.4754634 1723129978.2325845 1723129980.065203 1723129989.2464702 1723129990.1236107 1723129996.6202312 1723130005.8243701 1723130021.1074052 1723130113.5195165 1723131899.804144 1723131902.20493 1723131905.102239 1723131908.9329078 1723131909.5538316 1723131934.1060607 1723131952.547817 1723132075.5102296 1723132076.8952231 1723132078.9014304 1723132080.5638356 1723132102.4776583 1723132117.5459423 1723132197.1211262 1723134185.454269 1723134186.0828547 1723134188.3349106 1723134189.4652045 1723134190.480767 1723134193.0541909 1723134220.2506118 1723134222.9765935 1723134307.4119363 1723135892.3347054 1723135893.8114343 1723135897.6299603 1723135903.8710804 1723135921.066215 1723135931.0387099 1723136009.1816049 1723136902.2131515 1723136903.9931657 1723136906.1799746 1723136908.3397403 1723136933.3292496 1723136934.7258308 1723137040.877315 1723193766.4798963 1723198497.489374 1723198503.6559103 1723198506.1072052 1723198506.6462848 1723198511.2412324 1723198523.283447 1723198540.268096 1723198601.4533756 1723293918.052099 1723293919.0126128 1723293921.7233214 1723293922.8796544 1723293924.7155743 1723293939.8329105 1723293957.6624916 1723294023.1734905 1723295716.4582942 1723295718.1176283 1723295719.1733673 1723295720.8703227 1723295731.279886 1723295742.4269278 1723295756.1501608 1723295824.8342354 1723296063.7411687 1723296066.0409968 1723296066.9913926 1723296068.4480395 1723296085.9844544 1723296101.2945962 1723296154.130692 1723297450.4546869 1723297453.313314 1723297454.6593533 1723297461.3677888 1723297464.9280722 1723297483.7273545 1723297489.243885 1723297555.934929 1723303640.0538623 1723303641.0859456 1723303666.7665021 1723303674.4819245 1723303792.3911774 1723307055.669447 1723307057.516665 1723307060.937572 1723307065.154463 1723307068.336204 1723307091.879684 1723307102.205826 1723307165.0516765 1723421891.6107564 1723421892.2079666 1723421895.6024501 1723421904.3759992 1723421905.757803 1723421926.5555098 1723422032.8409994 1723457214.2616053 1723457215.15762 1723457217.5868185 1723457254.1931028 1723457260.4853334 1723457313.550356 1723500944.139548 1723500947.844652 1723500950.5009212 1723500972.7893791 1723500986.8719485 1723501045.8168595 1723503249.5519896 1723503250.7019823 1723503252.239709 1723503256.149816 1723503282.5018637 1723503291.6707165 1723503344.7708678 1723617445.5637114 1723617446.120923 1723617447.710768 1723617452.9640238 1723617459.3619127 1723617479.1712415 1723617484.4352062 1723617573.3607473 1723639240.4812639 1723639242.4700098 1723639244.217371 1723639244.9857624 1723639250.0838876 1723639283.742886 1723639306.2462215 1723639394.4827173 1723724470.8341424 1723724471.7962675 1723724472.5649292 1723724483.1117017 1723724489.4274752 1723724504.6824448 1723724742.2423058 1723789488.737526 1723789491.9785106 1723789495.1937232 1723789507.179287 1723789523.8786826 1723789529.5911324 1723789585.4323795 1723969218.427382 1723969221.6018429 1723969222.467898 1723969226.3746696 1723969227.7480848 1723969244.946983 1723969259.1996505 1723969327.049781 1724070102.5254915 1724070104.030959 1724070106.3740706 1724070118.5323465 1724070172.053344 1724070490.7402184 1724143306.904538 1724143311.0641122 1724143311.7600024 1724143315.4748845 1724143317.400293 1724143319.5802855 1724143336.301159 1724143339.2931793 1724143433.1847665 1724158542.3415682 1724158543.136938 1724158545.9649029 1724158546.7066395 1724158551.6076107 1724158570.2962599 1724158577.4562912 1724158661.8227847 1724202592.9038768 1724202628.7645361 1724202629.7426107 1724202639.145731 1724202640.2604976 1724202644.7802536 1724202694.4860175 1724202703.172851 1724202742.1755662 1724320027.2917662 1724320030.2812905 1724320030.9599948 1724320034.4022193 1724320039.9547336 1724320064.6408205 1724320067.8799412 1724320155.4411907 1724322006.8179777 1724322017.021479 1724322100.0275319 1724326816.9750662 1724326835.2257452 1724326839.3397768 1724326858.9847226 1724329530.0523298 1724329531.5851007 1724329532.342777 1724329534.3340228 1724329538.6644125 1724329562.7337675 1724329568.038632 1724329693.312654 1724329728.0111637 1724339828.4843464 1724339832.2171478 1724339834.2105722 1724339836.9052422 1724339842.2160335 1724339853.4929526 1724339860.8692455 1724339927.5192857 1724339972.5675364 1724340171.2986777 1724675112.2099783 1724675112.7536762 1724675113.8609295 1724675130.883486 1724675142.509672 1724675455.240375 1724675476.4276843 1724678442.9240308 1724678443.7646422 1724678447.3701274 1724678450.5327325 1724678471.2342534 1724678481.0344825 1724678614.5176039 1724678662.635488 1724678840.4042537 1724678843.25312 1724678844.0742831 1724678845.7958224 1724678874.517959 1724678879.3479588 1724679030.4941568 1724679097.7171695 1724679895.7099562 1724679898.7889495 1724679900.2195878 1724679903.5279362 1724679921.7844772 1724679928.0266182 1724680045.960651 1724680117.7574298 1724740336.2182548 1724764054.1148956 1724764103.170195 1724764105.5358524 1724764109.538788 1724764111.6916456 1724764113.9705515 1724764139.067442 1724764156.787153 1724764158.9183803 1724764238.4044094 1724931783.1112685 1724931828.8406136 1724931831.20521 1724931839.6174808 1724931841.0950983 1724931846.149007 1724931877.815933 1724931883.4549878 1724931894.0296752 1724931917.710784 1725133164.072982 1725133164.7953568 1725133170.7556214 1725133188.4473302 1725133196.307781 1725133275.3370075 1725133289.371418 1725140712.2051272 1725140713.0222561 1725140716.4887998 1725140718.6381378 1725140720.004144 1725140722.1596622 1725140742.347565 1725140743.618021 1725140797.1206677 1725140803.9172254 1725200633.529623 1725200635.044884 1725200636.8651588 1725200641.4771197 1725200643.175392 1725200662.855143 1725200670.1966913 1725200712.189818 1725200725.6398485 1725200829.3296444 1725207335.0009885 1725207337.3394368 1725207367.0959451 1725207368.6036494 1725207370.6801124 1725207377.3880663 1725207384.7640123 1725207401.538926 1725207505.5956042 1725207507.5365038 1725208502.6187615 1725208505.7267725 1725208507.542662 1725208509.9724796 1725208534.7410796 1725208545.9173281 1725208588.1209402 1725208594.0258324 1725209079.5139468 1725209108.9646592 1725209109.9745634 1725209110.8624318 1725209112.8804767 1725209118.5993817 1725209193.2443478 1725209221.8756156 1725281554.7296872 1725281556.2016904 1725281558.0330102 1725281580.3035154 1725281584.1793041 1725281687.167911 1725281764.955561 1725300224.2238321 1725300225.9345813 1725300229.3170836 1725300230.516357 1725300256.3338172 1725300308.0946443 1725300319.4941478 1725300320.8204544 1725540715.3032386 1725540717.9711885 1725540719.1833887 1725540720.432735 1725540722.1555789 1725540749.0875998 1725540751.213678 1725540972.8921459 1725541015.92986 1725631426.7354417 1725631427.6936705 1725631428.2327724 1725631448.6708682 1725631463.0081913 1725631515.3664324 1725631557.198132 1725822506.3782604 1725822507.5937872 1725822511.661547 1725822512.4515877 1725822515.9412503 1725822535.2268958 1725822593.0592098 1725822598.4597292 1725822607.1766093 1725884435.798726 1725884436.3909311 1725884437.4291615 1725884469.482712 1725884481.8351278 1725884647.5585947 1725884675.1920853 1726143690.4869845 1726143691.3081863 1726143693.3989668 1726143694.4958773 1726143701.1455789 1726143712.3017654 1726143722.4283848 1726143981.2912416 1726144071.9595954 1726302858.4009302 1726675441.8821027 1726675447.1515436 1726675455.56139 1726675468.5214655 1726675479.9343245 1726675529.4341502 1726675578.1315203 1726734255.6599536 1726734258.0744572 1726734261.6568701 1726734263.415758 1726734271.322075 1726734284.6144738 1726734293.6049356 1726734342.2983801 1726734368.8190172 1726829047.453488 1726829048.2625833 1726829050.5636995 1726829053.7786524 1726829056.1417718 1726829059.8768687 1726829083.4874034 1726829086.4730258 1726829091.3235495 1726838086.3674679 1726838087.5454314 1726838090.5266967 1726838091.309051 1726838095.503319 1726838121.7484057 1726838162.286817 1726852924.4158013 1726852947.8678963 1726852969.8119648 1726907944.1144762 1726907946.9047077 1726907954.4580448 1726907957.356998 1726907970.7593565 1726907975.3553808 1726924569.5547562 1726924570.11676 1726924570.6655016 1726924578.9927793 1726924582.2498786 1726924584.8417032 1726924592.4838006 1726924599.1381044 1726924608.6165662 1727094178.8340871 1727094183.3336067 1727094187.5304337 1727094188.7281716 1727094190.2004 1727094197.5468636 1727094204.1370888 1727094213.1934218 1727094224.8191156 1727252538.2230966 1727252545.1595104 1727252559.3410785 1727252560.3491113 1727252585.4905877 1727252604.2638414 1727252611.335605 1727252619.5693839 1727252647.0808942 1727252666.8197966 1727355171.5528011 1727355172.1388216 1727355175.9172277 1727355179.5949962 1727355187.6415644 1727355189.9619722 1727355195.9563243 1727355209.6537554 1727355213.1416783 1727355738.2683496 1727355739.447531 1727355740.8816657 1727355743.0290265 1727355744.3655899 1727355754.689045 1727355768.3128917 1727355773.5655093 1727355789.0512674 1727356845.3867826 1727356849.4635057 1727356851.768166 1727356853.750152 1727356856.3031561 1727356857.9159436 1727356884.2286303 1727356893.986862 1727356913.6343558 1727357844.6776798 1727357847.1814015 1727357851.3251064 1727357863.0378542 1727357870.5985737 1727357881.012939 1727357912.1287177 1727358935.303634 1727358935.9912815 1727358939.3313124 1727358940.3998544 1727358946.4800787 1727358950.667642 1727358960.9032006 1727358974.1791952 1727359005.7682602 1727364185.5690017 1727364186.335221 1727364188.1669273 1727364191.111278 1727364197.9766107 1727364218.0347583 1727364224.4208484 1727364229.735253 1727698959.124807 1727698960.0979502 1727698961.8392282 1727698964.5413785 1727698973.0976288 1727698995.476023 1727699001.1445177 1727699001.8644443 1727951197.7174723 1727951205.6155488 1727951210.6008136 1727951211.924095 1727951214.3595564 1727951239.830181 1727951260.4132447 1727951282.1391022 1727951287.3107123 1727951295.984193 1727957717.7947898 1727957718.6923344 1727957719.9319725 1727957723.2567813 1727957732.4791858 1727957738.5735471 1727957757.3239744 1727957770.9410255 1727958071.3421822 1727958072.6552424 1727958073.4494936 1727958090.4808335 1727958092.377394 1727958098.803949 1727958119.8236375 1727958131.9921308 1728033605.927856 1728033610.166473 1728033618.1204672 1728033619.478822 1728033631.886684 1728033633.5909014 1728033647.518328 1728059474.6622338 1728059487.5971162 1728059514.2836185 1728059537.8234003 1728059539.5742385 1728059555.2033007 1728059577.58866 1728059591.8590653 1728122909.0253503 1728122911.2703123 1728122912.2143638 1728122914.4684803 1728122915.4730194 1728122922.2035043 1728122922.9835937 1728122933.4255273 1728122953.6694286 1728129579.751556 1728129580.3356383 1728129581.3151999 1728129582.1964667 1728129585.9221125 1728129596.659089 1728129602.1400926 1728129611.0264146 1728129613.638498 1728133448.9883578 1728133449.627583 1728133452.256095 1728133453.6784909 1728133457.0713844 1728133462.6810381 1728133480.493868 1728133484.297163 1728133484.900972 1728194810.3820596 1728194811.8586535 1728194812.9597461 1728194816.63949 1728194820.2523391 1728194824.9291325 1728194832.8092308 1728194835.9376342 1728194853.9915667 1728234031.697532 1728234033.8452804 1728234034.8792348 1728234036.522442 1728234038.732697 1728234046.88053 1728234057.2472894 1728234062.2539334 1728234066.9047368 1728303707.3891773 1728303708.2521691 1728303714.9815907 1728303722.5586314 1728303772.3002484 1728303773.1410623 1728303776.6379309 1728303786.609231 1728303836.3226495 1728303846.5049798 1728337169.0340455 1728337170.1327274 1728337174.211485 1728337191.5496802 1728337192.9797745 1728337194.4701893 1728337207.912653 1728537193.6512961 1728732945.4463923 1728732948.6507535 1728732952.2837873 1728732953.691373 1728732955.2932432 1728732956.524756 1728732968.339935 1728732970.5543928 1728732982.2182877 1728737744.7459152 1728737748.98257 1728737752.1383252 1728737761.0445974 1728737812.1413603 1728737818.6112876 1728737826.940009 1728737872.9231803 1728737875.5850608 1728743498.7469113 1728743499.9835532 1728743500.5865278 1728743504.0295928 1728743513.9563892 1728743516.4044924 1728743521.059433 1728743536.4969213 1728743539.457314 1728743942.3254461 1728743947.0616877 1728743948.5496256 1728743952.4485714 1728743956.8069415 1728743972.981716 1728743974.955076 1728743988.2777052 1728745978.289991 1728745979.4105432 1728745981.1054873 1728745981.9421353 1728745985.224251 1728745992.1692357 1728746008.6597588 1728746010.1733787 1728746063.5124123 1728746211.8122053 1728746213.9458363 1728746217.8126671 1728746218.3260763 1728746223.4439285 1728746235.339829 1728746237.54506 1728746240.7656617 1728746242.9190016 1728746253.7251363 1728833700.0260398 1728833701.4446497 1728833702.2353542 1728833703.9480202 1728833708.9518077 1728833713.0262654 1728833714.4510262 1728833723.400574 1728833731.5921385 1728833736.895667 1728835384.371322 1728835385.962284 1728835387.0517457 1728835387.7445607 1728835388.9590096 1728835392.4119325 1728835399.9746296 1728835407.122815 1728835417.8316333 1728835431.4600117 1728836544.9717374 1728836547.9728825 1728836549.3966005 1728836551.46428 1728836552.6611505 1728836564.7708545 1728836575.8413124 1728836577.6584494 1728836582.209422 1728920255.0991843 1728920258.0877094 1728920266.047279 1728920267.7859914 1728920269.8180747 1728920271.430736 1728920272.3737376 1728920275.7158494 1728920285.1150532 1728920313.6354492 1729006711.7335062 1729006718.0533266 1729006720.2043796 1729006723.6731513 1729006726.5683281 1729006733.0146976 1729006754.30765 1729006776.9883995 1729010354.851715 1729010356.3835125 1729010372.5242126 1729010386.5633569 1729010392.79671 1729010395.8405745 1729033820.8557181 1729033823.9684222 1729033826.6887953 1729033828.8346639 1729033829.7552333 1729033835.2953548 1729033851.8851895 1729033867.2496648 1729033873.9356413 1729092755.8003762 1729092757.4442213 1729092760.2669573 1729092762.2494287 1729092763.1737988 1729092776.6677477 1729092783.585181 1729092795.4211159 1729092802.884515 1729093404.8581364 1729093406.1022863 1729093409.6069078 1729093413.4827905 1729093415.0146415 1729093437.0040774 1729093443.9370294 1729093455.6258225 1729093917.3740594 1729093924.7103052 1729093926.2689004 1729093934.4847856 1729093939.4272058 1729093949.0355246 1729093972.820219 1729094446.2924614 1729094448.044019 1729094450.5190663 1729094452.3579662 1729094454.1246204 1729094455.875043 1729094467.1689668 1729094470.4615102 1729094494.8975074 1729094518.1359916 1729104871.5899901 1729104874.876859 1729104876.8862448 1729104877.7222195 1729104879.6530187 1729104887.6756997 1729104891.0999753 1729104907.2810287 1729104915.628079 1729257860.7060654 1729257865.0598102 1729257865.908288 1729257870.1832783 1729257884.2104728 1729257890.3658347 1729257893.8982866 1729257898.6145709 1729332868.8884962 1729332875.6134863 1729332877.9988463 1729332879.5559447 1729332893.679242 1729332894.9814157 1729332920.3224845 1729332947.9222736 1729332968.8512816 1729334085.642702 1729334088.3801568 1729334092.1009166 1729334092.9905782 1729334094.3209932 1729334098.021537 1729334103.7886531 1729334113.7123656 1729334126.603184 1729334133.2773445 1729339236.7112806 1729339237.2109628 1729339239.8039072 1729339241.923618 1729339245.3853216 1729339246.3951786 1729339250.5824714 1729339262.8487272 1729339267.2262473 1729339292.2161791 1729342907.005911 1729342912.4427733 1729342919.0908499 1729342920.2621865 1729342922.3985302 1729342932.4808924 1729342939.7966642 1729342947.7565434 1729342958.935519 1729345509.0483184 1729345510.2446895 1729345512.228264 1729345513.2745836 1729345515.4445262 1729345516.5309505 1729345523.1481001 1729345530.791648 1729345543.021134 1729345564.3512073 1729352269.5894463 1729352271.1257896 1729352272.4453163 1729352278.0577192 1729352281.2217155 1729352286.6776705 1729352298.173631 1729352299.0579467 1729352314.2006667 1729352316.07831 1729355762.6713998 1729355763.7223508 1729355767.140102 1729355768.0427616 1729355770.2150545 1729355779.3283195 1729355787.676488 1729355806.501878 1729358508.6128478 1729358509.3026485 1729358510.1842167 1729358513.0574265 1729358515.126321 1729358516.7900476 1729358525.60399 1729358529.4947524 1729358545.4960544 1729358552.3557 1729367046.3978016 1729367049.017654 1729367050.0929554 1729367051.2651315 1729367056.071756 1729367056.814972 1729367063.5559955 1729367071.520121 1729367080.6116037 1729412704.8927162 1729412706.355342 1729412708.0568678 1729412710.6722658 1729412715.3055286 1729412720.817641 1729412735.5620499 1729412740.1556945 1729412750.209623 1729506881.5077236 1729506882.998659 1729506885.2772717 1729506887.9168231 1729506889.3227882 1729506890.270235 1729506908.287083 1729506917.0852423 1729506922.2671366 1729506925.880165 1729562000.486412 1729562002.1365795 1729562003.450998 1729562005.5320075 1729562013.7140665 1729562014.851959 1729562027.823392 1729562030.9649224 1729562037.4399283 1729772628.024384 1729772632.1716542 1729772633.3096597 1729772641.8233664 1729772643.2488031 1729772652.314984 1729772667.7016115 1729772677.9223237 1729774190.9545734 1729774191.597862 1729774193.9808326 1729774202.2812762 1729774205.5565357 1729774211.2316782 1729774216.5960338 1729774227.0569327 1729774234.6505063 1729956626.8351767 1729956628.2261896 1729956630.6545267 1729956631.7810423 1729956632.7964118 1729956641.0736098 1729956646.7477207 1729956656.1438482 1729956677.1112947 1729963223.1188562 1729963225.7192516 1729963230.0806804 1729963236.5373201 1729963237.9832456 1729963238.6328769 1729963240.6313212 1729963249.340651 1729963252.4305904 1729963258.9741237 1730041013.5380948 1730041015.6442053 1730041026.0668254 1730041067.7284575 1730041076.675968 1730041087.8943112 1730041095.5179813 1730041129.9984517 1730041146.4527524 1730042544.7177842 1730042546.114285 1730042549.491665 1730042552.6548748 1730042554.1026793 1730042562.970534 1730042566.0576777 1730042566.737246 1730042578.9335535 1730044922.608126 1730044923.2814202 1730044926.6715765 1730044933.286997 1730044938.2111177 1730044945.0962775 1730044958.992743 1730044964.1534376 1730108564.953472 1730108566.2638736 1730108567.4402096 1730108574.8510845 1730108575.9162414 1730108588.8945043 1730108595.2026105 1730108647.3785403 1730118135.637466 1730118140.5202587 1730118141.2257318 1730118144.1956835 1730118148.371045 1730118151.6871338 1730118166.2305794 1730118184.2650702 1730118203.2182014 1730179976.65268 1730179977.939642 1730179978.7225032 1730179980.8295987 1730179988.8647323 1730179989.9527414 1730179998.2916584 1730180000.8676643 1730180007.775465 1730180025.6631205 1730218898.9072146 1730218905.6026793 1730218909.059037 1730218910.3365545 1730218915.8225565 1730218926.8502307 1730218932.3286083 1730218939.3001914 1730275298.8027234 1730275301.4654057 1730275303.1072261 1730275304.0636823 1730275317.381003 1730275320.6247735 1730275333.5557346 1730275380.380172 1730280384.1852689 1730280384.8983238 1730280385.6372325 1730280388.6256185 1730280390.6127968 1730280396.4061003 1730280405.0505073 1730280422.5386162 1730280426.1869366 1730280430.868838 1730284674.686032 1730284680.906267 1730284682.2430077 1730284685.2335389 1730284689.0890508 1730284689.7998638 1730284702.695149 1730284715.6218622 1730284722.7031624 1730374527.1452029 1730374527.7010581 1730374529.5714324 1730374532.335925 1730374539.5056646 1730374545.225128 1730374562.1102057 1730374571.857448 1730380728.7295353 1730380731.150879 1730380732.6688063 1730380736.5049667 1730380739.8626847 1730380754.6919937 1730380764.2745686 1730380770.4302964 1730409100.9300206 1730409102.331282 1730409102.9998615 1730409105.8457847 1730409117.0779421 1730409125.186845 1730409140.8327959 1730413799.680919 1730425798.490704 1730425799.8475976 1730425804.5104012 1730425807.6398041 1730425811.7750034 1730425823.3259237 1730425830.182246 1730425831.0041034 1730477208.939486 1730477210.362072 1730477213.3330104 1730477222.7644532 1730477250.6180503 1730477271.8797004 1730477278.7356114 1730477311.7083013 1730477344.9664245 1730551466.2613475 1730551468.1558676 1730551468.6379552 1730551471.574293 1730551485.292978 1730551714.9587398 1730551721.064079 1730551770.7810545 1730551772.724341 1730551779.172007 1730551783.5625727 1730551785.240131 1730551795.530203 1730551816.602113 1730551843.3321774 1730568764.139239 1730568766.4208605 1730568768.0659432 1730568770.7483375 1730568775.3193119 1730568777.1212685 1730568778.2512453 1730568786.6107159 1730568792.1702764 1730568803.3814995 1730572393.2263505 1730572394.2957191 1730572396.1838949 1730572403.882823 1730572407.1082404 1730572415.5606542 1730572418.9502246 1730572426.7249322 1730573493.4395432 1730573494.498661 1730573497.7063038 1730573499.4742029 1730573503.44434 1730573505.044457 1730573507.062294 1730573514.6670637 1730573527.9402637 1730573529.6573448 1730646276.7328491 1730646278.8141346 1730646279.7373104 1730646286.0035422 1730646292.8514357 1730646295.655658 1730646306.019205 1730646327.7861974 1730647912.8937979 1730647913.7561932 1730647916.4450212 1730647919.0412316 1730647921.0074391 1730647926.6910808 1730647930.057654 1730647933.496736 1730647936.6280458 1730647949.4988215 1730807242.5316253 1730807244.3396552 1730807245.8609428 1730807251.8184936 1730807261.783787 1730807265.3647041 1730807272.387132 1730817468.565808 1730817471.377723 1730817472.8056078 1730817482.5650048 1730817497.1087816 1730817499.4315834 1730817503.9007418 1730817513.8748765 1730817523.1081626 1730821401.8298514 1730821406.4129963 1730821407.9715912 1730821409.6416264 1730821412.768464 1730821421.6235604 1730821427.8204122 1730821437.4782767 1730821442.916009 1730822472.9151068 1730822478.4528308 1730822479.8638492 1730822482.0061872 1730822486.754859 1730822490.588171 1730822506.739088 1730822513.804522 1730899260.7787814 1730899264.2263396 1730899273.500649 1730899292.8726277 1730899303.721257 1730901723.905749 1730901742.118694 1730901753.511005 1730903054.6751752 1730903055.8458865 1730903057.2122521 1730903074.4498112 1730971745.8499439 1730971747.5699441 1730971749.1461153 1730971751.4877 1730971759.2653332 1730971761.1175764 1730971775.4306664 1730971783.5866497 1730971803.5608537 1730981972.6511354 1730981973.328158 1730981974.8271549 1730981977.8909194 1730981987.2681918 1730981999.041532 1730981999.8671234 1730982008.7539716 1730982044.559671 1731056397.2586415 1731056402.036135 1731056411.9442914 1731056451.7027507 1731056453.9502587 1731056486.1215286 1731056487.0533705 1731056515.2322998 1731056532.1200871 1731144519.888281 1731144520.509171 1731144523.3933926 1731144527.078465 1731144531.4000866 1731144542.6378856 1731144549.7665086 1731144686.2622302 1731144689.2599902 1731144690.9398296 1731144695.6028743 1731144699.6347964 1731144707.2914085 1731144712.291652 1731144721.7356853 1731144727.467037 1731148127.8145342 1731148129.112714 1731148131.860765 1731148136.942361 1731148141.6284542 1731148154.7230666 1731148155.9279375 1731148162.3672278 1731148397.0358782 1731148397.522588 1731148400.5981908 1731148402.4493976 1731148410.2816496 1731148419.8652954 1731148428.1873734 1731148429.6606069 1731148718.409702 1731148723.2307727 1731148724.7611856 1731148725.445875 1731148728.9497018 1731148733.7036128 1731148749.5031757 1731148755.6574883 1731148767.156155 1731154967.4147255 1731154971.837443 1731154972.7053823 1731154979.110837 1731154980.2745206 1731154994.0468187 1731154998.1615376 1731155002.669648 1731167622.600458 1731167626.352391 1731167629.0613265 1731167632.2916656 1731167638.0113463 1731167644.7619684 1731167645.7460804 1731167653.387026 1731171025.7433338 1731171028.1454437 1731171032.2400746 1731171041.9862351 1731171043.0770853 1731171055.3759856 1731171055.877064 1731171075.172642 1731229412.1347032 1731229415.2789226 1731229416.5422425 1731229418.095707 1731229431.661456 1731229433.0100691 1731229437.1850004 1731229442.8717866 1731229613.1210473 1731229613.8068168 1731229614.5309494 1731229621.1576624 1731229628.7896118 1731229631.4962785 1731229637.5075917 1731229639.5613863 1731229654.606807 1731481286.7534761 1731481288.5645113 1731481290.766877 1731481291.8198197 1731481302.1982982 1731481308.6676452 1731481327.047522 1731481331.2523713 1731593220.8888807 1731593224.1370466 1731593225.8446 1731593231.513437 1731593235.6293445 1731593265.1321702 1731593265.8563323 1731593266.696744 1731593298.358575 1731859628.3740964 1731859630.484212 1731859631.553499 1731859633.175853 1731859634.8326163 1731859637.6302872 1731859651.440454 1731859654.1323884 1731859662.2396228 1731859672.9553397 1731861962.1777155 1731861964.292851 1731861977.7196784 1731861979.7432628 1731861986.7312233 1731861990.4504364 1731922884.9139953 1731922887.2335374 1731922887.9522748 1731922888.5676258 1731922897.286149 1731922906.193417 1731922913.8000236 1731922923.4335632 1731922945.7963576 1731932203.806244 1731932204.5280297 1731932207.3690157 1731932210.3461585 1731932213.994411 1731932222.5832834 1731932223.471831 1731932249.044136 1731932265.9347122 1731932501.2521935 1731932508.8772318 1731932513.0450733 1731932542.3964057 1731932553.9959211 1731932563.2576783 1731932594.0971456 1731933170.9760642 1731933172.4696252 1731933173.7094665 1731933178.535318 1731933182.5050938 1731933185.610432 1731933197.295215 1731933222.811717 1731933232.5881987 1731935401.3611374 1731935413.0451057 1731935414.2300546 1731935416.9610739 1731935429.9369838 1731935445.890509 1731947718.9175668 1731947721.6089666 1731947723.2720885 1731947726.3099442 1731947732.5519915 1731947734.7302103 1731947746.6716468 1731947754.0796657 1731947759.056394 1731963042.2459922 1731963043.3076453 1731963047.4277034 1731963050.4457273 1731963051.789089 1731963059.3552227 1731963066.1642108 1731963898.3942215 1731963899.426723 1731963902.774446 1731963908.7706244 1731963913.0985982 1731963916.1861327 1731963930.2955592 1731965728.4651444 1731965729.8994205 1731965734.3784678 1731965735.846021 1731965741.7106583 1731965743.9287534 1731965753.8558125 1731965761.6160433 1731965769.8767486 1731997802.2921572 1731997810.3072803 1731997821.0103588 1731997823.6369407 1731997842.411579 1732005461.3886943 1732005463.7190425 1732005471.0041788 1732005474.6214101 1732005485.6469896 1732005499.9193833 1732008487.1600018 1732008491.797435 1732008494.5423522 1732008502.4767828 1732008514.2675614 1732008528.0170114 1732031510.4307609 1732031512.470964 1732031513.5795474 1732031515.2409818 1732031523.700186 1732031555.7789493 1732031561.1792595 1732031575.9569871 1732031604.1394897 1732031631.6602669 1732033181.5732715 1732033187.0737615 1732033188.6749732 1732033191.9551766 1732033194.1693351 1732033205.2199373 1732033222.024943 1732033223.8429763 1732041367.0638227 1732041374.360133 1732041375.0871248 1732041386.533412 1732041429.4158008 1732041455.4944332 1732041459.8669043 1732041465.4243455 1732041515.1712544 1732263466.6664398 1732263467.7951367 1732263471.1644146 1732263479.6797717 1732263480.2140698 1732263498.7567801 1732263522.56127 1732264323.2435894 1732288770.6208334 1732288780.6333094 1732288792.343384 1732288797.264224 1732288809.1924157 1732288813.6531975 1732288817.9377081 1732288820.9671955 1732288828.0163698 1732383770.9811113 1732383772.019344 1732383775.677074 1732383783.7112272 1732383785.2454233 1732383791.2049956 1732383804.3264155 1732383828.7691948 1732383855.2422316 1732384005.5223076 1732384006.78085 1732384009.1067138 1732384011.001988 1732384016.0497475 1732384029.856547 1732384038.54369 1732384056.9650784 1732433695.8831894 1732433732.9025521 1732433748.8732421 1732433783.7346292 1732441728.9562159 1732441754.4433556 1732441782.3504713 1732441805.516257 1732451639.3175128 1732451643.1642468 1732451645.2693274 1732451751.4095888 1732452561.6061358 1732452576.3843272 1732452603.0346284 1732452616.329989 1732453335.171801 1732453347.7624328 1732453388.8228903 1732453412.1198726 1732457617.6644711 1732457618.7323854 1732457625.315965 1732457629.101936 1732461125.5489106 1732461128.287391 1732461141.5258722 1732461147.4306962 1732467075.7547572 1732467084.6461084 1732467091.89446 1732467122.5807369 1732468773.0488203 1732468802.825153 1732468813.33293 1732469872.8794227 1732469876.575231 1732469902.8869994 1732469955.3939478 1732470377.6167781 1732470396.1452968 1732470423.8126786 1732470445.830942 1732470991.45309 1732470993.7259717 1732471013.3167658 1732471018.7096245 1732471036.7073948 1732471039.5707095 1732471044.3352518 1732471062.9311054 1732520037.0320818 1732520040.5129967 1732520042.1200364 1732520044.3863719 1732520044.986072 1732520057.2194798 1732520065.5948634 1732520087.8231437 1732520095.1079488 1732536734.1849625 1732536735.187456 1732536736.589417 1732536744.997573 1732536746.8804607 1732536754.527193 1732536760.801082 1732536778.5082223 1732536779.565857 1732553889.4913087 1732553891.8560991 1732553893.615305 1732553897.2921178 1732553899.525495 1732553901.1819782 1732553905.777386 1732553917.4970317 1732553923.9444463 1732562315.4978662 1732562315.966834 1732562318.6292334 1732562322.6073444 1732562327.6694388 1732562346.4216428 1732562356.2182302 1732562357.001847 1732593967.9975262 1732593968.631301 1732593969.3510222 1732593972.3546522 1732593977.7886488 1732593979.985906 1732594000.434706 1732594015.288365 1732594036.3076348 1732616945.9189374 1732616946.8032322 1732616950.1755753 1732616952.190844 1732616956.7188 1732616973.3852801 1732616981.3340652 1732617007.8578043 1732650478.146098 1732650478.8655012 1732650482.054069 1732650483.2019038 1732650491.7780273 1732650501.0392954 1732650504.1629848 1732650520.974529 1732719992.060976 1732719992.9039497 1732719993.6523044 1732719994.3609269 1732719997.193117 1732720008.3417926 1732720024.2752085 1732720025.8679025 1732720054.9436398 1732721005.8010385 1732721008.0343213 1732721010.1515133 1732721017.508236 1732721021.39178 1732721024.1566527 1732721030.3488595 1732721041.7503881 1732721047.331507 1732722433.5197935 1732722435.6278255 1732722439.5679765 1732722441.9508731 1732722446.9056737 1732722454.7095733 1732722468.0639024 1732722477.8043704 1732871671.3932276 1732871672.2253082 1732871678.2360198 1732871684.9135783 1732871686.3062546 1732871687.5788589 1732871689.2884448 1732871707.1721458 1732871713.4964151 1732871719.3099146 1732948701.823288 1732948705.645968 1732948712.4570334 1732948715.2281327 1732948716.8692715 1732948724.1452303 1732948740.629487 1732951478.1179664 1732951478.6306114 1732951481.6304414 1732951482.4399962 1732951490.939268 1732951498.3275948 1732958893.428547 1732958894.411381 1732958918.0187109 1732958927.3729992 1732959282.7071395 1732959313.630829 1732959320.7503846 1732959748.9811394 1732959770.8425634 1732960101.9984646 1732960107.534045 1732960138.5458903 1732960145.0319757 1732962593.7243786 1732962599.6971328 1732962601.0662632 1732962606.605405 1732962608.2602785 1732962610.6957266 1732962611.941968 1732962618.4101582 1732962624.4917603 1732962628.754138 1732970526.5556984 1732970538.7876263 1732970550.6137106 1732970566.5419803 1732970857.9357018 1732970861.2015047 1732970880.6689203 1732970901.5037766 1732975118.6913564 1732975121.714272 1732975124.1275043 1732975126.7590756 1732975127.902717 1732975136.1045487 1732975144.8489838 1732975152.0163014 1732975166.8195279 1732985289.0232406 1732985292.5707827 1732985298.2890525 1732985300.096001 1732985304.9423993 1732985310.3897424 1732985316.3400378 1732985320.7302096 1732985330.646815 1733080179.8714154 1733080182.2174754 1733080183.7056813 1733080187.129284 1733080187.6562762 1733080197.6049402 1733080206.2771382 1733080214.914623 1733080229.6740513 1733140064.208817 1733140065.2534864 1733140065.9737613 1733140069.2690368 1733140070.786767 1733140075.0304115 1733140081.696741 1733140093.7225945 1733140106.7209074 1733140109.0243447 1733143242.2514603 1733143248.2144585 1733143249.4314134 1733143251.6573458 1733143256.0222833 1733143259.6437476 1733143267.2247188 1733143270.0791595 1733143277.795833 1733143286.3701718 1733154982.5744405 1733154986.1220756 1733154987.259687 1733154991.008131 1733154991.8595552 1733154994.1339047 1733155010.4902403 1733155019.416577 1733155042.1721528 1733159155.4314275 1733159167.030669 1733159168.4029393 1733159174.167873 1733159175.1603377 1733159202.731806 1733159210.605375 1733168522.0316908 1733168526.638999 1733168531.6582913 1733168532.5080645 1733168535.4875433 1733168544.9785478 1733168548.9552453 1733168573.5332053 1733169970.4149306 1733169971.7890635 1733169987.607266 1733169988.9386342 1733169990.5251367 1733169992.666319 1733169994.047022 1733169995.7627249 1733170009.7685456 1733170462.0889544 1733170463.9820032 1733170467.044954 1733170471.9154284 1733170480.642101 1733170481.885501 1733170496.5555415 1733170505.309697 1733219253.6427739 1733219256.7237084 1733219261.192824 1733219266.133451 1733219268.4844553 1733219269.1851923 1733219289.6428618 1733219294.3419852 1733219300.7973099 1733219630.9789228 1733219631.5469549 1733219633.5728836 1733219637.2201772 1733219639.1018076 1733219646.767386 1733219660.574712 1733219675.677772 1733219687.30307 1733224231.4707232 1733224232.3889892 1733224234.342062 1733224235.8343258 1733224237.4398193 1733224245.0629716 1733224257.4724257 1733224266.3068144 1733224271.8994398 1733227582.8463392 1733227583.5131407 1733227585.0287392 1733227592.584582 1733227604.602964 1733227610.088609 1733227628.302275 1733227641.8276615 1733228864.4773238 1733228866.74998 1733228869.8279743 1733228872.190608 1733228874.8892612 1733228884.3857858 1733228887.3335903 1733228897.1727421 1733228971.4516807 1733229786.021049 1733229786.66641 1733229790.7480805 1733229799.2262502 1733229802.0443177 1733229804.4731007 1733229811.4373858 1733229813.377825 1733229826.7686434 1733229853.3298552 1733234293.688889 1733234301.798663 1733234304.4010224 1733234305.4084508 1733234306.1285028 1733234308.6419322 1733234314.0123327 1733234319.1362226 1733234340.7632995 1733234876.684493 1733234879.0027857 1733234882.3916202 1733234883.6695943 1733234889.1685822 1733234891.9050684 1733234908.3120115 1733234936.354204 1733234938.8755677 1733238720.608564 1733238726.1778567 1733238730.278317 1733238734.962571 1733238753.1915474 1733238766.1926172 1733238990.5689092 1733238992.9023156 1733239002.4197814 1733239009.9664338 1733239013.7127926 1733239015.8269987 1733239041.6941237 1733239048.5333445 1733240946.6946738 1733240948.684239 1733240949.858537 1733240951.7910414 1733240966.3996506 1733240982.7181993 1733240983.687201 1733240986.7007341 1733242288.9102626 1733242291.8940446 1733242293.693395 1733242298.4761782 1733242306.8164103 1733242311.8970075 1733242318.5424666 1733242336.828924 1733255433.1931605 1733255633.6699867 1733255653.0470135 1733255663.1899922 1733271568.5178902 1733293035.286282 1733293038.8491454 1733293062.8098772 1733293075.5979953 1733306785.4062219 1733306788.1839104 1733306795.809741 1733306798.033864 1733306810.0447462 1733306819.5070994 1733306821.8249385 1733306845.3565247 1733308871.4943094 1733308873.2617729 1733308879.7920218 1733308880.398352 1733308899.693787 1733308903.4764695 1733308904.7923117 1733309390.7614777 1733309395.251379 1733309398.2893078 1733309402.5071542 1733309406.6513014 1733309412.9853697 1733309419.4013913 1733309444.7180636 1733314049.608768 1733314050.8355372 1733314055.470318 1733314072.3486557 1733314098.261678 1733315374.4849255 1733315406.3125675 1733315453.007395 1733322553.0044217 1733322556.9803238 1733322563.83114 1733322576.0566854 1733322596.9634542 1733322598.1692662 1733322768.862828 1733322773.8497927 1733322776.958355 1733322777.9852057 1733322779.067944 1733322785.3724024 1733322790.6682105 1733322802.9243758 1733322827.531432 1733333193.2300014 1733333198.3919308 1733333200.4507997 1733333212.6177614 1733333215.9385328 1733333235.194576 1733333238.831189 1733338333.5444129 1733338335.7633626 1733338346.8919969 1733338361.1912727 1733338380.2940402 1733339052.9226713 1733339057.1518238 1733339057.6057532 1733339061.192743 1733339068.2405028 1733339079.9187348 1733339084.0606103 1733380420.0212486 1733380421.606655 1733380425.2091165 1733380426.0167086 1733380432.8284676 1733380436.2047918 1733380446.2166383 1733380451.8656907 1733380463.5257213 1733384979.0359178 1733384981.606588 1733384985.539735 1733384992.5014267 1733384998.4741216 1733385006.1097124 1733385011.9194536 1733390811.420039 1733390812.1788619 1733390818.8177466 1733390833.786025 1733390835.3938174 1733390838.1063056 1733390844.777927 1733396841.614761 1733396848.0114086 1733396850.8401172 1733396852.8094835 1733396860.2416327 1733396863.0192623 1733396871.7705586 1733396914.0040936 1733401219.1505253 1733401220.0574515 1733401225.063062 1733401226.787789 1733401232.2275171 1733401245.996172 1733401277.5867527 1733449646.5339172 1733449653.2777321 1733449655.3623538 1733449657.6258104 1733449658.5671172 1733449659.9490492 1733449666.6821601 1733449674.7923486 1733449691.2928286 1733494747.931788 1733494753.0851731 1733494757.7123055 1733494758.2674625 1733494762.5787327 1733494782.7055457 1733494783.6043348 1733494789.1412604 1733495742.2988338 1733495743.761341 1733495744.4240904 1733495747.9927275 1733495763.3438127 1733495766.8898356 1733495787.6293023 1733495792.2613227 1733499449.4758797 1733499456.7387803 1733499457.9393198 1733499459.3670979 1733499463.4222405 1733499474.702234 1733499476.049058 1733499483.5740209 1733499498.3721578 1733502662.0274692 1733502663.8277683 1733502665.095098 1733502672.2443776 1733502677.5460172 1733502690.7745686 1733502694.9604292 1733502708.0412395 1733505470.201204 1733505472.1913333 1733505473.263023 1733505476.0696583 1733505482.4900954 1733505487.4447098 1733505505.671235 1733505517.676156 1733505733.499319 1733505734.095049 1733505735.8226748 1733505740.2475958 1733505748.0329335 1733505761.4851673 1733505794.7748582 1733506113.984502 1733506122.9218292 1733506123.361182 1733506123.9724724 1733506128.3213918 1733506138.5410657 1733506143.387333 1733506151.5541925 1733557537.7647562 1733557539.9018676 1733557544.0487056 1733557550.7210174 1733557558.1248958 1733557559.7645786 1733557564.649211 1733557567.2888486 1733565406.164843 1733565406.9513352 1733565418.972544 1733565423.6188152 1733565432.9495125 1733565439.746262 1733567442.0237205 1733567446.3039818 1733567447.3340971 1733567459.8344622 1733567460.4285808 1733567462.8390877 1733567473.067186 1733567935.1028788 1733567938.1556034 1733567940.3346186 1733567950.854293 1733567960.1414592 1733567960.701589 1733567969.7438977 1733567972.6006207 1733570469.411528 1733570470.6235194 1733570471.3499756 1733570472.2118711 1733570474.2138884 1733570485.6307247 1733570492.1640036 1733570493.0946727 1733570511.4052603 1733571081.2802474 1733571083.6984477 1733571084.258744 1733571100.301063 1733571107.8362153 1733571113.5683346 1733571117.6746516 1733585231.6380436 1733585234.323886 1733585236.852115 1733585237.8098404 1733585241.079353 1733585244.1001995 1733585251.813903 1733585259.0539622 1733585263.1471586 1733585750.7919397 1733585756.250291 1733585766.299205 1733585768.5369081 1733585774.1288636 1733585790.8809888 1733585793.410951 1733595927.1657395 1733595931.978675 1733595933.186769 1733595933.7419264 1733595935.2153459 1733595937.777819 1733595948.0802283 1733595961.6471128 1733595996.1958773 1733643664.802906 1733643666.9933524 1733643676.61076 1733643678.5545428 1733643679.6358993 1733643681.6312675 1733643686.9804542 1733643729.4601016 1733643739.8072762 1733650787.7630966 1733650790.2734067 1733650798.6556857 1733650809.237082 1733650810.5124211 1733650837.7441363 1733650867.9347098 1733650874.5275176 1733653494.9788938 1733653495.7485487 1733653496.8101516 1733653508.7553625 1733653509.3915036 1733653519.4390192 1733653534.3760762 1733653537.5714998 1733656739.7554934 1733656740.9948246 1733656745.699247 1733656755.4289315 1733656760.9822845 1733656761.6517587 1733656764.7476268 1733656766.3896408 1733658253.7502165 1733658254.63226 1733658255.2004552 1733658272.5413344 1733658279.3151307 1733658284.36497 1733658290.7471957 1733658918.9721398 1733658920.3418303 1733658925.7979481 1733658940.7062976 1733658948.3468363 1733658956.1735587 1733658970.5708482 1733661213.063345 1733661216.4161725 1733661216.90439 1733661220.4818115 1733661221.8897872 1733661227.467153 1733661233.9002542 1733661235.2784066 1733661242.5368476 1733672735.1560616 1733672737.0928104 1733672741.9912848 1733672744.640307 1733672746.223438 1733672747.8502743 1733672762.349206 1733672764.4948823 1733672769.2089665 1733673042.7114322 1733673048.5305562 1733673050.175404 1733673051.0693357 1733673062.6022651 1733673075.8755403 1733673080.5610647 1733673105.5424361 1733677623.205507 1733677624.1413872 1733677625.5410368 1733677630.676029 1733677641.258817 1733677644.0154574 1733677670.450337 1733677697.539429 1733677706.220611 1733732917.729072 1733732922.778485 1733732924.1954682 1733732925.1251035 1733732939.5123525 1733732943.796028 1733732977.3228796 1733739732.753779 1733739737.683406 1733739741.5038257 1733739743.8315432 1733739758.1880817 1733739770.6115084 1733739789.3433433 1733739808.6955342 1733739812.6888 1733740512.385763 1733740513.2260416 1733740515.098953 1733740523.913746 1733740525.3611784 1733740526.5216775 1733740544.2393446 1733740547.1774135 1733740555.3291698 1733743804.4463463 1733743807.3536985 1733743809.70843 1733743810.3246124 1733743817.6777225 1733743823.017097 1733743839.215962 1733743842.400228 1733743867.113646 1733746817.5787003 1733746818.3561563 1733746827.4099703 1733746831.6853008 1733746847.3427215 1733746849.3852785 1733746903.903557 1733748596.8917224 1733748597.7761698 1733748602.9008763 1733748605.3872135 1733748615.1536703 1733748620.2708554 1733748629.0212128 1733748652.1510158 1733761260.5527625 1733761261.838159 1733761264.4923453 1733761269.7144816 1733761275.7195458 1733761291.0287778 1733761295.432108 1733761316.7537513 1733761804.904209 1733761808.0875254 1733761810.4236267 1733761812.4223142 1733761823.0650399 1733761827.1908689 1733761837.127467 1733761841.3615758 1733761866.1509743 1733762264.8901064 1733762265.9916751 1733762267.266812 1733762271.8752313 1733762272.5526114 1733762280.5551348 1733762288.5907092 1733762294.4682882 1733762324.5145082 1733797678.9547925 1733797680.3043654 1733797686.3321779 1733797693.5512068 1733797703.2558506 1733797707.1447423 1733797708.8686543 1733822509.377478 1733822510.2404916 1733822520.1245093 1733822524.2725966 1733822524.995237 1733822532.6738303 1733822540.19579 1733822555.0441415 1733823236.1631703 1733823239.772133 1733823240.5919967 1733823242.2522368 1733823244.2788386 1733823252.2633336 1733823262.5869706 1733823264.0098014 1733823280.2782557 1733827759.2170558 1733827761.83209 1733827767.0119371 1733827767.9738233 1733827773.2282934 1733827791.2194312 1733827791.7680264 1733827797.6309197 1733832972.2255442 1733832973.1952362 1733832975.952454 1733832995.9818823 1733833000.4753177 1733833002.799605 1733833036.6471875 1733834737.8805032 1733834740.0520172 1733834743.88104 1733834748.1553388 1733834752.4233265 1733834769.8890462 1733834772.4007912 1733834798.1576154 1733836074.259244 1733836077.7049952 1733836083.0826397 1733836084.2656305 1733836088.6810768 1733836102.482965 1733836113.1277158 1733836132.5725064 1733836496.3533037 1733836498.3189676 1733836499.0263884 1733836502.0276124 1733836514.4971824 1733836522.197993 1733836525.4895005 1733836546.553581 1733905764.6046803 1733905768.2721238 1733905769.7859128 1733905775.6284866 1733905777.6412177 1733905789.8565626 1733905797.3834574 1733905812.554496 1733908927.7658398 1733908931.5025 1733908934.0517693 1733908940.4066727 1733908952.016059 1733908964.3180888 1733908989.1316671 1733908993.2989984 1733909288.657325 1733909290.8760068 1733909293.3179958 1733909293.7696488 1733909307.5138328 1733909313.9445667 1733909328.9396684 1733909330.359382 1733909336.699531 1733909902.4304671 1733909904.6518452 1733909910.477193 1733909924.9769745 1733909932.6229227 1733909938.500676 1733909946.0414634 1734006504.1333292 1734006509.8071592 1734006512.048598 1734006517.1330192 1734006518.812081 1734006533.7427895 1734006547.1742134 1734006555.7657967 1734015726.2168474 1734015726.9747858 1734015732.3542402 1734015740.220944 1734015759.9980555 1734015764.1156278 1734015784.5271907 1734027101.1632953 1734027102.2415211 1734027104.4368935 1734027105.446029 1734027107.0598297 1734027117.1169271 1734027128.1979995 1734027139.2692516 1734027140.5368311 1734088774.0993812 1734088777.1879537 1734088777.714932 1734088780.891004 1734088781.4808877 1734088789.5336397 1734088804.045803 1734088816.0933163 1734093159.558811 1734093160.9894395 1734093162.3781676 1734093170.8064487 1734093174.7633927 1734093183.86795 1734093188.411972 1734093196.76535 1734172341.7707095 1734172342.4083743 1734172343.168821 1734172350.172758 1734172356.9757605 1734172363.7750375 1734172388.8443363 1734172416.3446264 1734172430.83665 1734175097.5265257 1734175099.85371 1734175101.877565 1734175104.969263 1734175112.7166493 1734175119.9440668 1734175121.150225 1734175126.1709414 1734177108.2648222 1734177109.5323458 1734177110.9781883 1734177112.6747355 1734177117.3391833 1734177121.0887563 1734177131.8735366 1734177137.6291678 1734177141.3786077 1734199035.8221405 1734199037.481856 1734199038.004862 1734199039.968881 1734199045.415362 1734199064.914838 1734199067.2668197 1734199069.0058367 1734262028.6908529 1734262029.307968 1734262035.2942023 1734262039.4181511 1734262040.3107548 1734262040.8191369 1734262054.9778004 1734262059.1196017 1734262065.9713304 1734264058.8774114 1734264062.150621 1734264063.0401947 1734264065.8985987 1734264074.2219696 1734264081.5155044 1734264092.787558 1734264146.2914078 1734268844.9836473 1734268846.3901615 1734268846.9945705 1734268847.7356365 1734268849.5164173 1734268860.365839 1734268868.1805236 1734268870.3608446 1734268876.3276196 1734269281.15436 1734269287.1708488 1734269288.8807511 1734269289.7311661 1734269293.4040473 1734269296.2506533 1734269304.7172859 1734269325.7669764 1734269329.419911 1734271395.6991515 1734271396.6889472 1734271397.880067 1734271402.6827838 1734271403.8652008 1734271413.4226174 1734271423.0080652 1734271425.488706 1734271427.6578972 1734351688.058646 1734351689.6575918 1734351694.9861565 1734351698.0319583 1734351701.5358753 1734351722.3482032 1734351726.086569 1734351741.6723933 1734367468.4239993 1734367473.1290283 1734367474.3041587 1734367476.32963 1734367487.2137127 1734367493.396583 1734367508.0347528 1734367572.7470653 1734438290.7985852 1734438292.2057211 1734438294.82526 1734438297.8977218 1734438303.43967 1734438311.3271127 1734438323.1823792 1734438391.312719 1734438990.0230591 1734438991.4290752 1734438992.3159082 1734438997.0685658 1734439000.9377115 1734439003.5536366 1734439013.0345373 1734439022.8144507 1734439041.4531271 1734610935.5402877 1734610936.018706 1734610936.7709029 1734610938.0711465 1734610940.2272396 1734610948.181996 1734610963.6168685 1734610969.7630963 1734610976.624657 1734693435.791713 1734693437.9342422 1734693442.8375373 1734693446.8058383 1734693450.5835466 1734693459.3054142 1734693466.8991237 1734693469.2940693 1734693471.3070602 1734969779.4377246 1734969780.6083114 1734969783.713666 1734969790.1905634 1734969798.3195398 1734969803.4121616 1734969810.2726023 1734969815.611365 1734969818.2863302 1735215538.1666918 1735215538.5484898 1735215543.1818237 1735215547.2899783 1735215557.8561838 1735215568.1153088 1735215569.912203 1735215597.7214365 1735298753.3061194 1735298755.0128474 1735298758.4833825 1735298765.6748583 1735298770.1487741 1735298779.8815114 1735298806.5731514 1735298841.728858 1735300814.2834265 1735300815.2847862 1735300820.9974098 1735300823.9439876 1735300829.0210621 1735300837.9418302 1735300848.477985 1735300851.946753 1735508397.0287507 1735508398.5288246 1735508399.4302917 1735508403.8215485 1735508405.3892164 1735508410.275628 1735508424.4502141 1735508431.1793299 1735508468.0790179 1735579413.8945177 1735579414.414634 1735579416.8128467 1735579418.6358535 1735579420.7884207 1735579433.5342782 1735579440.9099731 1735579451.8205795 1735579459.6753137 1735619086.9711988 1735619087.409217 1735619087.9281003 1735619095.159358 1735619099.3349144 1735619101.4988656 1735619112.587005 1735619119.9110858 1735619127.832429 1735711857.8234038 1735711859.564477 1735711862.3517983 1735711863.3506043 1735711872.5843375 1735711873.9384556 1735711892.2770236 1735711935.7533352 1735711956.2635896 1735752840.1028368 1735752843.3724842 1735752843.761337 1735752844.8144312 1735752851.5520108 1735752857.523881 1735752861.484574 1735752869.4489007 1735752870.265695 1735816433.6132152 1735816435.809237 1735816437.337141 1735816442.6280434 1735816454.9639046 1735816459.1432912 1735816462.9862452 1735816467.2984185 1735820518.8371863 1735820520.5738156 1735820522.8006866 1735820529.5624504 1735820530.426708 1735820536.6808848 1735820548.6727474 1735820550.8155315 1735820552.770849 1735905730.1280572 1735905731.5647476 1735905733.118345 1735905734.0669265 1735905734.694602 1735905748.389628 1735905754.5810616 1735905758.8846927 1735905761.8809183 1735920210.2677524 1735920212.436216 1735920213.7218347 1735920219.1996355 1735920226.1635919 1735920241.4036157 1735920241.7497404 1735920250.0450702 1735922820.4782093 1735922821.1348338 1735922822.7804573 1735922835.6868227 1735922981.6318777 1735922985.1768062 1735922989.272801 1735922995.7330163 1735923003.3491628 1735923004.6397786 1735923020.1836908 1735985905.5444398 1735985916.0105693 1735985919.6104634 1735985919.9892411 1735985937.6283722 1735985958.222152 1735986005.935107 1735986021.704869 1735987092.3328984 1735987093.8391883 1735987095.3711596 1735987103.9556334 1735987104.5368266 1735987106.7685935 1735987116.1892285 1735987124.2150946 1735987126.3644824 1735997735.301569 1735997736.5944946 1735997740.4465046 1735997742.8420439 1735997745.0824842 1735997746.6846266 1735997762.8327234 1735997764.1441154 1735997770.4355567 1735999881.9054108 1735999882.537724 1735999885.4977186 1735999886.93881 1735999890.086601 1735999892.2900712 1735999902.443185 1735999913.3734689 1735999914.6378303 1736005021.269936 1736005026.0950496 1736005026.5565746 1736005028.5512946 1736005034.295627 1736005046.0001605 1736005054.8968458 1736005057.636277 1736091843.3751974 1736091844.0270586 1736091855.4683526 1736091857.5741239 1736091923.0427983 1736091924.572181 1736091940.7193031 1736091978.6729257 1736094594.3971121 1736094597.1088984 1736094598.9986238 1736094600.458892 1736094603.2124414 1736094608.6036782 1736094622.655662 1736094631.1214418 1736094649.4742968 1736095641.5843077 1736095646.6030598 1736095659.935441 1736095673.4031339 1736095675.767698 1736096674.6084228 1736096675.5232391 1736096676.2434072 1736096678.1660178 1736096686.8612764 1736096695.1379368 1736096698.5002198 1736096708.280524 1736158560.5399482 1736158561.9534502 1736158563.4882185 1736158564.7752595 1736158574.529928 1736158588.3760154 1736158615.945422 1736158629.2041485 1736158653.2757142 1736165960.2888427 1736165966.1696758 1736165968.4497535 1736165969.0200455 1736165981.8632822 1736165998.8243723 1736166001.2628193 1736166008.3271723 1736240676.5533333 1736240681.200234 1736240686.528377 1736240687.5252 1736240689.8596854 1736240700.8519623 1736240714.9799516 1736240720.5002007 1736259527.365497 1736259536.772254 1736259578.5615714 1736259682.986006 1736260613.78191 1736260615.0057075 1736260618.4702165 1736260622.4034257 1736260624.3663952 1736260635.4417725 1736260639.6916158 1736260642.856217 1736441675.4581223 1736441679.9146483 1736441683.5242102 1736441690.9802032 1736441694.5142927 1736441719.6086934 1736441732.7007813 1736441754.46947 1736441886.5042713 1736441887.8903387 1736441890.8630843 1736441891.7496033 1736441901.1597342 1736441911.8327436 1736441921.6508195 1736441929.3110847 1737053060.7107148 1737053061.7079356 1737053064.9652221 1737053068.0993688 1737053069.2623348 1737053085.2016392 1737053090.228786 1737053098.1883311 1737053100.9433181 1737218159.9871378 1737218160.8943348 1737218173.5094814 1737218175.3223531 1737218175.7673883 1737218206.747201 1737218214.572571 1737218236.5821056 1737218253.0675943 1737281149.6906452 1737281151.7767713 1737281158.6541772 1737281161.3245492 1737281171.5785894 1737281181.0609574 1737281183.4652088 1737634751.2807136 1737634757.2278888 1737634761.4429455 1737634766.177611 1737634770.9341338 1737634780.3815856 1737634781.078672 1737634808.1874688 1737634830.808764 1737980365.2704349 1737980366.532835 1737980372.7169843 1737980378.6984127 1737980392.7996438 1737980402.1677213 1737980408.840801 1738176385.9614975 1738176387.5311823 1738176389.7672567 1738176395.7514846 1738176399.232108 1738176413.4351516 1738176432.6113453 1738176435.5840304 1738307106.897794 1738307110.556664 1738307112.859659 1738307118.9154048 1738307126.0298553 1738307130.3858697 1738307145.7877836 1738307150.676601 1738509315.7534444 1738509317.248571 1738509320.8597095 1738509325.4734414 1738509326.7232912 1738509336.0920534 1738509348.1706765 1738509357.7451594 1738510960.97414 1738510966.4917815 1738510967.4010441 1738510971.0032785 1738510975.2703307 1738510991.4107807 1738511006.686129 1738511007.4859824 1738511557.295736 1738511559.0962 1738511560.9264438 1738511566.4940279 1738511571.443775 1738511573.2373033 1738511580.1756394 1738511592.6698241 1738514823.3109682 1738514824.2517784 1738514825.514968 1738514826.179941 1738514830.463543 1738514836.9260972 1738514850.069192 1738514850.981052 1738514877.4470348 1738563652.295612 1738563653.7358687 1738563661.408399 1738563662.226456 1738563667.1011114 1738563669.3023953 1738563678.3859153 1738563691.8069675 1738563729.4151654 1738585091.3736339 1738585092.5167472 1738585095.8209786 1738585097.641139 1738585107.9601016 1738585110.2047687 1738585113.6362388 1738585121.1674669 1738585175.540115 1738805903.3422842 1738805908.6929772 1738805909.751889 1738805911.667848 1738805919.6154075 1738805933.1037781 1738805936.0323374 1738805938.619792 1739190245.1729622 1739190275.102606 1739190359.784534 1739190366.8907857 1739190382.5055847 1739190416.8249395 1739190450.1152332 1739190482.7457755 1739725878.7171612 1739725883.8818684 1739725891.685329 1739725892.68016 1739725936.528464 1739725943.7014942 1739725970.0041378 1739725977.2309911 1739794871.4846091 1739794875.9820058 1739794876.688585 1739794880.338071 1739794891.5054476 1739794902.4280593 1739794925.2632608 1739794932.1904132 1739988426.6435232 1739988427.7066967 1739988430.0451086 1739988434.0439842 1739988441.0419397 1739988441.7888176 1739988456.312907 1739988461.2888188 1739988487.343532 1740054285.1691186 1740054286.3942266 1740054292.37818 1740054295.811164 1740054308.0411217 1740054312.4567688 1740054322.6335552 1740054333.4984338 1740079286.440632 1740079288.2980962 1740079289.982014 1740079302.4534955 1740079334.7564526 1740079355.0628817 1740079360.4295704 1740079381.8605378 1740157548.6281772 1740157553.7571568 1740157554.7670753 1740157557.3696394 1740157558.3090923 1740157564.9541898 1740157575.4727216 1740157591.5358796 1740157659.8851328 1740220077.4754336 1740220087.2189336 1740220091.073763 1740220094.516704 1740220098.0173957 1740220101.9434617 1740220111.7498071 1740220116.2820933 1740220121.0643718 1740245083.9737985 1740245090.3478086 1740245090.8755617 1740245092.7752793 1740245098.5716355 1740245107.3766751 1740245111.6379035 1740245121.6337688 1740306828.5973806 1740306834.7376788 1740306845.121794 1740306867.0319235 1740306872.6905491 1740306913.480411 1740306920.1069384 1740399729.9223397 1740399825.766838 1740399827.3049707 1740399830.2140074 1740399840.8109517 1740399845.9939446 1740399865.9941838 1740399874.3998785 1740399909.2752402 1740482110.7903411 1740482112.6169007 1740482113.9752886 1740482115.2887034 1740482116.3916032 1740482121.1089497 1740482137.4481843 1740482154.288911 1740482169.020022 1740662877.656166 1740662883.3141673 1740662884.0697079 1740662887.5417233 1740662943.9152436 1740662951.775909 1740662962.4440465 1740663000.0761418 1740698034.6122122 1740698039.362832 1740698040.584123 1740698041.3482378 1740698043.0440652 1740698044.8144715 1740698062.7515821 1740698072.4950461 1740698077.9344592 1740719912.2369485 1740719913.802656 1740719921.609393 1740719922.6849043 1740719923.830786 1740719932.330509 1740719944.6747625 1740719945.5915139 1740758862.4804335 1740758864.3160887 1740758873.1681957 1740758875.706354 1740758876.702129 1740758911.9918113 1740758929.7068546 1740758947.6397083 1740758955.9092875 1740829320.9958465 1740829323.5461824 1740829326.3017564 1740829327.2471852 1740829343.458982 1740829351.5309384 1740829355.2095764 1740830092.8333147 1740830098.5127282 1740830101.1660757 1740830102.6165016 1740830105.7693543 1740830109.3415632 1740830115.824294 1740830122.818993 1740830132.8016496 1740834891.5516295 1740834892.54687 1740834898.2090986 1740834901.943733 1740834906.881616 1740834923.5885248 1740834924.5466075 1740834965.8267653 1740835506.9199913 1740835511.1185188 1740835515.1694639 1740835518.1965115 1740835519.4156275 1740835545.7867088 1740835548.0261815 1740835571.3404436 1740846718.6309428 1740846719.2229779 1740846720.9839458 1740846724.331695 1740846731.2153864 1740846745.9712794 1740846746.6058896 1740846753.5852516 1740851654.8073878 1740851657.1226265 1740851659.0984578 1740851662.5845704 1740851679.0356247 1740851686.6202796 1740853131.9662952 1740853135.2259994 1740853140.0243337 1740853141.5544727 1740853142.5853932 1740853151.5907438 1740853161.4089994 1740853179.152378 1740853234.7913692 1740909590.7676952 1740909593.4394844 1740909594.1006145 1740909600.1618545 1740909605.5640283 1740909627.5641062 1740909629.763059 1740909638.391702 1741538002.746394 1741538004.5974147 1741538007.1031163 1741538011.1803036 1741538022.5535285 1741538023.2208674 1741538035.1005435 1741538037.6209497 1741538053.6795459 1741540241.5225925 1741540243.0384476 1741540243.7290587 1741540248.8801308 1741540250.8812892 1741540255.0324414 1741540275.3322263 1741540278.8879032 1741540279.8883533 1742736926.4213793 1742736929.0452437 1742736929.9147203 1742736941.0108812 1742736943.6206505 1742736953.7565837 1742736955.0753472 1742817897.1766253 1742817906.055439 1742817908.110843 1742817925.20516 1742817931.6035576 1742817933.6209328 1742817941.782805 1742817949.0679486 1742817976.523266 1742820762.8189282 1742820767.58487 1742820769.723738 1742820779.3241792 1742820808.8599684 1742820809.7592335 1742820868.020134 1742833599.6929293 1742833600.6258411 1742833605.432312 1742833606.0664065 1742833609.8345032 1742833621.3044624 1742833629.688015 1742833634.2095566 1742833685.3454952 1742836321.144967 1742836329.1386688 1742836330.3600333 1742836333.159632 1742836336.205278 1742836340.7387507 1742836348.8935614 1742836371.8875759 1742836403.011777 1743006400.4382706 1743006402.8110816 1743006406.0368016 1743006408.5252998 1743006422.3414671 1743006436.7540543 1743006441.0074162 1743006507.553623 1743348894.2369478 1743348901.5321884 1743348903.3034456 1743348912.1285534 1743348913.6900957 1743348919.0135596 1743348934.7863953 1743348939.0275247 1743704487.3344524 1743704488.7368083 1743704493.066661 1743704502.7999954 1743704508.704604 1743704526.4536037 1743704540.3676257 1743704595.6681256 1744540076.4937 1744540077.7716103 1744540080.2340953 1744540087.4633138 1744540090.1468627 1744540090.9323301 1744540104.043849 1744540105.8583179 1744540113.6994038 1744540979.8903549 1744540981.2079186 1744540983.7677922 1744540989.2262633 1744541006.268343 1744541009.6697378 1744541010.7569468 1744542352.2102094 1744542354.7567139 1744542358.0040245 1744542358.6157143 1744542366.1230075 1744542381.9384413 1744542389.4165056 1744542397.4071445 1745173293.8249953 1745173294.6977684 1745173296.4183428 1745173299.7737727 1745173321.02643 1745173328.499534 1745238314.6789122 1745238315.1873124 1745238316.4272435 1745238323.9033215 1745238325.5795352 1745238328.3564548 1745238347.3873117 1745238371.5862057 1745238387.9306889 1745843070.958591 1745843075.5153403 1745843076.3962047 1745843077.0973387 1745843094.5423474 1745843118.8675365 1745843138.420316 1746226656.8705308 1746226657.815519 1746226659.102352 1746226663.2202785 1746226665.2551959 1746226674.0033555 1746226678.4311152 1746226696.077037 1746362184.0793815 1746362190.0461793 1746362191.708346 1746362195.0864835 1746362196.7399127 1746362201.1714997 1746362217.4062338 1746362226.1971035 1746362262.0417452 1746362599.2312064 1746362607.3190908 1746362617.876917 1746362619.045333 1746362649.466091 1746362658.9040372 1746363616.3271368 1746363619.165741 1746363621.2730448 1746363624.960459 1746363630.1416016 1746363642.0023985 1746363648.6735318 1746363701.3209887 1746367035.9069357 1746367040.6509783 1746367046.6282654 1746367051.5990014 1746367060.6876135 1746367064.021934 1746367074.9660578 1746371404.782657 1746371407.2207198 1746371412.0853345 1746371418.4139013 1746371423.897549 1746371428.9851322 1746371441.6439266 1746371486.6761787 1746447841.1483686 1746447845.21004 1746447850.4436421 1746447851.0021956 1746447852.2266257 1746447854.305104 1746447866.7331069 1746447877.529441 1746447904.8588624 1746970866.2850928 1746970871.4382925 1746970876.4223201 1746970877.5313618 1746970896.6955512 1746970907.5881906 1746970913.7251034 1746972125.4956772 1746972131.1131086 1746972134.1966543 1746972136.3567512 1746972140.2242782 1746972163.447233 1746972167.0903578 1746972172.4392664 1747052634.0867045 1747052637.9719176 1747052640.901573 1747052650.1282237 1747052650.804084 1747052656.5234401 1747052660.2318363 1747052672.2194757 1747052680.016201 1747494465.0081844 1747494465.7188168 1747494469.3196251 1747494477.337838 1747494486.9829397 1747494504.5049129 1747494544.0859094 1747494559.1372905 1747496024.7672715 1747496028.2004454 1747496030.561923 1747496032.7285593 1747496037.386692 1747496038.418993 1747496047.849549 1747496057.4868774 1747496135.6289368 1747560799.4387653 1747560800.5358477 1747560804.0414832 1747560806.5466936 1747560809.9259021 1747560811.1534076 1747560819.0543056 1747560829.0155323 1747560842.1566617 1747572646.5470788 1747572647.390134 1747572648.7524438 1747572652.7892008 1747572654.873262 1747572685.5694017 1747572695.3083656 1747572723.2853117 1747573964.4942021 1747573968.209933 1747573970.4658723 1747573971.2906015 1747573977.1336067 1747573984.4106464 1747573998.8427653 1747574004.6505325 1747574075.1307337 1747574305.2764027 1747574306.1658869 1747574311.2029257 1747574311.6356444 1747574321.143026 1747574323.3239775 1747574333.4431956 1747574354.3533092 1747574406.3318686 1747579511.5783572 1747579512.221208 1747579517.5236735 1747579519.637736 1747579524.4089606 1747579535.953931 1747579545.1393197 1747582487.1076038 1747582493.1306417 1747582493.8906002 1747582496.2982512 1747582519.7728572 1747582521.1929443 1747582651.9926095 1747582654.431721 1747582655.285922 1747582657.8852582 1747582686.572977 1747582696.4993298 1747582720.848927 1747663813.9657867 1747663814.9364848 1747663816.62631 1747663817.6334417 1747663818.8450267 1747663825.5548377 1747663846.4810712 1747663865.7397933 1747663890.7066286 1748067724.2420354 1748067729.804218 1748067745.057909 1748067754.8269758 1748067757.5958548 1748067758.5507638 1748070374.502674 1748070381.6441398 1748070383.3808093 1748070391.5950193 1748070416.2224102 1748070434.3698165 1748070435.555058 1748070436.6042447 1748070476.8085542 1748070496.1171339 1748084467.5058494 1748084468.2441168 1748084474.8024223 1748084477.277225 1748084481.1347795 1748084493.7509103 1748084495.9662008 1748084497.9603918 1748084510.263257 1748262319.461814 1748262326.0824232 1748262332.1754222 1748262336.183644 1748262343.4696805 1748262356.9252026 1748262360.7433844 1748262382.4167514 1748262387.204495 1748456951.5199213 1748456954.1033602 1748456961.047204 1748456962.36518 1748456965.1899178 1748456970.0175683 1748456981.9784403 1748456984.6797266 1748456990.9099953 1748457001.6800666 1748551688.3058105 1748551690.0631135 1748551693.6542091 1748551695.5739806 1748551704.4907575 1748551708.129478 1748551710.4948766 1748551720.0561225 1748551720.7178066 1748551734.3925445 1748687373.7607691 1748687380.5627248 1748687383.7903376 1748687386.032045 1748687394.5852222 1748687396.8480425 1748687398.276464 1748687402.4907308 1748687407.7660398 1748687418.5964398 1748697083.773052 1748697089.4772348 1748697092.8141148 1748697094.1940024 1748697094.9007196 1748697102.0838292 1748697132.8360145 1748697150.0251675 1748697187.1960125 1748702521.1370988 1748702531.4553287 1748702533.9648993 1748702538.197775 1748702544.2479873 1748702559.1965306 1748702563.5938144 1748702614.1509361 1748704845.2390134 1748704846.953144 1748704851.1478662 1748704852.389785 1748704858.6064208 1748704867.4006689 1748704880.0561786 1748704884.7375908 1748704907.1115549 1748704914.9893456 1748707249.4935129 1748707258.156049 1748707267.1819637 1748707278.0714958 1748707288.8793342 1748707295.7226372 1748707657.9277403 1748707665.0076687 1748707668.6328948 1748707670.4473636 1748707672.7199476 1748707676.2001882 1748707686.09082 1748707694.7650838 1748707696.7660286 1748707712.3426354 1748712594.9639416 1748712596.8361835 1748712597.2533367 1748712598.4701526 1748712639.9945111 1748712648.4648838 1748712666.6423347 1748712670.6976936 1748712683.751865 1748712694.838877 1748780697.1300132 1748780707.1812928 1748780710.8320565 1748780713.4933453 1748780714.5160713 1748780720.221217 1748780723.211522 1748780729.3108208 1748780734.3013072 1748780738.1098628 1748787367.9196851 1748787373.6341035 1748787374.8326871 1748787376.6386254 1748787378.22919 1748787393.1979444 1748787403.4755344 1748787413.9729302 1748787459.553451 1748871990.789132 1748871995.020706 1748871996.1685622 1748871999.473268 1748872000.461004 1748872018.3708444 1748872029.4726076 1748872043.0605848 1748872044.5643191 1748878636.3922968 1748878639.2287827 1748878640.8189514 1748878641.4030552 1748878648.2457068 1748878652.9519298 1748878667.3149946 1748878670.2457824 1748878706.71913 1748878718.4691658 1749098719.6553814 1749098720.7774096 1749098724.074082 1749098726.3920724 1749098748.0580766 1749098778.3085325 1749098912.5852885 1749098915.8331559 1749098918.0611174 1749098920.7714863 1749098922.0139832 1749098925.4494755 1749098942.071467 1749098942.7237644 1749098944.6195276 1749098952.1434 1749099136.3788838 1749099148.0185165 1749099148.6944551 1749099174.1283717 1749099194.9333398 1749099200.43662 1749099208.8724835 1749099231.0205483 1749099242.1005156 1749099248.5668106 1749126621.6487837 1749126623.688538 1749126627.3696332 1749126631.3988378 1749126638.2690864 1749126655.0908453 1749126659.7739618 1749126672.561119 1749126705.4273717 1749139750.3806634 1749139754.8162315 1749139755.6006756 1749139759.1034007 1749139760.887557 1749139779.7558067 1749139782.278983 1749139794.1488376 1749139827.5752163 1749205752.9047642 1749205758.0134082 1749205759.1623423 1749205773.9736311 1749205779.741236 1749205782.8816354 1749205792.9915836 1749205800.0576766 1749207436.9932654 1749207439.3376372 1749207442.0507126 1749207444.3223388 1749207450.0089462 1749207461.327043 1749207464.8948407 1749207466.3757741 1749207469.173337 1749207629.3760676 1749207631.3845394 1749207641.1218069 1749207644.51641 1749207650.1583064 1749207651.5605333 1749207652.81352 1749207659.088342 1749207660.1834414 1749207666.5334415 1749218815.2893264 1749218816.950752 1749218818.3285556 1749218822.7867248 1749218830.0134652 1749218850.0837555 1749218853.1024146 1749218874.1123745 1749218877.6380124 1749271867.1203532 1749271875.1028454 1749271875.563298 1749271877.454733 1749271880.210177 1749271892.7287812 1749271895.330672 1749271897.2302961 1749271907.042344 1749280038.2102046 1749280039.1501412 1749280042.1373932 1749280057.7576523 1749280085.8312287 1749280088.9918113 1749280100.0247335 1749280122.1361923 1749280151.82418 1749280164.4802487 1749295833.2289293 1749295838.1579623 1749295839.2984896 1749295843.2131975 1749295843.7777479 1749295845.2553825 1749295846.4326391 1749295854.436964 1749295860.3326712 1749295864.1298404 1749309368.4493246 1749309381.3636708 1749309383.1646597 1749309384.0942638 1749309387.6640103 1749309389.23439 1749309399.0786464 1749309401.8483248 1749309405.5220308 1749309449.2977185 1749310907.467713 1749310909.3287082 1749310916.5364704 1749310917.7325003 1749310920.2343166 1749310933.2956555 1749310935.9080079 1749310938.7189498 1749310982.2758734 1749322674.1674924 1749322675.0894198 1749322677.0391877 1749322691.4998703 1749322697.4724205 1749322701.3889818 1749322712.1984563 1749322712.8898647 1749373634.7000587 1749373638.8944862 1749373640.2385037 1749373648.106886 1749373652.0485783 1749373660.711902 1749373676.109536 1749373681.8637192 1749373724.1735797 1749375217.2968209 1749375220.885726 1749375221.7534225 1749375227.9966497 1749375231.575274 1749375246.927451 1749375250.322288 1749375260.3010128 1749375431.9646034 1749375433.6707664 1749375447.2827883 1749375458.8470395 1749375465.1968532 1749375466.3214815 1749375474.8340738 1749390237.9649787 1749390241.9855897 1749390247.4103007 1749390250.009474 1749390253.2129986 1749390259.3222694 1749390273.1098864 1749390274.645784 1749390276.2960196 1749390334.5760574 1749392242.377895 1749392245.8439276 1749392247.4123716 1749392248.3556786 1749392252.8020425 1749392270.550798 1749392274.6797643 1749392279.2192132 1749392286.722365 1749411613.2145607 1749411614.732268 1749411621.26396 1749411625.9782994 1749411635.3499079 1749411641.017848 1749411642.6818094 1749411645.4244514 1749411651.7081828 1749413924.5660992 1749413925.2623918 1749413931.9420364 1749413937.1102436 1749413939.190069 1749413950.1087549 1749413950.858109 1749413955.1419845 1749413965.2417042 1749475183.4130828 1749475269.0891244 1749475280.846001 1749475300.9858892 1749475424.7997751 1749475439.293529 1749475443.358688 1749475545.3827717 1749475584.8560176 1749475599.222495 1749618634.866136 1749618635.7672427 1749618636.6498623 1749618637.9993894 1749618639.5859237 1749618655.1264527 1749618669.2126846 1749618675.6886957 1749618722.4055316 1749622725.3681571 1749623331.8992586 1749623338.5948672 1749624021.5295086 1749624027.1660826 1749624034.3393967 1749624059.3551826 1749624065.3029423 1749624089.2069666 1749624112.0961478 1749624156.4944594 1749627557.6170328 1749627563.7709548 1749627566.3929112 1749627599.0472715 1749627602.9159732 1749627603.3838735 1749627613.2461598 1749627645.581141 1749627661.1322215 1749631132.487801 1749631137.7846777 1749631139.412108 1749631142.746514 1749631146.1334321 1749631155.0891125 1749631161.494069 1749631166.674999 1749631176.7612834 1749631201.0510392 1749632884.8329377 1749632887.012211 1749632888.9150484 1749632893.6216717 1749632894.5124671 1749632896.1735542 1749632902.2687907 1749632921.3957534 1749632935.7908692 1749632951.6520977 1749633187.2506747 1749633190.3788958 1749633191.4032943 1749633195.3396616 1749633196.1310704 1749633197.259268 1749633216.1033268 1749633239.4701803 1749633312.8432822 1749633320.344461 1749634764.6499696 1749634767.173367 1749634771.523061 1749634773.3909554 1749634779.5950031 1749634781.118316 1749634787.29547 1749634805.5617473 1749634810.9764915 1749634814.2035315 1749640748.4963331 1749640749.7684474 1749640750.2619064 1749640754.7561483 1749640766.8769314 1749640790.1035645 1749640790.9451928 1749640801.2948 1749640805.6763635 1749655238.0478213 1749655247.8873465 1749655259.6407182 1749655286.745856 1749655303.6456158 1749655305.511278 1749655312.70322 1749655325.0117638 1749655398.9007478 1749712651.54721 1749712655.934081 1749712657.8582826 1749712661.6096082 1749712668.4279766 1749712680.4651814 1749712686.21438 1749712699.3320618 1749721830.855182 1749721834.6855922 1749721835.5651665 1749721836.6144137 1749721841.478143 1749721843.8823774 1749721855.1086738 1749721867.9388387 1749721875.0416765 1749721879.2328339 1749732133.6596942 1749732135.3497596 1749732141.655937 1749732144.1405883 1749732145.5692327 1749732158.3680172 1749732180.1515033 1749732183.9803326 1749736582.9264092 1749736585.354908 1749736587.0578477 1749736595.4875488 1749736597.2588503 1749736614.8722656 1749736616.2536585 1749736626.8954155 1749736644.5392482 1749736645.7009246 1749739531.1874294 1749739533.13513 1749739533.6555822 1749739535.965754 1749739537.7629826 1749739549.3384633 1749739563.0764222 1749739564.1078699 1749739579.6870344 1749739583.0480855 1749740339.83903 1749740342.3714132 1749740350.120534 1749740350.6521754 1749740352.1002567 1749740355.49081 1749740366.1328075 1749740375.3159406 1749740392.1473715 1749740471.082113 1749747046.3999448 1749747050.4988081 1749747051.2065408 1749747053.0657842 1749747073.8171906 1749747079.023346 1749747108.931413 1749747114.5529356 1749747126.137808 1749747129.3645394 1749748428.7751336 1749748429.2344713 1749748431.537067 1749748432.2051632 1749748434.882207 1749748456.9194813 1749748463.0082138 1749748490.8282359 1749748491.2097864 1749750799.0156703 1749750800.096002 1749750806.0923882 1749750810.6573071 1749750818.1064825 1749750820.5025675 1749750832.1615047 1749750840.0820537 1749750849.3169732 1749750880.6903806 1749752263.3721592 1749752269.0241702 1749752271.5187314 1749752272.3386934 1749752274.153682 1749752297.2797587 1749752308.4526787 1749752332.3235343 1749752373.8145905 1749811480.761157 1749811482.7338417 1749811484.0564961 1749811486.8999205 1749811487.9248195 1749811495.0833464 1749811507.1862533 1749811511.639231 1749811514.662488 1749811517.533321 1749812344.3792236 1749812350.206982 1749812351.204563 1749812352.4549727 1749812353.6899989 1749812366.166027 1749812373.4487863 1749812375.8403049 1749812380.6793523 1749812381.9697902 1749815170.9090002 1749815171.9317243 1749815174.630299 1749815175.2614148 1749815179.4528818 1749815187.344421 1749815196.1581042 1749815203.8359156 1749815206.6176918 1749815259.4852054 1749859758.6398895 1749859761.2934213 1749859763.734038 1749859767.986022 1749859775.409929 1749859776.3732328 1749859795.550158 1749859802.2851381 1749859805.429732 1749859832.0472 1749902075.1299372 1749902075.6157472 1749902076.5964658 1749902079.499213 1749902080.878528 1749902097.4279869 1749902101.63446 1749902107.435497 1749902112.4152546 1749904577.0686636 1749904583.3769503 1749904586.4636397 1749904589.030314 1749904591.9222016 1749904592.8966002 1749904612.8343856 1749904617.307598 1749904626.4113624 1749904662.8498883 1749912211.7811341 1749912214.2153661 1749912218.1345556 1749912219.715525 1749912223.5604692 1749912225.5720553 1749912240.9375608 1749912241.9256985 1749912291.2109222 1749912298.7625544 1750076546.501283 1750076550.6776783 1750076555.6073227 1750076556.5223265 1750076558.0226476 1750076562.8913903 1750076578.3625565 1750076588.2349954 1750076598.8494236 1750076666.8024526 1750112020.9380093 1750112029.2343192 1750112031.7011588 1750112032.4458618 1750112051.2178729 1750112057.2509675 1750112063.4932077 1750112085.0010915 1750112581.7224362 1750112703.9725606 1750112705.7631092 1750112735.3743072 1750112762.3768733 1750112787.421681 1750112792.8325596 1750112793.4704797 1750112807.3919795 1750112819.946196 1750113253.1045556 1750113253.899241 1750113258.1956327 1750113263.9384453 1750113267.0486717 1750113277.0779586 1750113279.327918 1750113283.3153214 1750113322.4880247 1750146864.5753095 1750146868.7486885 1750146872.6152499 1750146874.7673848 1750146893.0411189 1750146897.522212 1750146898.8933263 1750147032.4358764 1750147034.0832617 1750147035.2034974 1750147062.851591 1750147071.3774083 1750147082.1078281 1750147166.2895048 1750147201.5141869 1750147233.0696373 1750147257.1892726 1750147853.784512 1750147859.530698 1750147866.428959 1750147883.1651356 1750147887.1592982 1750147896.8126338 1750147911.3134596 1750147920.819351 1750200358.6303794 1750200360.5763211 1750200361.920015 1750200365.099988 1750200374.0899963 1750200382.0526805 1750200389.6803308 1750200395.137887 1750200395.946482 1750319130.497368 1750319132.5684865 1750319167.7384648 1750319174.36161 1750319198.0307698 1750319218.6176298 1750319238.455424 1750319245.6904848 1750319251.9066992 1750335677.7313075 1750335681.838659 1750335682.2718496 1750335683.2765782 1750335702.586242 1750335712.588418 1750335767.6190648 1750502963.2558582 1750502972.8640456 1750502977.842085 1750502980.354517 1750502983.038681 1750502985.054749 1750502988.6171334 1750502993.587592 1750502997.7213852 1750505662.371309 1750505673.4059393 1750505694.1069899 1750505694.99598 1750505699.495038 1750505700.1377063 1750505840.6451004 1750505842.494917 1750505847.6640582 1750505849.7305999 1750505851.670657 1750505854.782527 1750505863.8916667 1750505867.5244918 1750505876.7239835 1750505886.9933908 1750516320.2753 1750516323.3719172 1750516324.494533 1750516325.2255218 1750516331.5726774 1750516335.0856616 1750516348.0861354 1750516348.7241356 1750516353.4451141 1750516353.9589283 1750516620.4199061 1750516625.3062873 1750516626.4206717 1750516630.5137868 1750516631.5460155 1750516654.8093772 1750516661.3673344 1750516662.9118385 1750516685.066775 1750520688.892653 1750520691.3227167 1750520698.1969924 1750520701.2254708 1750520707.2675326 1750520714.714345 1750520722.506279 1750520779.4648824 1750591023.2526793 1750591029.7906947 1750591033.6760864 1750591038.2577965 1750591039.5859969 1750591041.75532 1750591046.325174 1750591053.242928 1750591055.9179752 1750591059.8156152 1750619759.270681 1750619760.5961554 1750619766.6795948 1750619768.1111012 1750619772.7757778 1750619775.6570215 1750619790.4443107 1750619794.4791846 1750619796.7462895 1750619850.7801914 1750620339.5018923 1750620345.732223 1750620355.8457134 1750620376.2872174 1750620412.3427517 1750620419.4820836 1750620421.2609086 1750620446.5260575 1750622090.78472 1750622091.7098215 1750622096.1691563 1750622100.6803923 1750622104.9237328 1750622105.8404343 1750622113.7479684 1750622123.2251766 1750622124.337181 1750622129.6151385 1750681291.965105 1750681295.2112973 1750681300.780856 1750681305.2473927 1750681306.0782137 1750681309.1641443 1750681341.3806005 1750681441.8443985 1750940633.0334418 1750940637.7753532 1750940642.7058442 1750940644.2142265 1750940648.1112323 1750940660.8890212 1750940663.1971006 1750940666.7814307 1750940687.7098012 1750940742.4480157 1751110725.2078402 1751110729.1739366 1751110730.3148015 1751110733.9212723 1751110735.1801746 1751110741.2618518 1751110752.2854383 1751110757.2074318 1751110758.8447082 1751110790.1221993 1751114981.6072633 1751114982.9551451 1751114983.3459275 1751114986.7715294 1751114991.1609395 1751114991.9845252 1751115010.1980166 1751115017.4232025 1751115053.0503392 1751115066.730599 1751189470.2953637 1751189472.289429 1751189476.6330023 1751189481.17639 1751189481.9573102 1751189484.8299835 1751189494.7784457 1751189507.0900698 1751189551.5453267 1751191153.15442 1751191157.4138577 1751191160.6247377 1751191167.3223672 1751191178.041022 1751191182.9582558 1751191187.4798217 1751191231.0580914 1751210541.5037293 1751210542.6481793 1751210546.0688426 1751210565.4190056 1751210576.4266472 1751210602.0677116 1751210612.8193116 1751210617.5654838 1751210639.9121401 1751210761.052541 1751210763.1451428 1751210764.1585217 1751210765.6493883 1751210774.2062628 1751210786.4356728 1751210797.3688347 1751210800.8474517 1751210842.0230649 1751286298.5361385 1751286299.0539618 1751286309.9448109 1751286330.4786575 1751355143.6259344 1751355146.68288 1751355147.7218432 1751355156.6756976 1751355165.9402833 1751355173.8904796 1751355175.9409008 1751355188.7918036 1751355226.6272078 1751545581.0122294 1751545586.6132703 1751545593.6615384 1751545594.7327814 1751545596.5224533 1751545616.781041 1751545624.3310037 1751545681.4531589 1751545704.627739 1751725818.967529 1751725819.5161512 1751725821.5602055 1751725823.2456803 1751725824.4361553 1751725834.479581 1751725852.156433 1751725853.304842 1751725897.3900046 1751725905.7422347 1751730085.9102023 1751730087.9532862 1751730089.7864442 1751730092.5901027 1751730097.7223408 1751730098.6084144 1751730115.5875676 1751730118.519118 1751730165.6099408 1751730181.8135753 1751732874.3393655 1751732875.3494453 1751732877.5679533 1751732883.9959602 1751732888.6535351 1751732895.8564885 1751732900.8064644 1751732906.3657126 1751732912.9698772 1751740009.8792338 1751802647.7944303 1751802649.198215 1751802653.345696 1751802659.375122 1751802663.2127845 1751802674.4501565 1751802677.4429996 1751802682.8299348 1751802688.28721 1751853616.4622428 1751853620.6045835 1751853622.8813455 1751853627.6323647 1751853628.3295627 1751853630.8563719 1751853640.4701383 1751853645.9375217 1751853647.1251276 1751853652.3462539 1751888466.2609575 1751888467.4893453 1751888470.644313 1751888471.5961049 1751888474.367563 1751888475.778744 1751888493.6230636 1751888511.9997575 1751888555.5523255 1751888594.5809436 1751977069.6957645 1751977071.599551 1751977078.172867 1751977081.300183 1751977087.1417215 1751977093.7141619 1751977100.8432062 1751977139.7281485 1751977179.9199867 1751978326.1916354 1751978328.4840539 1751978338.9560432 1751978341.3715274 1751978357.1786745 1751978367.2191665 1751978372.2492654 1751978383.1259727 1751980162.3040843 1751980174.3750544 1751980175.5560195 1751980178.9389732 1751980184.242051 1751980198.1207654 1751980210.761367 1751980236.0854242 1751981521.3733516 1751981561.7564917 1752053337.3207977 1752053338.8619225 1752053341.3972442 1752053346.3473854 1752053350.2991476 1752053351.9596155 1752053366.2021606 1752053377.5975795 1752053450.5912552 1752057310.3442078 1752065104.6770759 1752065107.2878308 1752065108.424729 1752065109.805908 1752065111.1052766 1752065134.5520885 1752065142.4615617 1752065157.0391557 1752066731.5141857 1752066733.6911905 1752066735.0969563 1752066738.4530632 1752066739.4971445 1752066761.0648172 1752066772.953822 1752066801.1133144 1752067159.2773154 1752068830.9687135 1752068832.173346 1752068835.5154512 1752068839.5407856 1752068846.499726 1752068863.1123843 1752068874.2521362 1752068926.1676552 1752068934.778435 1752205661.7582107 1752205666.3036857 1752205666.8440635 1752205668.3498464 1752205678.4908006 1752205679.9102979 1752205691.515887 1752205705.4272656 1752220171.244901 1752220175.9887323 1752220177.0568392 1752220178.3969288 1752220180.7236824 1752220181.7845435 1752220191.9305685 1752220207.8247237 1752220217.7638764 1752220251.2989273 1752249865.716855 1752249869.9362595 1752249870.4005945 1752249881.748938 1752249892.8276708 1752249896.8790243 1752249908.8752942 1752249917.4683437 1752317363.4795117 1752317370.0336106 1752317390.3611355 1752317398.607496 1752317400.3005273 1752317401.024259 1752317406.7781847 1752317423.9100559 1752317436.6103513 1752317447.8547115 1752319914.6331575 1752319915.4795966 1752319926.760566 1752319941.802452 1752319954.2052486 1752319961.5241613 1752320014.6087837 1752320016.6784222 1752336325.0512245 1752336333.917163 1752336387.8570414 1752406193.7112389 1752406194.5214336 1752406195.635355 1752406199.4264512 1752406204.7821202 1752406220.247316 1752406226.2589955 1752406232.176263 1752406283.0001185 1752406308.260031 1752407210.996911 1752407211.828674 1752407214.9152431 1752407218.776768 1752407233.0008824 1752407248.180142 1752407253.493582 1752407254.4523447 1752407255.5309138 1752407256.869781 1752411688.2908175 1752411690.4053566 1752421497.2642744 1752421498.495637 1752421521.409316 1752421527.077749 1752421529.294662 1752421541.667016 1752421542.9554195 1752421566.3176177 1752421567.4761708 1752422206.6630602 1752422216.0846853 1752422240.574253 1752422243.658565 1752422733.8036196 1752424983.430937 1752425015.0811005 1752425032.2356212 1752425033.2287548 1752425033.9963248 1752425035.8940485 1752425046.9963098 1752425077.1100595 1752425103.4793208 1752426778.1639986 1752426780.7987607 1752426784.201647 1752426791.5249655 1752426804.0015364 1752426808.0771294 1752426848.8854136 1752426862.0891616 1752428571.8599634 1752433661.8094244 1752433662.9587271 1752433664.1917112 1752433685.771401 1752433696.9874265 1752433700.9476068 1752433705.246769 1752433706.4015415 1752433747.4182 1752433753.9025729 1752455476.2998357 1752455479.6996272 1752455482.2440193 1752483546.3578281 1752483551.9453197 1752483553.252048 1752483556.7156012 1752483568.962246 1752483584.3881648 1752483591.3398833 1752483592.6544354 1752483645.051297 1752484105.6790297 1752484170.1442206 1752484791.816609 1752484834.8382723 1752581294.7668931 1752581300.203477 1752581301.6654656 1752581306.5516346 1752581309.2304502 1752581319.2380588 1752581334.545645 1752581335.531903 1752581350.2245443 1752653208.11366 1752653214.7264032 1752653215.6132576 1752653220.876051 1752653222.770341 1752653235.1640432 1752653242.5288699 1752653252.4051535 1752653338.5787513 1752655341.0746193 1752655344.7018456 1752655351.8267777 1752655353.770705 1752655365.720272 1752655367.9655826 1752655372.2233975 1752655379.8366141 1752655380.969712 1752658083.33107 1752658095.3492181 1752658097.3265333 1752658103.705013 1752658119.4050083 1752658125.6491268 1752658140.1298707 1752658157.0762637 1752662380.6002362 1752662381.4293406 1752662385.4971538 1752662391.565842 1752662399.0018964 1752662414.0315292 1752662414.9375114 1752662422.1790829 1752666174.9191167 1752666196.5410588 1752666212.8757172 1752667013.887674 1752668577.7272162 1752668578.4540179 1752668581.5293293 1752668583.950793 1752668588.5230892 1752668599.85014 1752668600.7181296 1752668612.5240064 1752668638.3085136 1752674979.3560166 1752695230.498447 1752695233.0964093 1752695237.1934483 1752695240.3221178 1752695250.9757826 1752695252.022823 1752695262.6248226 1752695265.9665592 1752755414.5913417 1752755416.6762884 1752755417.4517312 1752755422.1348903 1752755428.7812822 1752755441.3666263 1752755447.8217468 1752755463.3045473 1752755550.326027 1752815598.8271685 1752815602.4160266 1752815609.0523677 1752815612.2074547 1752815613.9390266 1752815626.9855943 1752815628.551522 1752815697.9424307 1752824171.8763149 1752824175.7537646 1752824177.8018596 1752824180.0683246 1752824181.5045102 1752824187.5248275 1752824203.2315161 1752824205.9222045 1752824212.0189817 1752909344.2239141 1752909344.6388516 1752909346.401105 1752909355.5477102 1752909366.23498 1752909372.353175 1752909434.874642 1752931130.6346424 1752931131.467248 1752931140.8398387 1752931142.9503345 1752931155.0360262 1752931179.6947343 1752931212.4887893 1752931217.1517313 1752931226.8343508 1752931325.5797493 1752931985.5287938 1752931989.3067138 1752931991.956637 1752931996.0261855 1752932012.876879 1752932021.4536695 1752932022.7543962 1752932060.5794108 1752938384.516586 1752938386.0041265 1752938388.9465365 1752938391.062609 1752938396.614473 1752938420.788231 1752938429.9272988 1752938463.618736 1752938586.3024359 1753081920.181048 1753081924.5152 1753081932.0630558 1753081942.4622169 1753081951.253088 1753081965.0180943 1753081969.2437797 1753082037.394756 1753082089.858027 1753082090.9234664 1753090707.2661088 1753090712.8956099 1753090714.5297365 1753090715.4559264 1753090718.6303651 1753090739.0777605 1753090744.614489 1753090779.8588169 1753090816.3522484 1753109852.260959 1753109860.0056849 1753109861.4736617 1753109862.2648656 1753109866.242469 1753109872.8958058 1753109885.6476934 1753109888.1732457 1753109898.4354076 1753109954.9590533 1753527778.5117466 1753527779.731848 1753527780.577084 1753527791.3466794 1753527801.5885005 1753527810.1640723 1753527816.8174925 1753527845.6910954 1753527875.0335333 1753528087.7175646 1753528091.62572 1753528095.123978 1753528097.9584997 1753528111.0641444 1753528121.4111438 1753528124.0014498 1753528191.185296 1753528771.9768803 1753528772.6663513 1753528780.6560063 1753528781.3893888 1753528792.0522988 1753528795.6139822 1753528803.8401124 1753528805.3791673 1753543354.5843496 1753543368.8904924 1753543381.8730474 1753543389.7707224 1753543400.0396738 1753543401.9568622 1753543423.2695198 1753543426.357917 1753543427.0342505 1753543436.3947318 1753547961.6327457 1753547964.9480078 1753547972.7431076 1753547977.264395 1753547978.7783508 1753547983.9778428 1753547987.5205367 1753547995.981038 1753547997.829545 1753548003.2144182 1753549710.751082 1753555073.117537 1753555075.194001 1753555080.1292431 1753555081.6338127 1753555084.8535955 1753555085.9333053 1753555102.253864 1753555104.3959394 1753555105.8811164 1753555109.921584 1753557013.7667754 1753557019.6222768 1753557021.1462777 1753557023.7295516 1753557037.9135652 1753557039.2593813 1753557053.3965182 1753557114.414277 1753560209.107383 1753607412.7562165 1753607413.8237505 1753607414.9938471 1753607415.4590468 1753607451.9975915 1753607465.7359056 1753607479.331 1753607488.4349377 1753619523.7802236 1753621634.870607 1753621636.5215642 1753621639.034233 1753621645.05623 1753621647.4843652 1753621653.1763496 1753621660.2784498 1753621668.1427321 1753621727.8170462 1753624311.93218 1753624312.5691931 1753624319.2812183 1753624322.309761 1753624325.2693536 1753624342.1486804 1753624343.0279913 1753624343.6775765 1753624379.7460775 1753624421.0528874 1753628448.1217368 1753628452.4393914 1753628457.8755803 1753628468.61442 1753628478.814922 1753628496.1882634 1753628506.2181995 1753628510.35918 1753633880.8245702 1753633884.0189211 1753633888.1368659 1753633889.9688065 1753633894.9289176 1753633909.2709587 1753633912.9586463 1753633914.656439 1753633974.4984894 1753634196.9595485 1753634198.4258742 1753634200.7588377 1753634202.8742635 1753634214.523655 1753634221.3979316 1753634222.6455235 1753634232.2655947 1753634235.5019648 1753635790.6564934 1753635801.1622255 1753635804.1653693 1753635805.7986543 1753635806.8686574 1753635810.6662238 1753635828.0595148 1753635834.7401557 1753635875.2372122 1753635906.12679 1753637939.8341918 1753637941.723922 1753637946.156286 1753637947.7580767 1753637950.0366821 1753637961.358346 1753637979.3405824 1753638007.4410455 1753642653.8151813 1753705434.0385585 1753705437.3170333 1753705440.9904394 1753705446.1188889 1753705447.3851764 1753705450.675415 1753705471.9571779 1753705475.4415438 1753705505.6278014 1753705534.4087162 1753964919.8963556 1753964928.974177 1753964932.0748856 1753964932.9618192 1753964941.4599595 1753964963.5642147 1753964987.6735666 1753965027.0833921 1754050030.3789477 1754050035.0561054 1754050040.0168066 1754050044.233994 1754050054.4163415 1754050064.863411 1754050067.0610914 1754050073.1985257 1754050081.106659 1754050116.7667983 1754051714.1005504 1754147464.6104853 1754147466.0603118 1754147466.8723512 1754147469.322801 1754147471.4604385 1754147480.567856 1754147488.5365741 1754147494.9528346 1754147496.3750696 1754147541.0013463 1754147901.1338613 1754147902.1700509 1754147903.5346334 1754147910.526371 1754147913.5406568 1754147922.1252503 1754147926.2353654 1754147930.73985 1754147934.617274 1754147937.192003 1754154724.6913762 1754154727.3907928 1754154729.7545896 1754154732.281492 1754154733.0530417 1754154743.6075919 1754154757.663202 1754154771.1261935 1754154776.5890312 1754154815.3744185 1754161692.0995958 1754161693.8928325 1754161698.0712461 1754161701.2578607 1754161702.7071328 1754161722.8262532 1754161734.993284 1754161811.8192391 1754161831.204044 1754163693.6155944 1754163701.2349622 1754163704.9144213 1754163705.781919 1754163707.3302922 1754163717.1612923 1754163732.095443 1754163733.6481328 1754163795.264803 1754210911.854374 1754210914.495917 1754210915.6907413 1754210917.0608191 1754210921.2635305 1754210923.115985 1754210941.8069832 1754210942.7540262 1754210945.496934 1754211020.0348015 1754219489.6631823 1754219490.1588373 1754219490.7965908 1754219492.7039154 1754219494.8038013 1754219498.2529283 1754219519.982066 1754219525.1832073 1754219527.7887845 1754219562.5918531 1754221986.949188 1754221993.6517015 1754222013.344442 1754222086.263555 1754222139.0420344 1754222170.0545282 1754222202.5397425 1754222232.3531396 1754222259.1345057 1754222261.757903 1754223031.4519022 1754223031.9048984 1754223033.2070441 1754223036.2916546 1754223038.8532968 1754223040.5199792 1754223067.7043796 1754223070.026523 1754223115.7667549 1754223133.9409313 1754223591.5066426 1754223593.0655425 1754223595.2943885 1754223599.7125196 1754223608.6046302 1754223613.470199 1754223619.4759579 1754223632.459162 1754223681.8974965 1754228561.1553266 1754228562.819451 1754228563.6393201 1754228569.5833647 1754228570.3724957 1754228589.3824787 1754228591.2490494 1754228627.380794 1754228639.0961065 1754232590.2389843 1754232591.4989154 1754232593.2010121 1754232595.9642012 1754232616.50332 1754232621.5638747 1754232639.7652113 1754232674.7439165 1754233070.4743738 1754233072.0152574 1754233073.9464557 1754233075.2448533 1754233079.4979722 1754233080.141323 1754233092.7940302 1754233104.017456 1754233144.346957 1754233162.5799844 1754239909.7946708 1754239915.5617726 1754239916.4486494 1754239935.9771721 1754239984.2906501 1754239990.9896011 1754240011.013253 1754240017.1374927 1754240049.960765 1754240081.5875914 1754293574.2338655 1754293575.0399668 1754293581.1391838 1754293581.863938 1754293603.6632936 1754293613.1434186 1754293618.4339972 1754293679.7011929 1754310285.6145704 1754310291.0624673 1754310294.4581003 1754310295.5655785 1754310296.365084 1754310297.6415553 1754310318.1626227 1754310321.7382398 1754310364.1850843 1754310405.4504304 1754317826.9290524 1754317830.7565248 1754317832.2182643 1754317840.799902 1754317843.7951312 1754317852.457583 1754317853.4192817 1754317862.7597876 1754317868.896572 1754317887.399214 1754318775.8339396 1754318779.9629686 1754318783.297025 1754318784.222822 1754318785.2888439 1754318786.5568762 1754318806.1119292 1754318820.514628 1754318827.4494452 1754323040.2911096 1754323045.0321183 1754323051.0663688 1754323054.277648 1754323055.6279497 1754323061.1204603 1754323069.822695 1754323077.3025553 1754323079.2780805 1754323084.750792 1754323667.7419314 1754323668.2115483 1754323672.5697134 1754323673.6980371 1754323675.405283 1754323677.4616768 1754323689.9075372 1754323705.4609141 1754323708.592731 1754323736.7744064 1754326223.9695542 1754326224.8513129 1754326230.1929665 1754326231.4682832 1754326235.9761422 1754326241.1815274 1754326257.2851758 1754326261.3494196 1754326263.654178 1754326283.3476288 1754330387.2604 1754330390.003617 1754330391.219144 1754330400.809656 1754330402.4465642 1754330414.9430423 1754330422.6040044 1754330437.9510179 1754330474.04123 1754334084.6124992 1754334085.1113546 1754334086.7677271 1754334207.156391 1754334209.7791314 1754334212.4710393 1754334216.8630707 1754334335.936511 1754334337.392412 1754334340.5175052 1754334344.0764573 1754334347.05312 1754334349.616821 1754334358.0505111 1754334359.6280644 1754334374.6576247 1754334409.232203 1754394229.9115093 1754394236.1680892 1754394236.9868488 1754394246.1246827 1754394249.1736414 1754394264.3860807 1754394275.5825715 1754394318.6056807 1754394343.5812619 1754569418.2930825 1754569421.837108 1754569423.1742985 1754569425.1570497 1754569425.9239967 1754569438.7803164 1754569459.056397 1754569474.1716316 1754569488.3651893 1754569492.8347008 1754638639.458234 1754638642.5091085 1754638644.0283828 1754638646.775579 1754638651.3673298 1754638652.4136136 1754638668.26929 1754638677.3526635 1754638685.0813951 1754638748.8697855 1754657291.6403043 1754657292.4744985 1754657293.3465893 1754657293.950285 1754657294.4197512 1754657300.9399118 1754657317.3675215 1754657318.825882 1754657323.5254388 1754657377.0663774 1754661010.431923 1754661013.0314443 1754661014.0538993 1754661015.0904381 1754661016.855073 1754661021.683792 1754661031.7809405 1754661044.7760146 1754661095.190606 1754661130.862394 1754665151.962033 1754665156.751902 1754665157.7375376 1754665158.3834746 1754665289.112908 1754665293.585181 1754665294.382669 1754665297.2250502 1754665298.1869934 1754665299.79884 1754665312.295892 1754665321.8710375 1754665407.6290948 1754665429.5629325 1754718004.3929446 1754718008.645443 1754718009.6582825 1754718012.0243857 1754718014.016908 1754718033.9542181 1754718037.3497593 1754718049.4169745 1754718085.8459666 1754836471.9137306 1754836475.0375721 1754836476.062699 1754836486.104762 1754836487.8068762 1754836488.857057 1754836503.0423374 1754836508.6906729 1754836512.319106 1754836547.3170414 1754838744.581556 1754838745.8280544 1754838750.7695951 1754838754.3971465 1754838755.6916676 1754838762.0266268 1754838769.3110466 1754838775.5133567 1754838778.344381 1754838815.906733 1754915022.5220096 1754915028.4145112 1754915041.4452024 1754915058.7874146 1754915063.0782726 1754915064.996402 1754915074.0698926 1754915083.2008886 1754915091.6328013 1754922333.0725238 1754922339.0960412 1754922340.0241008 1754922341.0449069 1754922369.3095813 1754922375.015952 1754922388.706176 1754922397.81592 1754922423.6951694 1754923112.3074675 1754923118.1217208 1754923119.0933652 1754923123.9948857 1754923126.5217292 1754923132.298002 1754923139.7730455 1754923150.893455 1754923160.6324568 1754923223.8065531 1754929456.570865 1754929457.672234 1754929459.015023 1754929462.5595443 1754929490.6316092 1754929502.694461 1754929526.2692955 1754934106.7113538 1754934110.5575802 1754934114.0763226 1754934114.9115584 1754934115.913665 1754934118.5307214 1754934135.6748009 1754934136.9377642 1754934142.065675 1754934146.296465 1754989412.0507722 1754989415.5522845 1754989420.1753516 1754989424.8790295 1754989426.334825 1754989440.0370219 1754989453.069252 1754989456.1419594 1754989475.0667217 1754990713.266655 1754990721.2494721 1754990725.910558 1754990729.4249978 1754990744.5967226 1754990746.6091092 1754990774.8629506 1754990805.56848 1754998738.3181512 1754998741.2028167 1754998743.5358863 1754998748.5763028 1754998754.2024612 1754998769.7436988 1754998771.4340525 1754998792.499069 1754998810.9800005 1755091295.2237508 1755091297.6697185 1755091317.6695251 1755091359.6534734 1755091379.2650094 1755091389.5992413 1755091446.0126197 1755091451.158804 1755091452.5178423 1755092520.1772451 1755092522.9319377 1755092525.882438 1755092528.8732014 1755092535.9946783 1755092542.6943703 1755092551.4624476 1755092565.35118 1755092616.3713923 1755103831.1122003 1755103834.7719872 1755103837.5307035 1755103840.1106188 1755103843.8362675 1755103859.6927347 1755103866.9314835 1755103877.1440673 1755103931.2784662 1755155603.910527 1755155605.1707687 1755155609.4332795 1755155616.694992 1755155620.9042776 1755155640.531146 1755155646.57202 1755155685.840037 1755161637.7376566 1755161641.828701 1755161646.806685 1755161651.1506295 1755161652.0224833 1755161653.3682384 1755161669.3750222 1755161672.1709075 1755161717.191939 1755161725.931677 1755173000.5957315 1755173001.9000506 1755173008.8519778 1755173014.1254952 1755173014.787355 1755173030.2924156 1755173034.162322 1755173048.7866387 1755173086.536405 1755174292.8822558 1755174295.428002 1755174298.603928 1755174302.125032 1755174321.4670026 1755174378.398244 1755174503.4448552 1755185730.874194 1755185734.3135548 1755185741.2811418 1755185744.5252283 1755185760.6697218 1755185771.0018182 1755185792.5674508 1755185810.4147518 1755186662.427318 1755186666.3672824 1755186672.139668 1755186674.701527 1755186676.5207224 1755186682.5460482 1755186686.701402 1755186702.0690258 1755186732.0374315 1755186750.6634238 1755242389.8940303 1755242391.9020832 1755242419.277163 1755242504.6928837 1755242508.6852958 1755242675.5390825 1755242703.2035072 1755242710.6229627 1755242712.8987422 1755242716.3719594 1755519829.5844069 1755519833.5935352 1755519836.9904127 1755519838.9582396 1755519855.558081 1755519860.363573 1755519868.8485646 1755519920.6822896 1755519942.2387319 1755527975.6788986 1755527978.651766 1755527986.416013 1755527988.6062543 1755527991.0238554 1755528001.242443 1755528019.8285203 1755528023.381777 1755528035.2184818 1755528470.930902 1755528476.349847 1755528477.7076178 1755528481.463617 1755528487.8090794 1755528488.694744 1755528509.8624043 1755528518.2550066 1755528537.321938 1755528556.6828933 1755528766.6240294 1755528772.6573496 1755528774.334497 1755528775.8850696 1755528786.5289903 1755528793.721394 1755528806.0284948 1755528811.3382447 1755528822.3104265 1755528858.0835721 1755529302.2824957 1755529309.1301937 1755529309.8924468 1755529313.6042178 1755529314.6411026 1755529320.2343986 1755529329.5999422 1755529369.8951874 1755529397.511248 1755529409.5458014 1755529792.449044 1755529798.3453658 1755529799.4744263 1755529803.6671424 1755529807.9614284 1755529815.5547583 1755529824.5668454 1755529829.2762125 1755529851.870933 1755529893.2305694 1755530370.323989 1755530373.193505 1755530374.3619177 1755530379.4706616 1755530391.7684755 1755530393.832497 1755530398.6746159 1755530408.721917 1755530453.613735 1755542546.745977 1755542553.4601243 1755542557.5791974 1755542560.4875047 1755542562.3357222 1755542575.9021316 1755542587.4253993 1755542606.7538378 1755542620.2706878 1755542679.175511 1755581239.3919017 1755581242.9592192 1755581248.0982115 1755581250.362873 1755581251.9973235 1755581273.6017663 1755581278.112134 1755581279.7596714 1755683205.293422 1755683208.4407446 1755683215.296143 1755683216.3164744 1755683232.1347709 1755683237.1703007 1755683265.6661882 1755683564.564526 1755697365.6706383 1755697367.8462865 1755697368.8814843 1755697372.6754832 1755697374.0597286 1755697406.1362655 1755697408.9832134 1755697466.2167993 1755697471.2026734 1755767335.8241048 1755767337.7761495 1755767341.8543706 1755767346.6528404 1755767360.1526518 1755767365.7380254 1755767369.697219 1755767423.1748812 1755767430.7915325 1755771307.2372272 1755771310.1699429 1755771314.0174656 1755771317.4156752 1755771324.4522014 1755771343.920328 1755771348.0819685 1755771413.535651 1755771426.3374026 1755779051.9380424 1755779058.067354 1755779060.7318432 1755779065.6053112 1755779067.91052 1755779069.9747307 1755779122.3255653 1755779159.1961684 1755779190.2349162 1755781750.1219249 1755781750.584925 1755781753.7838068 1755781760.9929872 1755781775.3233852 1755781777.7456393 1755781790.3588195 1755781816.2886713 1755858351.8479357 1755858354.3661966 1755858355.4653335 1755858360.082173 1755858363.541813 1755858383.3070207 1755858392.2707088 1755858450.284916 1755858453.2151356 1755864810.5204973 1755864817.79521 1755864819.666758 1755864821.992026 1755864827.1484685 1755864830.7505047 1755864836.0561144 1755864904.5799057 1755864911.224088 1755871864.7463403 1755871865.700705 1755871874.3711174 1755871876.8395483 1755871881.203033 1755871888.7127476 1755871899.9997368 1755871916.2245448 1755871917.60044 1755871945.770296 1755872178.8943074 1755872186.983504 1755872191.7687752 1755872194.5346866 1755872196.1832926 1755872205.9670317 1755872214.1981487 1755872276.6107228 1755872284.6054552 1755944928.0758238 1755944929.0181148 1755944932.1404448 1755944934.0511243 1755944950.4044645 1755944961.2118134 1755945024.5262923 1755945120.3629444 1755963202.5901458 1755963203.293085 1755963205.8935375 1755963212.2584286 1755963212.8997407 1755963222.6679978 1755963230.8555262 1755963231.9183908 1755963241.3830926 1755963397.9453433 1755963400.998559 1755963402.6345365 1755963412.4104345 1755963417.763777 1755963422.6026397 1755963428.342291 1755963439.6799586 1755963476.2933767 1755965151.6507125 1755965154.912003 1755965156.7904503 1755965165.3828666 1755965179.8125389 1755965182.3996332 1755965189.1981287 1755965238.6140528 1755966626.6175234 1755966627.3063796 1755966628.7057528 1755966631.0783293 1755966634.8012874 1755966639.2691996 1755966659.2272258 1755966666.8914418 1755966670.3490558 1755966703.7870758 1755967612.8714328 1755967613.6729198 1755967623.4443798 1755967624.2040484 1755967626.7955487 1755967632.0557587 1755967643.0482206 1755967653.0765295 1755967695.3965862 1756033999.6928086 1756034001.3570006 1756034002.3976445 1756034004.5353584 1756034016.0064967 1756034045.3250484 1756034074.433641 1756034081.1165838 1756051679.111972 1756051689.949049 1756051693.1558483 1756051701.8674443 1756051722.2058275 1756051748.804777 1756051758.8889961 1756051774.9322295 1756051775.8245072 1756051782.817306 1756053674.8424118 1756053677.5552804 1756053678.968204 1756053684.7890909 1756053686.1426823 1756053700.0809133 1756053701.17049 1756053703.5803366 1756053714.9610004 1756053753.5441813 1756062146.2249432 1756062152.6544452 1756062152.4811814 1756062154.4658208 1756062156.493738 1756062173.4410543 1756062183.1047323 1756062217.604999 1756062224.9876451 1756063491.1078897 1756063496.6617112 1756063499.3353674 1756063500.3891282 1756063503.8977914 1756063525.9865055 1756063533.080167 1756063579.8505108 1756063582.6323035 1756072129.3400898 1756072135.2731066 1756072141.0665078 1756072153.2953558 1756072160.2601361 1756072169.0772078 1756072343.9998448 1756125211.4906695 1756125212.328387 1756125214.2974348 1756125221.2147803 1756125231.304783 1756125236.0785177 1756125246.1898239 1756125250.4114323 1756125255.384682 1756125338.3665445 1756310081.775399 1756310086.739538 1756310087.4151154 1756310089.4788582 1756310097.465379 1756310116.5951312 1756310123.0403903 1756310195.6180274 1756310307.5799718 1756324792.3303366 1756324793.7887714 1756324794.8563702 1756324803.2106173 1756324806.297542 1756324819.9633186 1756324839.670165 1756324920.9852116 1756324987.3191826 1756482090.2726345 1756482092.8315275 1756482094.2205503 1756482101.1669152 1756482106.640674 1756482107.3221672 1756482111.8609567 1756482118.665951 1756482137.8609233 1756482185.2321236 1756490572.1480975 1756490576.1325092 1756490577.4044735 1756490584.7298954 1756490593.7054727 1756490594.508246 1756490601.077775 1756490608.3319793 1756490613.894025 1756490662.5819 1756492240.1021197 1756492242.534109 1756492246.8966846 1756492248.4405742 1756492254.5134413 1756492264.3207994 1756492285.7777555 1756492308.5999398 1756492341.6097598 1756513583.9886444 1756513607.1972914 1756513623.5006287 1756513652.210149 1756513664.7416515 1756513669.4077144 1756513673.848115 1756513691.6451051 1756513704.0918295 1756513759.4461706 1756543686.9924748 1756543689.312835 1756543690.9100976 1756543692.1223993 1756543701.1993566 1756543701.9120893 1756543719.4618378 1756543755.2614884 1756543768.6995828 1756554646.1878424 1756554651.6421301 1756554652.9530745 1756554658.6524198 1756554661.4308546 1756554667.5288537 1756554669.1511383 1756554676.6495404 1756554680.4736974 1756554709.1258993 1756560284.335863 1756560285.933871 1756560287.908809 1756560291.6384768 1756560292.458672 1756560313.8946424 1756560321.8388882 1756560325.908103 1756560382.8148215 1756563696.9923987 1756563701.9017537 1756563702.811375 1756563703.8906672 1756563714.253635 1756563732.5171704 1756563734.767729 1756563770.182094 1756563775.9456685 1756567983.683949 1756567991.56894 1756567993.1907952 1756567994.3630297 1756567996.010478 1756567998.5305734 1756568016.7985425 1756568019.5493484 1756568024.0831244 1756568066.684337 1756623320.5544336 1756623322.472054 1756623330.1998444 1756623332.9352598 1756623336.381962 1756623337.7754755 1756623352.333162 1756623365.3432426 1756623398.6320612 1756623433.5529215 1756651806.794219 1756651809.4032423 1756651811.7553992 1756651813.037486 1756651831.3541577 1756651840.1121118 1756651875.5639043 1756651893.71908 1756657336.314789 1756657337.6781893 1756657344.0205686 1756657351.4188898 1756657363.845933 1756657365.71656 1756657377.6119764 1756657383.4340963 1756657448.2905917 1756657547.2515292 1756663699.0600624 1756663705.761575 1756663711.437942 1756663712.1873233 1756663716.33332 1756663730.0981581 1756663739.4198246 1756663744.7488353 1756663762.9796426 1756730636.526893 1756730638.7500653 1756730644.7717385 1756730645.640282 1756730647.9443047 1756730669.7771692 1756730680.0643866 1756730854.7317486 1756731005.6253655 1756812461.4234276 1756812463.1158438 1756812466.4828668 1756812467.756903 1756812468.7449336 1756812489.6910367 1756812492.6029148 1756812525.5468075 1756812569.3577304 1756816339.3495305 1756816341.164291 1756816347.0396016 1756816348.348776 1756816352.214036 1756816356.467143 1756816361.6113038 1756816383.0108232 1756816410.4677415 1756816432.5799692 1757250550.4773295 1757250551.1298668 1757250551.9734964 1757250552.757958 1757250555.4748414 1757250560.3880448 1757250581.049149 1757250588.4147136 1757250627.1143572 1757250674.2455492 1757254212.7658505 1757254218.7390375 1757254227.5592763 1757254230.1855805 1757254240.5517533 1757254244.1242387 1757254252.3621862 1757254338.1887016 1757315702.2559307 1757315703.8898485 1757315705.3952873 1757315707.076994 1757315712.250251 1757315726.671891 1757315731.4795449 1757315805.4317906 1757315899.0124006 1757406652.7380905 1757406655.4549916 1757406656.652004 1757406662.530522 1757406685.7777593 1757406689.457919 1757406721.7381837 1757406766.3391576 1757522851.9774354 1757522855.1329193 1757522858.2322128 1757522859.0345004 1757522862.450237 1757522895.4297178 1757522899.6509047 1757522902.0956619 1757522974.9892027 1757593470.624918 1757593473.7091618 1757593479.5218978 1757593500.0183465 1757593502.5605037 1757593545.0526714 1757593634.8489718 1757593642.9991968 1757593801.1162865 1757593855.9368112 1757759851.9401703 1757759854.1618981 1757759857.3359904 1757759861.5839758 1757759862.5584164 1757759869.2156584 1757759896.1262476 1757759898.967808 1757759919.0617156 1757767575.7318823 1757767577.3116324 1757767578.164892 1757767579.7084188 1757767582.4452462 1757767591.6664143 1757767606.1796238 1757767621.7165635 1757767642.8931715 1757767696.8098483 1757860785.381375 1757860785.9220712 1757860789.7567668 1757860791.9484856 1757860793.619363 1757860800.634484 1757860821.7560308 1757860969.2124605 1757860971.2501225 1757860974.089601 1757860983.6230283 1757860995.4606473 1757861005.9285455 1757861115.845992 1757869253.9140117 1757869256.4396024 1757869258.5740275 1757869263.9215944 1757869267.8763661 1757869268.7663534 1757869274.0691543 1757869300.9069545 1757869322.3778484 1757869410.4702916 1757870798.2686443 1757870804.1248548 1757870806.7007651 1757870809.032035 1757870812.0584605 1757870813.2881002 1757870829.2664254 1757870838.5672476 1757870869.525567 1757870905.564141 1758094886.0981183 1758094889.9322498 1758094891.2626927 1758094898.718456 1758094900.569667 1758094915.4495225 1758094922.0363855 1758094952.5641358 1758095013.700299 1758198488.148094 1758198489.796498 1758198490.5393128 1758198495.096042 1758198501.3216105 1758198516.7062492 1758198519.4233909 1758198546.4314828 1758198640.9332113 1758272137.4220994 1758272139.738268 1758272143.227976 1758272156.597657 1758272190.698047 1758272196.0740888 1758272208.9434507 1758272238.1286738 1758272260.6139212 1758272449.394718 1758376904.6455922 1758376932.3074038 1758376948.930031 1758376971.2760975 1758376988.0856025 1758377009.1713164 1758377013.5835123 1758377048.9492967 1758377161.0676274 1758379289.6113198 1758379290.2530682 1758379290.8906834 1758379294.675036 1758379300.961393 1758379317.8066623 1758379323.2454424 1758379382.9791315 1758379436.5179815 1758383797.1264625 1758383803.1973991 1758383804.7967987 1758383807.4729981 1758383816.634885 1758383821.6915572 1758383835.7692916 1758383847.0809147 1758383858.7766733 1758383959.9250615 1758436806.4146972 1758436807.1329958 1758436809.3260841 1758436811.4417937 1758436827.3085277 1758436833.948449 1758436841.838951 1758436892.3199496 1758437202.6245308 1758443980.2173722 1758443983.3484104 1758443984.4110887 1758443990.683742 1758443991.5369225 1758443992.2086768 1758444010.2000234 1758444026.1857007 1758444124.608413 1758444134.7710118 1758465760.986729 1758465762.3181996 1758465764.0645068 1758465765.3632345 1758465787.950925 1758465790.680185 1758465801.6848671 1758465819.947332 1758465892.7116282 1758469620.1688812 1758469622.2927094 1758469623.5728564 1758469626.4591117 1758469627.0488255 1758469658.6069713 1758469665.5531895 1758469694.4000585 1758469756.5381064 1758470108.986735 1758470124.057676 1758470125.9493299 1758470131.5719683 1758470132.0934024 1758470137.9475138 1758470152.9088888 1758470156.1865952 1758470237.0114837 1758470254.5041 1758473686.2613904 1758473687.3080168 1758473689.074438 1758473693.3072124 1758473702.961244 1758473713.9129097 1758473726.2750452 1758473728.0962465 1758473842.3047895 1758789324.575525 1758789326.8829281 1758789331.1484952 1758789336.1290336 1758789346.26325 1758789353.666283 1758789358.8292425 1758789391.3956625 1758789394.393225 1758789579.999567 1758790671.02605 1758790672.8537107 1758790679.772759 1758790689.91073 1758790691.5338035 1758790692.7503328 1758790694.4285848 1758790707.107544 1758790732.2181475 1758790744.552918 1758803421.38217 1758803422.191356 1758803426.5482674 1758803427.662299 1758803428.821401 1758803455.564844 1758803459.5975406 1758803468.6731277 1758803572.6319895 1758987995.8475184 1758987996.6889234 1758988001.7106867 1758988011.6054077 1758988012.5404832 1758988030.3667586 1758988033.3406215 1758988115.726078 1758988277.8816535 1758991548.528388 1758991549.5032086 1758991557.7442715 1758991563.3105981 1758991572.8650045 1758991574.2282062 1758991582.1383522 1758991660.158998 1758991685.4292345 1759149060.2126746 1759149061.0146425 1759149064.611687 1759149067.7415888 1759149073.5355003 1759149094.2505076 1759149129.422489 1759149210.0339108 1759678901.9160364 1759678907.6715856 1759678932.9189944 1759679009.2559366 1759679011.4334173 1759679017.9236014 1759679022.8569818 1759679057.7054338 1759679059.8628235 1759679088.7659316 1759680202.6930416 1759680211.6861782 1759680213.267575 1759680221.0871046 1759680234.2229006 1759680244.7382803 1759680250.0741076 1759680311.640205 1759682581.4376502 1759682582.058753 1759682583.4463851 1759682584.8480828 1759682589.7484057 1759682591.9313192 1759682598.784222 1759682615.6336246 1759682685.3061302 1759682727.9810057 1759997168.5617237 1759997172.2804568 1759997174.3058667 1759997176.6075652 1759997183.6703053 1759997190.440064 1759997200.358024 1759997225.7491734 1759997368.1660178 1760065861.3042967 1760065868.189436 1760065869.2846282 1760065871.4562247 1760065893.879352 1760065900.3684113 1760065918.0518327 1760065963.6096683 1760069079.7001333 1760109020.464128 1760109022.5795572 1760109044.0690029 1760109052.5592253 1760109053.2782536 1760109062.9402142 1760109077.3545287 1760109094.5194438 1760109119.3457763 1760109131.098082 1760110188.1789145 1760110195.7505786 1760110197.687359 1760110199.661814 1760110202.7336934 1760110209.8629327 1760110223.4093578 1760110262.6597283 1760176958.6276183 1760176961.2292545 1760176965.6712897 1760176969.2640572 1760176980.9633286 1760176982.6216314 1760176983.3697286 1760176986.4191535 1760177000.5208561 1760177046.5203931 1760181743.7265334 1760181744.3741639 1760181748.5661814 1760181754.3712742 1760181765.4268498 1760181771.427125 1760181781.9578679 1760181907.003855 1760186961.2749624 1760186963.2880752 1760186972.4420753 1760186977.2224278 1760186977.9336514 1760186982.7370312 1760186983.9564476 1760186986.7875197 1760186989.8342474 1760187116.5768108 1760192063.4595168 1760192069.9260569 1760192071.0044608 1760192075.7647357 1760192078.064715 1760192079.395327 1760192096.9100592 1760192106.8860312 1760192220.910232 1760197171.8456156 1760197176.329728 1760197184.2266924 1760197188.62888 1760197194.3378708 1760197205.5518498 1760197220.2591972 1760197234.3463988 1760197246.756236 1760201835.284966 1760201836.5706768 1760201844.7961292 1760201845.2753227 1760201846.253655 1760201860.5191386 1760201861.6324472 1760201891.4585385 1760201934.3117514 1760203521.6871166 1760203524.4583154 1760203526.1673923 1760203527.7793536 1760203528.6421568 1760203533.0249124 1760203540.580649 1760203558.7832 1760203565.6265962 1760203704.2483034 1760208400.6732097 1760208402.0070264 1760208404.8436205 1760208408.2806673 1760208413.4959168 1760208416.4589143 1760208423.4273822 1760208434.2644088 1760208646.3928986 1760260672.7115512 1760260673.3789666 1760260674.1465495 1760260686.8978753 1760260701.1833951 1760260767.301787 1760260784.846258 1760260786.6696696 1760260797.917884 1760262121.7993038 1760269891.4179525 1760269892.1435916 1760269893.2471051 1760269895.8574095 1760269902.5837235 1760269903.350184 1760269911.580905 1760269926.0960793 1760269976.1379318 1760285301.0387683 1760285304.6327496 1760285306.5802863 1760285311.277028 1760285313.8499649 1760285326.521916 1760285331.085437 1760285333.3500106 1760285484.9395401 1760302085.5402446 1760302086.7340791 1760302092.4930632 1760302093.1862915 1760302097.047335 1760302113.5237918 1760302114.7217674 1760302129.6338432 1760302204.5704675 1760328946.4815428 1760328947.71341 1760328952.97125 1760328953.5222723 1760328956.548482 1760328973.4973283 1760328974.073793 1760328996.5082657 1760329090.1493146 1760347710.922032 1760347720.1702354 1760347724.736095 1760347727.9769988 1760347729.5172718 1760347730.3231437 1760347733.3761768 1760347743.8931594 1760347745.6416194 1760347915.0102088 1760358647.9662585 1760358648.6792915 1760358649.2804878 1760358654.0842292 1760358671.0118513 1760358677.122437 1760358683.546623 1760358718.8457167 1760370390.2076175 1760370391.397971 1760370394.622414 1760370396.471747 1760370407.4859722 1760370425.7107582 1760370426.7731693 1760370541.6130474 1760424893.1850412 1760424894.1859853 1760424895.6856303 1760424898.6068366 1760424902.0461578 1760424913.1799345 1760424917.4821265 1760424921.1070764 1760425021.3093822 1760743146.793899 1760743150.532634 1760743152.9184196 1760743156.833466 1760743157.5592577 1760743161.1552167 1760743171.198314 1760743175.1721282 1760743217.3190475 1760786575.1475165 1760786580.451427 1760786585.9220862 1760786592.0383992 1760786597.66885 1760786599.3244073 1760786612.9410458 1760786685.614658 1760786711.8526483 1760788122.718024 1760788130.2036352 1760788131.7925465 1760788133.8885221 1760788138.6973095 1760788141.6066995 1760788165.2763598 1760788262.0012178 1760793264.967267 1760793271.4599068 1760793272.682385 1760793279.1230643 1760793284.9563894 1760793289.1663685 1760793292.1584153 1760793320.8553169 1760793519.0003898 1760793524.6424658 1760793526.575326 1760793529.069538 1760793532.6066246 1760793537.5595367 1760793544.3480856 1760793560.866959 1760793674.0022 1760860124.4421682 1760860126.1444528 1760860133.036754 1760860145.1253457 1760860150.0040295 1760860157.6127007 1760860213.5287194 1760860254.2642376 1760860261.6253562 1760860413.0565133 1760869223.0697606 1760869226.7882934 1760869231.149606 1760869240.8386393 1760869244.1520154 1760869246.3574295 1760869254.6131852 1760869268.0096996 1760869301.3809862 1760869573.2066333 1760869576.4536045 1760869581.78191 1760869584.255531 1760869588.763384 1760869589.75701 1760869598.6541889 1760869601.4438689 1760869610.7774029 1760869698.1974425 1760938815.440873 1760938815.8425229 1760938822.7376003 1760938831.250733 1760938833.930654 1760938835.1285305 1760938835.796545 1760938843.6164384 1760938860.5747712 1760972532.9978673 1760972534.3429718 1760972540.7126017 1760972545.0473254 1760972554.6597133 1760972555.7788084 1760972557.0478446 1760972580.0633926 1760972657.9048338 1761060369.5720823 1761060374.0631437 1761060380.4744687 1761060381.3302562 1761060383.1159825 1761060385.4865553 1761060395.3019264 1761060581.2982967 1761060585.6111755 1761060590.0977602 1761060591.2101505 1761060593.1073785 1761060598.4627094 1761060618.359523 1761060624.4569325 1761060729.5115902 1761144853.0819714 1761144856.689801 1761144857.4272952 1761144857.989736 1761144859.7585185 1761144861.2797425 1761144880.3253202 1761144889.7398975 1761144947.037287 1761148048.739978 1761148050.631192 1761148052.721287 1761148054.8056633 1761148059.5820656 1761148063.3975248 1761148087.5545166 1761148090.5621092 1761148131.0594964 1761148229.1727126 1761212441.3152373 1761212442.0500846 1761212448.6663396 1761212456.9727566 1761212465.1971743 1761212471.6861997 1761212512.632466 1761212517.142052 1761212536.051563 1761212571.3813605 1761217281.3986537 1761217306.1535387 1761217313.6426508 1761217320.8573422 1761217330.3046353 1761217334.2626648 1761217357.7038624 1761217376.540221 1761217381.1343498 1761217475.373226 1761219269.170714 1761219276.183937 1761219278.1303427 1761219281.116449 1761219283.073473 1761219287.7204525 1761219309.497512 1761219312.9766653 1761219332.7687204 1761222439.838213 1761222442.6421044 1761222451.2844505 1761222453.0715046 1761222456.7843916 1761222458.6897311 1761222471.0094128 1761222480.8025346 1761222485.4113288 1761222529.244105 1761295100.522707 1761295102.4320357 1761295103.7916367 1761295111.0924425 1761295112.4658391 1761295118.298571 1761295128.6002736 1761295138.7218268 1761295176.1645088 1761311464.8069572 1761311466.517216 1761311469.0799317 1761311469.693539 1761311471.3626993 1761311472.9784894 1761311481.0966003 1761311498.1026597 1761311500.2232938 1761311525.0575533 1761383754.5454621 1761383757.3220978 1761383761.223058 1761383761.8817794 1761383769.4942296 1761383771.735202 1761383775.1095457 1761383780.9610267 1761383821.0147321 1761383893.7472773 1761408662.3846736 1761408664.6186817 1761408666.5762887 1761408667.3478622 1761408675.0225043 1761408677.9694781 1761408680.248723 1761408699.4657342 1761408707.8276389 1761408834.6558533 1761470753.6233206 1761470755.1946387 1761470760.2358305 1761470765.7691329 1761470774.8850012 1761470778.1507916 1761470784.4810855 1761470787.0317824 1761470798.0484314 1761470913.4951358 1761501822.1993885 1761501828.0765977 1761501834.5608828 1761501837.3458037 1761501842.1671865 1761501842.6012266 1761501849.8652487 1761501854.5500402 1761501944.6396515 1761568585.206552 1761568594.6564615 1761568597.3226542 1761568598.3210044 1761568600.2232356 1761568618.5227046 1761568630.444256 1761568663.0719657 1761568779.782653 1761568887.4298677 1761579967.571521 1761579969.10766 1761579970.350306 1761579975.7025917 1761579985.395596 1761579988.7035441 1761580001.1484468 1761580005.97187 1761580032.0797098 1761732621.0596154 1761732622.4862742 1761732624.583479 1761732641.1949139 1761732643.8280423 1761732667.5962641 1761732678.8320563 1761732708.341875 1761732739.0964832 1761732741.0047672 1761733333.6166253 1761733340.287924 1761733344.3041735 1761733349.9582686 1761733355.0360234 1761733363.931928 1761733369.92241 1761733497.7672007 1761733499.7289472 1761733502.6771982 1761733505.561072 1761733522.8919158 1761733524.7920578 1761733526.7814734 1761733536.03033 1761733559.1054711 1761733973.2625349 1761733974.8804538 1761733975.8670855 1761733983.4152267 1761733984.5874498 1761733985.617361 1761734000.0249293 1761734016.5178993 1761734058.1966867 1761739154.979861 1761739160.741309 1761739163.0372496 1761739165.1003692 1761739176.9402776 1761739183.5748458 1761739190.8559542 1761739198.0391276 1761739224.2763262 1761739651.787256 1761739659.5065682 1761739661.7434552 1761739662.7944498 1761739672.0530784 1761739674.6446283 1761739681.3101513 1761739881.4297092 1761753515.4783666 1761753519.595589 1761753528.9743803 1761753531.3077066 1761753532.3792512 1761753543.5615988 1761753555.2167263 1761753821.0167503 1761756820.567883 1761756822.7604883 1761756824.7155573 1761756829.902521 1761756831.3815246 1761756839.1349351 1761756844.7806425 1761756851.6347315 1761756864.8949487 1761757084.5832186 1761783971.8902345 1761783975.955501 1761783979.7629645 1761783982.5048652 1761783984.0125172 1761783994.9253206 1761784007.3848386 1761784007.9892821 1761784116.5959563 1761812842.0582845 1761812842.858573 1761812850.7051184 1761812853.665147 1761812856.4933705 1761812862.5699618 1761812863.5919237 1761812871.8366818 1761812980.4047241 1761813109.5922022 1761813119.0922732 1761813120.0996842 1761813125.9788857 1761813136.455482 1761813137.3587613 1761813144.156814 1761813404.6076884 1761815250.9121108 1761815253.333122 1761815261.2016864 1761815266.7144861 1761815274.8910897 1761815283.2405734 1761815285.803323 1761815313.78364 1761815315.6396675 1761816551.8261442 1761816556.620063 1761816560.7388778 1761816561.7038183 1761816563.653961 1761816571.7262235 1761816598.5983844 1761816603.679053 1761816616.107075 1761816982.505621 1761816983.3680015 1761816992.1575406 1761816995.186787 1761816996.6600037 1761816998.3273346 1761817012.2697558 1761817021.7558877 1761817048.4622328 1761818678.486974 1761818680.3207557 1761818683.0676215 1761818683.7666762 1761818696.0210476 1761818706.5787892 1761818717.8600068 1761818723.6918113 1761819171.0990624 1761828198.7066338 1761828202.5303748 1761828210.6003237 1761828231.9966207 1761828235.4440167 1761828238.9658937 1761828285.0829797 1761828339.8987975 1761828348.659788 1761828407.4981537 1761838695.6500044 1761838696.3330994 1761838699.4536595 1761838700.7025476 1761838710.6912897 1761838719.1276152 1761838856.688787 1761838862.4126012 1761838866.7453022 1761838872.676898 1761838876.31469 1761838881.1648023 1761838882.255903 1761838886.8290792 1761839034.2050247 1761839036.4394672 1761839041.3663592 1761839045.8587894 1761839046.9232655 1761839058.9090395 1761839063.191618 1761839064.4754827 1761839100.7322073 1761903364.8073344 1761903366.282132 1761903369.2671845 1761903373.6632118 1761903396.633601 1761903401.9476395 1761903425.4567928 1761907794.4028182 1761907798.267677 1761907802.7829356 1761907806.6542995 1761907808.755848 1761907810.6964827 1761907819.1398387 1761907819.9082677 1761907831.778921 1761907861.5249884 1761916175.7201128 1761916181.8167076 1761916183.6725361 1761916186.4976492 1761916188.5812843 1761916206.4783504 1761916210.9515936 1761916239.7759252 1761916244.5611362 1761916256.3694642 1761918708.0654619 1761918709.2721436 1761918710.4901214 1761918711.0832524 1761918717.9547687 1761918725.1858885 1761918729.5807498 1761918732.4273076 1761918748.7229514 1761918784.7492945 1761924853.904902 1761924930.7075958 1761924931.704748 1761924936.018988 1761924936.6370103 1761924950.064064 1761924951.2240555 1761924952.1859083 1761924964.102679 1761925061.6673362 1761931328.381721 1761931362.0425394 1761931366.6559973 1761931387.689871 1761931395.9854743 1761931443.699999 1761931449.67774 1761931483.457332 1761931525.4132876 1761932426.3424194 1761932438.22436 1761932440.9574938 1761932444.2187312 1761932445.4122531 1761932446.3095675 1761932449.411533 1761932450.8779695 1761932458.8442442 1761932554.581199 1761943206.0485408 1761943208.721901 1761943209.7145672 1761943231.8070157 1761943250.5338347 1761943258.9555643 1761943286.6451633 1761943316.8918748 1761943325.365103 1761943902.1533275 1761943904.2363207 1761943911.0530365 1761943911.9343462 1761943916.8543684 1761943929.6059718 1761943932.7973747 1761944032.3762949 1761972625.1348531 1761972631.2784424 1761972634.7716472 1761972636.1866002 1761972650.59014 1761972658.7792203 1761972697.2746897 1761998643.266348 1761998644.9597728 1761998651.870806 1761998655.6946402 1761998657.3297527 1761998675.5200093 1761998686.3667939 1761998782.1904857 1762002372.3393233 1762002383.5091453 1762002456.6738017 1762002463.6045744 1762002478.2381296 1762002483.4908178 1762002496.9344296 1762002503.075543 1762002641.5141308 1762003784.2051804 1762003786.6937287 1762003787.9662147 1762003804.7873077 1762003807.2316003 1762003818.263784 1762003867.0438159 1762004551.510921 1762004553.6924763 1762004560.7829566 1762004563.0963054 1762004565.8813064 1762004570.809282 1762004582.4673772 1762004704.970945 1762010469.8733897 1762010474.2603297 1762010480.9687178 1762010485.2649827 1762010489.78939 1762010505.1184232 1762010569.005523 1762011149.9099917 1762011151.630804 1762011153.7875993 1762011157.8205986 1762011159.814798 1762011164.3464637 1762011175.4887507 1762011192.3388321 1762011314.9134667 1762016545.3331056 1762016553.595649 1762016558.990784 1762016562.646232 1762016564.002207 1762016579.8990319 1762016585.4553425 1762016599.7099645 1762016717.1077857 1762016882.2061126 1762016885.560252 1762018726.31528 1762018727.0032678 1762018734.9585347 1762018738.825398 1762018743.6514335 1762018754.7986135 1762018765.327472 1762018870.7137697 1762020052.1141596 1762020057.0351884 1762020059.9044833 1762020065.3989885 1762020067.811667 1762020076.477097 1762020079.396898 1762020091.510058 1762020115.2351296 1762071057.9529824 1762071063.6751099 1762071066.499017 1762071067.3919523 1762071073.8159995 1762071091.9804113 1762071107.408353 1762071263.8868177 1762101819.8454258 1762101824.7539666 1762101829.8303137 1762101831.1636562 1762101838.2514503 1762101841.9861197 1762101853.6021614 1762101861.0454462 1762101911.296313 1762105806.2418687 1762105843.1352499 1762105848.6053684 1762105849.3388176 1762105857.7725208 1762105890.6376925 1762105928.2757473 1762105944.803276 1762105971.790727 1762108123.201678 1762108128.0310478 1762108135.0505812 1762108146.1856859 1762108155.7639487 1762108157.3915591 1762108167.899605 1762172555.87825 1762172564.126668 1762172577.4182642 1762172591.5535257 1762172618.802497 1762172627.0197368 1762172671.4228137 1762172710.2156913 1762172716.7204862 1762182285.9299097 1762182288.5652134 1762182291.2938004 1762182293.269225 1762182294.2326968 1762182303.8357842 1762182306.2251508 1762182321.2300313 1762182430.8417692 1762184529.1819077 1762184536.512359 1762184537.1591082 1762184537.760621 1762184539.0728261 1762184554.332873 1762184568.5305755 1762184589.301031 1762184609.7697651 1762200904.005787 1762200907.18115 1762200913.502514 1762200914.23389 1762200917.573258 1762200921.9871643 1762200928.988474 1762200931.0818367 1762200967.8282592 1762209280.490971 1762253101.193741 1762253107.0873806 1762253110.1899955 1762253115.4174728 1762253129.0361514 1762253133.7874737 1762253162.8910217 1762253182.9230866 1762253184.2797866 1762260330.9593165 1762260333.0245092 1762260339.4750998 1762260341.6916134 1762260343.3884668 1762260348.187566 1762260355.5107586 1762260363.932035 1762260505.9395063 1762287891.7447214 1762287897.3504825 1762287900.7250962 1762287906.7337685 1762287908.2938457 1762287909.971187 1762287927.4461327 1762287984.259216 1762422474.7089126 1762422475.465572 1762422482.2303576 1762422486.473266 1762422488.7677093 1762422489.7465184 1762422497.7767348 1762422511.8179455 1762422593.4148452 1762436140.7360206 1762436146.750907 1762436148.420587 1762436149.0124712 1762436151.6360707 1762436164.3627691 1762436166.0090265 1762436216.9200459 1762522496.3923283 1762522499.0286534 1762522500.3733065 1762522500.8749893 1762522502.2203865 1762522503.506489 1762522524.1964445 1762522526.187269 1762522572.350876 1762604641.8171883 1762604642.384963 1762604643.5394833 1762604652.4941573 1762604663.9734704 1762604681.0171967 1762604706.881941 1762604717.9407048 1762604738.9008565 1762616292.5187433 1762616350.6337602 1762616377.5028427 1762616440.264139 1762616453.3365035 1762616457.5079691 1762616461.5424132 1762616478.7812738 1762616616.4936285 1762621980.1461287 1762621980.8402362 1762621985.1854296 1762621987.6974733 1762621989.4274623 1762621992.8795457 1762621995.4352868 1762622132.197382 1762622133.042379 1762622142.6368914 1762622143.8745382 1762622146.6899445 1762622156.4792702 1762622157.5314913 1762622204.3318274 1762622591.3178737 1762622593.5971794 1762622596.546724 1762622598.5373664 1762622614.1202447 1762622617.400571 1762622636.2234461 1762622636.7881298 1762622682.3763316 1762623186.3071823 1762623189.6776576 1762623193.4851882 1762623195.928299 1762623199.3596818 1762623201.9214406 1762623205.9429522 1762623215.2832174 1762623330.8150814 1762685883.0941963 1762685903.8723197 1762685927.283401 1762685936.761773 1762685958.2256646 1762685984.6082613 1762685999.784007 1762686016.7443185 1762686040.941506 1762686604.1537943 1762686605.0731802 1762686607.4993882 1762686618.869133 1762686620.846673 1762686632.4037566 1762686636.965218 1762686660.1538556 1762687486.9320269 1762687504.2483954 1762687507.263849 1762687513.4480598 1762687513.9274237 1762687521.5279539 1762687523.2285419 1762687632.7838094 1762687713.467016 1762689993.6343405 1762689998.1456513 1762690000.826434 1762690006.796545 1762690010.5455694 1762690014.0553174 1762690023.0149443 1762690026.3884199 1762690050.6457598 1762690601.9759095 1762690603.5830753 1762690604.9104593 1762690617.4960287 1762690618.9582949 1762690621.2141972 1762690624.0565562 1762690635.8852017 1762695377.9534924 1762695379.8920557 1762695387.0601099 1762695389.252808 1762695390.468865 1762695402.8316972 1762695499.562626 1762695529.2544737 1762709105.3129528 1762709108.0436068 1762709117.5377827 1762709118.5359573 1762709127.5769272 1762709128.4510138 1762709132.7309337 1762709163.794322 1763297062.6462157 1763297063.718993 1763297064.156321 1763297066.0391867 1763297069.557291 1763297080.286124 1763297086.3967721 1763297087.650356 1763299191.865496 1763299192.9348702 1763299198.4212236 1763299199.801592 1763299204.5713706 1763299209.050733 1763299219.0118797 1763299227.9297895 1763302380.1910982 1763302382.197532 1763302383.6581008 1763302392.1376574 1763302398.1155136 1763302403.0585613 1763302407.618657 1763302416.5956852 1763302419.1865063 1763302793.966636 1763302795.4213364 1763302797.1293983 1763302797.9772894 1763302801.348963 1763302803.8687665 1763302810.6713228 1763302816.0434008 1763302819.5563455 1763303612.8964972 1763303614.4866087 1763303617.5355716 1763303620.0610914 1763303622.02864 1763303626.9398384 1763303630.710819 1763303638.1577716 1763303643.232244 1763308113.9014347 1763308122.4819312 1763308140.4671648 1763308145.2055862 1763308146.7704184 1763308168.3040445 1763308181.1838708 1763308182.6945477 1763308218.14928 1763382992.5026288 1763382994.5812373 1763383067.165341 1763383082.5999503 1763383088.843485 1763383110.3557034 1763383170.7782712 1763383210.6378741 1763383246.8616576 1763386839.210291 1763386839.9151208 1763386844.3694417 1763386848.766369 1763386849.4183211 1763386850.6483958 1763386855.4940298 1763386862.358006 1763386867.5119295 1763389241.0266955 1763389285.7207963 1763389309.7197878 1763389314.1105762 1763389321.9944794 1763389335.3969219 1763389381.59872 1763389386.467899 1763389390.7888556 1763546239.090256 1763546239.7797186 1763546252.0421507 1763546253.0514424 1763546255.3455715 1763546265.2387855 1763546269.9594424 1763546272.4304173 1763642042.9531288 1763642044.3326356 1763642048.0169668 1763642049.6969402 1763642057.2456183 1763642064.7353468 1763642065.2131665 1763642073.5537636 1763642080.0179844 1763659926.9954894 1763659930.3687325 1763659935.5686922 1763659937.5839558 1763659958.96232 1763659963.6969051 1763660103.7222788 1763660120.1527593 1763660133.9003205 1763789923.6157908 1763789934.517366 1763789942.4983094 1763789954.7262015 1763790034.771286 1763790041.4361985 1763790045.903533 1763790079.5756056 1763795168.8845222 1763795172.1928253 1763795173.0381145 1763795180.4388633 1763795182.2695243 1763795185.2208147 1763795201.8603241 1763795207.6413875 1763919853.1434977 1763919863.9553008 1763919864.5607672 1763919866.6655488 1763919871.3080835 1763919880.8117497 1763919882.552756 1763920697.2940915 1763952872.7848387 1763952876.492404 1763952879.5763636 1763952881.379629 1763952884.1267953 1763952890.6836202 1763952892.4930377 1763952893.4756386 1763987125.6737487 1763987126.725239 1763987144.1404214 1763987154.748037 1763987199.961115 1763987216.088118 1763987231.719802 1763987310.7274327 1763987366.2468972 1764011072.3707397 1764011072.9961948 1764011077.8855467 1764011079.9896512 1764011083.0571504 1764011090.3551934 1764011100.6690629 1764011915.3394165 1764218186.5586534 1764218189.3324022 1764218190.2522562 1764218204.7683747 1764218208.701724 1764218210.0649126 1764218218.7979891 1764340315.2158823 1764340321.8420427 1764340324.050802 1764340327.1663163 1764340329.2468398 1764340332.0343747 1764340335.1212754 1764360876.3445911 1764360884.9453511 1764360899.9534636 1764360901.9353132 1764360905.4604099 1764360906.0657322 1764360950.4120343 1764361027.9019718 1764361037.5838752 1764363073.981725 1764363075.6741886 1764363079.0219173 1764363095.41827 1764363098.2861693 1764363124.3888063 1764363142.6363301 1764363219.1545677 1764363241.7134886 1765187032.8380136 1765187035.453364 1765187042.338773 1765187044.5671895 1765187045.9196754 1765187047.8885398 1765187051.2035475 1765187058.7123928 1765187060.6759374 1765355427.1373546 1765355428.2110195 1765355429.8868406 1765355444.2209935 1765355448.3313894 1765355449.6444044 1765355463.7727923 1765355509.568022 1765360614.6304975 1765360627.278244 1765360699.6176698 1765360700.3069332 1765360702.7569158 1765360727.5694447 1765360734.068348 1765360738.853782 1765360751.4475017 1765365473.0148964 1765365476.4291492 1765365477.6918364 1765365485.5428207 1765365488.3033526 1765365496.4341197 1765365499.204723 1765365501.9174285 1765365509.546715 1765557509.2392964 1765557517.8780813 1765557523.434449 1765557525.9953475 1765557530.5092058 1765557550.3774416 1765557576.56148 1765557638.3009307 1765634922.4164693 1765640546.4406013 1765640555.8154743 1765640569.9443984 1765640571.8285775 1765640589.8454623 1765640597.2192576 1765640600.685116 1765640601.791428 1765643204.8700292 1765643206.6251795 1765643210.194346 1765643213.5972345 1765643216.0359607 1765643223.1245673 1765643235.8558447 1765643236.6084464 1765643237.377273 1765643461.6558518 1765643465.6197562 1765643468.7124977 1765643470.595265 1765643471.002281 1765643474.730295 1765643477.3206208 1765643484.8833282 1765644898.6106436 1765644899.5319552 1765644904.2567694 1765644907.0171332 1765644907.4870572 1765644909.9574072 1765644922.176685 1765644923.162431 1765644925.752624 1765650682.681714 1765650807.9693182 1765650812.0510752 1765650814.6558144 1765650815.0367496 1765650815.822579 1765650817.1819093 1765650840.9738505 1765650841.5835085 1765723890.041584 1765723901.878552 1765723913.9920568 1765723940.7441728 1765723953.6822717 1765723965.2455328 1765723975.6101594 1765723981.7978325 1765723998.121029 1765801572.220802 1765801586.4000347 1765801589.783504 1765801601.659667 1765801611.0200794 1765801676.5740016 1765801689.931427 1765879653.3422017 1765879654.6520367 1765879655.818434 1765879665.157804 1765879674.2655952 1765879727.529927 1765879740.0749133 1765879756.2488542 1765879767.9327204 1765880050.2235658 1765881066.7586555 1765881071.0245862 1765881071.5761216 1765881074.3021216 1765881077.7869434 1765881082.084883 1765881098.7095683 1765881099.5209198 1765890220.8121464 1765890223.076022 1765890229.5600839 1765890230.3226686 1765890234.1518707 1765890234.8996077 1765890240.9570239 1765890254.1053715 1765904461.6480265 1765904469.4855177 1765904473.118679 1765904476.6461954 1765904481.4827998 1765904482.7578373 1765904571.3059204 1765904580.1127 1765904624.410078 1766060957.0203218 1766060959.152164 1766060969.126864 1766060969.7474778 1766060987.2880044 1766060989.7890246 1766061003.9739647 1766061014.4612226 1766125832.056241 1766125835.0174904 1766125842.5458252 1766125847.860071 1766125850.0030906 1766125862.1761515 1766125863.6121485 1766125866.3684192 1766175187.6213129 1766175189.7560964 1766175192.2463057 1766175198.3198903 1766175203.6143293 1766175217.1426938 1766175278.720896 1766175281.0863192 1766925258.8068514 1766925261.8128085 1766925263.4731135 1766925264.5417693 1766925273.9132488 1766925280.2520475 1766925286.0638998 1766925295.908001 1766996858.593534 1766996859.3148115 1766996862.3900332 1766996863.9632237 1766996866.002261 1766996937.9445057 1766996946.8544555 1766996953.7118356 1766996998.3924599 1767005750.2315245 1767005752.713343 1767005753.7751043 1767005757.1741123 1767005760.8929029 1767005762.1786122 1767005765.7549138 1767005778.0547214 1767008189.6399276 1767008192.654333 1767008193.6334174 1767008194.1320896 1767008208.67269 1767008238.5539753 1767008258.371955 1767008359.6306872 1767008476.939767 1767008478.8546765 1767008479.2277246 1767008487.6395764 1767008494.452409 1767008496.4467835 1767008503.1518207 1767008505.3925378 1767008664.5282934 1767008670.6300914 1767008679.8526978 1767008681.2375803 1767008682.3679552 1767008686.4423952 1767008695.2620165 1767008696.4385452 1767008704.9496138 1767009731.1481624 1767009736.6050348 1767009738.860095 1767009741.8063154 1767009743.983117 1767009746.3949685 1767009758.005734 1767009765.2569134 1767010364.389463 1767010368.3234975 1767010376.3448942 1767010377.593191 1767010504.9921572 1767010505.7261412 1767010510.4794931 1767010512.9828248 1767010527.2291083 1767010529.7752872 1767010535.682247 1767013234.505958 1767013236.1389487 1767013238.1251016 1767013241.8454356 1767013242.544342 1767013247.3394504 1767013252.5731487 1767013256.2700813 1767013268.1770554 1767014261.9281383 1767014266.5664349 1767014267.77517 1767014285.8610258 1767014294.4500647 1767014298.7737455 1767014357.5287437 1767014364.8542192 1767014365.1898136 1767015032.0413318 1767015036.6794896 1767015037.0758255 1767015038.859089 1767015043.0507755 1767015043.795858 1767015058.7398818 1767015095.810186 1767015154.788291 1767016332.7769127 1767016341.7485373 1767016342.9278643 1767016343.4213676 1767016348.1831532 1767016356.9269874 1767016359.0096195 1767086066.2820609 1767086068.4097233 1767086104.5986426 1767086129.9135897 1767086146.020534 1767086154.2456412 1767086191.4983408 1767086194.8544183 1767086207.8455625 1767091900.6769624 1767091903.20487 1767091907.0771337 1767091911.2956107 1767091912.657855 1767091913.5171046 1767091917.2010088 1767091917.9127343 1767091923.4502337 1767092144.3763077 1767092144.6971657 1767092149.4341872 1767092150.4952488 1767092152.413446 1767092154.7418704 1767092167.4040303 1767092176.555279 1767092757.8919811 1767092759.227804 1767092761.611345 1767092765.8312247 1767092766.121263 1767092767.1874857 1767092779.6019578 1767092785.9529996 1767092787.807154 1767093406.5766206 1767093411.6432137 1767093416.292331 1767093416.841238 1767093420.1784983 1767093428.7357821 1767093430.451345 1767093437.9603465 1767270196.5264738 1767270198.6590161 1767270199.2853298 1767270202.7026517 1767270205.0109453 1767270212.2577412 1767270213.599389 1767270219.447361 1767270237.6540856 1767408777.352056 1767408779.8253002 1767408783.4031243 1767408786.606049 1767408792.9385245 1767408806.0961204 1767408808.6286788 1767450463.487253 1767450468.0185769 1767450469.3266888 1767450477.658307 1767450479.7213383 1767450487.8546865 1767450494.1723776 1767450504.1038587 1767523570.7468324 1767523573.4585876 1767523575.5568817 1767523578.0597918 1767523579.9227304 1767523580.686402 1767523584.8810203 1767523598.5700417 1767523599.3585181 1767524360.418623 1767524367.86007 1767524370.6017756 1767524371.3623307 1767524373.1854727 1767524377.3173368 1767524383.0169208 1767524387.166389 1767526612.655363 1767526620.893646 1767526666.0753863 1767526741.7127984 1767526760.5003262 1767526761.18435 1767526781.8502042 1767526808.215066 1767526846.9572792 1767540381.7925 1767540385.6660693 1767540389.1432114 1767540390.0299299 1767540391.0120437 1767540392.6561732 1767540396.2349198 1767540400.0953155 1767540407.0494602 1767603125.4719348 1767603129.6360354 1767603132.9295096 1767603136.400303 1767603139.1755438 1767603142.2036078 1767603146.9356022 1767603158.5485249 1767608453.8039553 1767608457.8362336 1767608473.1001418 1767608488.1931834 1767608525.184708 1767608547.776067 1767608574.4276385 1767608589.07131 1767608625.029423 1767609758.056628 1767609766.2764363 1767609770.6267624 1767609774.770277 1767609783.1370986 1767609784.4607327 1767609785.6430619 1767779970.3057816 1767779971.8273609 1767779974.343106 1767779975.9782546 1767779977.4753609 1767779978.2106094 1767779987.0569248 1767779988.502298 1767779992.3459094 1767781824.669599 1767781826.8218884 1767781830.172712 1767781832.6331336 1767781833.5870175 1767781838.157459 1767781849.438812 1767781855.110409 1767781856.0296986 1767783173.776942 1767783174.918709 1767783178.598568 1767783183.0167508 1767783185.1235716 1767783187.9137797 1767783190.6841505 1767783192.9388943 1767783194.3727446 1767789950.2846448 1767789950.780807 1767789951.7242458 1767789952.1188505 1767789954.9040453 1767789958.2523339 1767789964.9183238 1767789971.6630306 1767789988.1764913 1767794790.8767462 1767794797.9905484 1767794799.6897795 1767794800.677061 1767794803.3192046 1767794804.7557886 1767794810.129956 1767794817.6165998 1767794881.6264374 1767797113.9344013 1767797117.1024604 1767797119.4598038 1767797124.4368665 1767797125.005286 1767797125.6584253 1767797129.4499178 1767797142.6675413 1767804596.0774035 1767804597.0101094 1767804601.0117264 1767804601.8242528 1767804608.4628296 1767804615.409722 1767804626.2616994 1767804628.0655315 1767805286.2890604 1767805290.1657245 1767805294.8932576 1767805298.5421705 1767805300.1252146 1767805310.2346702 1767805311.8608637 1767806446.308764 1767806447.263031 1767806448.0307293 1767806449.6280806 1767806453.1115158 1767806455.2822442 1767806464.841296 1767806470.414619 1767806472.2149243 1767862534.1300757 1767862537.0822213 1767862538.015854 1767862540.5166407 1767862541.1621358 1767862543.53903 1767862548.4412358 1767862552.0026646 1767862559.5569992 1767875049.769152 1767875056.1616 1767875057.091702 1767875057.7781708 1767875063.8182845 1767875067.8484592 1767875072.015592 1767875084.231258 1767876200.634965 1767876205.9777443 1767876210.1790633 1767876211.1054254 1767876216.819659 1767876222.141576 1767876406.389355 1767876441.8357987 1767876482.82653 1767876492.9608855 1767876495.5181966 1767876505.5005298 1767876518.0242822 1767876543.5972047 1767876623.2839305 1767878590.5782363 1767878597.0823655 1767878600.7762733 1767878602.9763505 1767878607.4425566 1767878610.740943 1767880829.6364706 1767880836.354983 1767880837.814495 1767880838.7678552 1767880844.222659 1767880847.8437169 1767880853.18519 1767880861.3127449 1767880864.864189 1767886085.2988107 1767886100.009519 1767886110.4870822 1767886157.126238 1767886211.455036 1767886227.9047942 1767886239.5314128 1767886248.4401996 1767886269.623906 1767887877.780074 1767887879.653932 1767887883.437103 1767887884.8039067 1767887888.9499557 1767887890.333735 1767887897.9374743 1767887900.5198562 1767887902.473257 1767888586.8256478 1767888590.6860585 1767888592.5849898 1767888594.1425657 1767888596.96389 1767888598.0899355 1767888610.4946456 1767888611.4842644 1767888621.0345175 1767894668.1983907 1767894670.6740375 1767894672.3232863 1767894676.8063247 1767894680.8864522 1767894687.7080142 1767894691.1440587 1767894693.037532 1767894706.8682427 1767896385.028477 1767896385.6117723 1767896393.1601806 1767896394.332155 1767896396.101103 1767896400.9222782 1767896402.012056 1767896409.3551488 1767896414.0472367 1767954456.721825 1767954463.118075 1767954466.2569473 1767954467.282363 1767954471.615229 1767954472.5900018 1767954479.6348743 1767954481.8718064 1767954485.2681139 1767965138.1393619 1767965143.4655793 1767965147.434867 1767965148.9427965 1767965156.3537724 1767965167.2213993 1767965169.49993 1767970290.6593683 1767970292.970802 1767970298.57375 1767970299.585969 1767970337.0942743 1767970372.4892268 1767976666.6998365 1767976673.101222 1767976675.6020813 1767976679.096784 1767976683.9167645 1767976687.3609555 1767976713.1541333 1767976719.0766773 1767976725.1059823 1767978117.2996187 1767978120.0221531 1767978122.7937603 1767978123.5929458 1767978129.2806196 1767978141.6026158 1767978142.2001743 1767978146.1618307 1767979940.4418714 1767979943.6162307 1767979945.0338674 1767979946.6955743 1767979949.2711825 1767979955.3020587 1767979962.6219144 1767979967.7086596 1767982298.8471909 1767982300.1005816 1767982303.920526 1767982307.4450893 1767982311.7769759 1767982313.248131 1767982316.173381 1767982324.9440858 1767982325.6764736 1768045869.2330077 1768045870.236356 1768045872.2891514 1768045874.5468063 1768045881.3387985 1768045884.8452904 1768045889.1161494 1768045897.4951403 1768045902.8267422 1768048025.6877735 1768048027.7286327 1768048029.5608556 1768048032.5990238 1768048044.1846335 1768048050.7798657 1768048062.4111714 1768048065.024833 1768053088.504781 1768053113.4159126 1768053117.7720275 1768053144.3447492 1768053146.5680668 1768053147.6142244 1768053159.8059928 1768053169.9699647 1768053172.8624737 1768053292.9160326 1768053294.911726 1768053296.1000555 1768053299.749482 1768053300.7807405 1768053302.7820969 1768053313.845262 1768053317.4048727 1768053330.3916922 1768053588.9192967 1768053589.8108206 1768053595.3978446 1768053614.1973078 1768053615.303289 1768053615.9164264 1768053627.2831788 1768053639.0435984 1768056937.9889069 1768056943.7953987 1768056976.7951229 1768057046.8843918 1768057085.6750104 1768057101.4190998 1768057109.3534727 1768057119.7842429 1768057136.5627928 1768079666.113722 1768079668.6683514 1768079673.4090157 1768079675.4893627 1768079685.4717195 1768079685.8670487 1768079690.291896 1768079692.9432077 1768079697.3771555 1768086168.1487443 1768086176.3513515 1768086177.216495 1768086177.898571 1768086179.6137946 1768086182.7242186 1768086192.3760135 1768086192.740066 1768086212.396135 1768134697.2728767 1768134704.8010283 1768134707.7121792 1768134708.0560768 1768134711.1750917 1768134713.4217865 1768134713.7260768 1768134715.5332298 1768134728.5465925 1768294912.787784 1768294915.6571844 1768294916.5206225 1768294917.7396455 1768294920.193792 1768294928.9164357 1768294930.5203264 1768294931.5069704 1768294943.4769967 1768308426.7526467 1768308431.2754452 1768308432.647019 1768308435.5231614 1768308439.2533436 1768308441.8660333 1768308447.0069115 1768308460.593248 1768324698.3590894 1768324700.4846914 1768324751.4691803 1768324765.183994 1768324772.6904168 1768324782.8927166 1768324798.4914553 1768324839.4870424 1768324874.4531574 1768384225.4799273 1768384229.7895231 1768384230.484599 1768384233.816662 1768384238.3189883 1768384248.4386628 1768384252.7716544 1768384261.2794209 1768384806.177688 1768384809.5460305 1768384811.4714494 1768384816.6815825 1768384819.9323728 1768384828.6584098 1768384830.7775512 1768384831.721024 1768384838.19614 1768393401.9596107 1768393405.5755694 1768393406.0980704 1768393406.9103317 1768393414.240275 1768393420.344335 1768393423.9467418 1768393424.9939027 1768393946.0471222 1768393947.9344432 1768393948.3867533 1768393956.1279247 1768393956.8507793 1768393957.677266 1768393964.51897 1768393969.2088404 1768393979.8658965 1768406697.5229118 1768406700.0978663 1768406708.7858956 1768406710.7479894 1768406711.659276 1768406714.616408 1768406717.5029907 1768406718.8020518 1768407432.1623812 1768407433.9276476 1768407438.4175367 1768407446.9722466 1768407451.619536 1768407452.932411 1768407455.5550284 1768407461.7541678 1768407470.464264 1768466929.7111862 1768466930.7620823 1768466939.288962 1768466949.7309234 1768466955.0143619 1768466958.2070162 1768466967.4488463 1768551779.1706276 1768562169.41472 1768562181.1047812 1768562189.7693236 1768562190.8138013 1768562197.070462 1768562200.7975888 1768562202.7073588 1768562205.321664 1768562208.3421023 1768610272.5089388 1768610273.9870481 1768610274.6940825 1768610277.9353135 1768610285.045674 1768610290.080227 1768610296.824196 1768610306.0538583 1768648520.2463694 1768648524.3537803 1768648526.0771394 1768648529.4067469 1768648534.5302858 1768750756.6713378 1768750760.8883185 1768750762.2632756 1768750763.0123136 1768750763.9212747 1768750769.8994906 1768750772.5732853 1768750777.4850461 1768752413.340801 1768752420.6023462 1768752422.6215243 1768752425.7867491 1768752427.6385326 1768752429.650268 1768752431.0732105 1768752441.6148021 1768752447.8566244 1768754200.131358 1768754211.6892462 1768754212.3077621 1768754216.445737 1768754220.9125214 1768754225.1230843 1768754225.6267507 1768754245.372674 1768796002.133248 1768796010.3023002 1768796011.5949295 1768796015.0323164 1768796015.8145432 1768796019.2814276 1768796026.593093 1768796031.6583393 1768796033.0877004 1769188837.0375812 1769188837.786761 1769188847.6208885 1769188851.0616503 1769188854.4203012 1769188859.236143 1769188871.306891 1769356115.074438 1769356117.2475653 1769356138.9818916 1769356139.6534898 1769356182.5385997 1769356183.954588 1769356185.6475754 1769356198.3801432 1769431198.390828 1769431201.5240662 1769431206.2080142 1769431206.6666946 1769431207.3521287 1769431209.8815796 1769431211.4100068 1769431213.8480275 1769431217.1288738 1769520574.57131 1769520580.9615748 1769520583.5518386 1769520584.6905546 1769520585.5634441 1769520599.9041538 1769520600.6451283 1769520627.5367892 1769520670.975549 1769599648.6679952 1769599655.1322901 1769599664.7568235 1769599666.4479232 1769599667.6139998 1769599682.9860744 1769599684.0950832 1769601234.0402722 1769601238.249395 1769601244.869996 1769601245.8162582 1769601257.4308686 1769601257.9740627 1769601260.8389282 1769601263.5695539 1769601271.478781 1769602947.2968462 1769602955.2546017 1769602959.1448636 1769602963.4101026 1769602970.7160242 1769602973.4823887 1769602981.6378336 1769602989.1562142 1769608598.3435633 1769608604.2349756 1769608604.601876 1769608605.4494705 1769608611.9154606 1769608617.0367196 1769608624.0631845 1769608627.4674208 1769608640.567906 1769610568.8423088 1769610570.6535783 1769610572.2760155 1769610574.9860072 1769610586.6524737 1769610584.3325677 1769610585.0414965 1769610603.931985 1769610612.5651 1769613447.7525485 1769613452.023495 1769613455.6614032 1769613474.061038 1769613477.762277 1769613522.2723105 1769613574.9480097 1769613575.9668584 1769613618.426645 1769726028.804288 1769726032.290003 1769726034.8757539 1769726041.8972003 1769726044.0577905 1769726045.1911438 1769726055.1641352 1769754949.819708 1769754950.1370707 1769754954.8530273 1769754958.0237353 1769754960.5883057 1769754966.0287259 1769754972.351571 1769754974.738888 1769754977.4281905 1769788282.907655 1769788288.5253084 1769788289.849481 1769788293.4059806 1769788295.6611738 1769788308.423529 1769788312.2817266 1769858473.3065324 1769858484.3433414 1769858555.512316 1769858647.5416012 1769858704.5140238 1769858713.3436747 1769858778.3269293 1769858802.0247488 1769858808.7230027 1769941971.4940948 1769941972.732963 1769941977.5641046 1769941982.1623034 1769941982.645791 1769941987.1513543 1769941988.775115 1769941990.5303235 1769950644.8137155 1769950646.2848487 1769950650.8295712 1769950652.0341804 1769950653.6078181 1769950660.5014696 1769950663.2128892 1769950670.5772336 1769950681.001842 1770017224.4015572 1770017226.0972135 1770017227.5026927 1770017231.749207 1770017242.5412765 1770017252.5441816 1770017271.3818393 1770029567.1518002 1770029570.340307 1770029573.6867454 1770029564.3587599 1770029577.2411828 1770029579.9578333 1770029583.1690521 1770029584.482004 1770029593.8162978 1770035028.269459 1770035041.1115882 1770035049.301453 1770035056.7874146 1770035063.4050725 1770035065.1114447 1770035065.5057907 1770035066.744156 1770035070.5860257 1770051243.1616974 1770051250.1983073 1770051251.8492804 1770051252.817322 1770051253.8113017 1770051261.6732495 1770051263.4817977 1770051287.4125712 1770051294.594631 1770054466.1206534 1770054467.1777632 1770054473.0102155 1770054474.1452157 1770054475.1106331 1770054477.808786 1770054483.3615644 1770054489.1622334 1770054493.8870437 1770155681.8264794 1770155688.659341 1770155691.0762267 1770155691.5853927 1770155693.353376 1770155701.8069544 1770155776.465049 1770155813.0368989 1770155847.1930277 1770156004.0932982 1770156009.3996131 1770156012.5004926 1770156014.5202863 1770156019.0435586 1770156023.4328444 1770156024.366795 1770156029.4199026 1770156036.9079852 1770198504.7005956 1770198505.974699 1770198510.613558 1770198516.2578535 1770198519.501817 1770198520.6840563 1770198522.328126 1770198523.844168 1770216381.141068 1770216384.9809282 1770216386.078784 1770216388.4733496 1770216397.7242239 1770216398.7499428 1770216405.7132208 1770216407.6655917 1770216464.6069107 1770285838.4310648 1770285839.4047208 1770285845.1482618 1770285847.8905082 1770285841.2767158 1770285852.6968825 1770285861.5700352 1770285864.8976052 1770285866.8076255 1770286841.6262429 1770292963.8278131 1770292966.564227 1770292977.1111255 1770292978.987983 1770292983.425502 1770292985.7778904 1770292992.654737 1770293005.2807176 1770293727.1439166 1770293736.492512 1770293742.9712944 1770293748.1470556 1770293750.9539392 1770293753.1042962 1770293754.1672068 1770293755.9334252 1770293762.1849937 1770294177.6031017 1770294179.2221286 1770294182.409861 1770294185.4034204 1770294189.954195 1770294192.2262456 1770294195.2364454 1770294209.3209252 1770294216.7605686 1770296074.3093114 1770296079.5112505 1770296085.0671687 1770296089.0901968 1770296091.5357335 1770296093.746994 1770296103.4383368 1770296115.1115165 1770296116.7188926 1770299387.0234706 1770299393.734676 1770299396.5552564 1770299397.9449227 1770299398.405942 1770299406.1220129 1770299411.0808227 1770299418.005087 1770304628.2581263 1770304632.1874857 1770304635.5848792 1770304637.4246569 1770304645.8792233 1770304652.500186 1770304796.5059683 1770304805.3266668 1770304805.9559672 1770306998.81128 1770352891.2765408 1770352956.2453735 1770352986.6446555 1770353015.8254614 1770353024.4290829 1770353034.2017062 1770353118.7308602 1770353204.512918 1770353218.492321 1770367607.3939998 1770367610.0111365 1770367614.45688 1770367615.195527 1770367615.6579452 1770367618.4807427 1770367627.2286937 1770367641.6742887 1770367688.8227878 1770375402.595021 1770375403.2182865 1770375406.9050174 1770375407.8124533 1770375411.0714655 1770375418.803763 1770375419.6336913 1770375426.5908537 1770375438.3355699 1770377679.8791206 1770377685.893547 1770377691.212522 1770377694.2193422 1770377700.6231124 1770377707.430232 1770388325.7926264 1770388332.1394527 1770388335.5754883 1770388338.1641219 1770388485.2298472 1770388486.7889037 1770388498.7128625 1770388510.505477 1770388524.7809443 1770448313.438776 1770448313.9616911 1770448318.2289886 1770448319.6247897 1770448320.5280318 1770448321.4971566 1770448326.5257752 1770448328.488793 1770448349.434152 1770474541.5718706 1770474662.913524 1770474669.9453278 1770474672.0780892 1770474675.1842391 1770474678.9146457 1770474687.7994618 1770474688.8756824 1770474691.3726463 1770474692.9100966 1770481605.699769 1770481608.6086423 1770481611.768069 1770481613.7110043 1770481624.7046242 1770481630.5988204 1770481631.8143861 1770481637.0272915 1770482484.29333 1770482491.0655518 1770482497.2632189 1770482497.7695203 1770482498.5569618 1770482502.8524082 1770482505.567013 1770482508.9287205 1770482525.3033104 1770488366.9155667 1770488370.9018245 1770488372.2807295 1770488380.6067863 1770488380.9800029 1770488384.2862618 1770488384.7730534 1770488387.3612244 1770547755.0958505 1770547759.2344968 1770547760.8083112 1770547764.0160139 1770547767.344153 1770547769.2391427 1770547775.804789 1770547787.0251117 1770552981.288764 1770553003.9997299 1770553069.368204 1770553083.7589478 1770553087.3663883 1770553088.7641938 1770553093.710568 1770553094.2635589 1770553127.7866013 1770630887.801219 1770630892.8695138 1770630895.7021675 1770630897.280305 1770630898.801555 1770630909.526364 1770630962.881308 1770630966.585008 1770630973.0093026 1770639812.003858 1770639817.971794 1770639830.878849 1770639886.5446465 1770639892.9692142 1770639894.882578 1770639896.724656 1770639904.0340664 1770639918.555993 1770666463.2497134 1770666489.4294336 1770666494.062041 1770666543.0114794 1770666596.8524406 1770666637.062504 1770666660.894903 1770678196.9051228 1770678200.1169786 1770678203.065707 1770678293.564291 1770678296.2945912 1770678299.3110435 1770678306.325338 1770678318.2274911 1770678330.3257508 1770713495.7730114 1770713496.5848763 1770713497.807587 1770713498.528954 1770713507.7146904 1770713515.1544588 1770713517.8683257 1770713540.7203977 1770808063.4899719 1770808066.430682 1770808070.9095547 1770808073.9356825 1770808075.619688 1770808077.9274998 1770808093.0801852 1770808095.7556472 1770808891.1125565 1770808892.6134186 1770808898.3738124 1770808900.2658844 1770808901.484776 1770808909.4623446 1770808912.6182282 1770808916.8051906 1770808917.5748165 1770809447.4234073 1770809452.9602368 1770809453.6279988 1770809454.0772502 1770809455.1354978 1770809455.6678789 1770809456.6628273 1770809465.8118029 1770809469.5300505 1770810357.3477256 1770810359.343377 1770810362.88448 1770810363.456319 1770810371.1891587 1770810377.7186735 1770810392.244661 1770810406.1654177 1770899096.5793927 1770899098.3827033 1770899101.0838323 1770899102.4842598 1770899104.6827645 1770899111.809342 1770899112.9919648 1770899128.6597016 1770899248.5425107 1771076341.0126917 1771076343.506212 1771076350.479432 1771076351.6451955 1771076356.9553094 1771076366.3930233 1771076377.9620905 1771153613.0499876 1771153615.8472834 1771153620.339606 1771153633.8619168 1771153650.6205938 1771153687.2132227 1771153708.54045 1771153716.4352381 1771164876.0520263 1771164879.5962496 1771164880.594281 1771164884.0660386 1771164886.7604036 1771164904.1516867 1771164906.802209 1771164908.281534 1771165042.0703905 1771165045.7845407 1771165046.2814014 1771165047.8980622 1771165061.7444115 1771165066.7939172 1771174013.7134352 1771174015.9087002 1771174018.5526137 1771174020.0801136 1771174022.5137017 1771174027.8996327 1771174030.041202 1771174031.6948006 1771174038.2379742 1771175143.8134773 1771175149.462427 1771175151.9771097 1771175153.8716705 1771175157.0586224 1771175159.955862 1771175161.3851736 1771175295.0077727 1771175296.0930247 1771175300.7326233 1771175301.8456702 1771175303.9392393 1771175306.2821484 1771175309.090323 1771175318.9579391 1771175322.8382182 1771176996.9813175 1771177000.1674964 1771177002.6654875 1771177004.0820394 1771177011.4292345 1771177014.6017056 1771177017.5282974 1771177021.4518795 1771177024.6343913 1771185405.2020059 1771185407.9832363 1771185451.4425006 1771185466.3495464 1771185500.8092175 1771185539.0877485 1771185591.724145 1771185598.1286225 1771185614.1913784 1771244458.7711375 1771244660.7247722 1771244684.6490598 1771244694.3202388 1771244735.967286 1771244842.5954037 1771245183.3800526 1771245497.0590835 1771245644.0315454 1771600012.0328515 1771600018.626791 1771600020.4096375 1771600021.169344 1771600023.745423 1771600028.3680377 1771600028.8611665 1771600038.381504 1771600042.4843132 1771684030.1196742 1771684031.4314518 1771684033.397595 1771684034.3962631 1771684036.2810757 1771684045.215912 1771684053.1180193 1771684054.5356603 1771757003.813362 1771757005.1222928 1771757006.111422 1771757007.1642048 1771757017.1231 1771757021.1513972 1771757028.3927412 1771757030.9026449 1771764363.7003086 1771764364.442254 1771764365.4441075 1771764370.843027 1771764382.209699 1771764468.0461407 1771764493.6582198 1771780294.343606 1771780296.5097165 1771780298.4102716 1771780299.0157566 1771780308.3770611 1771780309.7407043 1771780314.8731542 1771780321.8025336 1771780324.5329354 1771837751.3228168 1771837756.767008 1771837760.2879758 1771837769.8369215 1771837770.2048807 1771837772.8549726 1771837788.6489344 1771839299.4875984 1771839305.4016466 1771839307.9862158 1771839308.9755557 1771839310.5828793 1771839322.6886103 1771839323.2381954 1771839325.3454525 1771865784.6298401 1771865786.3726418 1771865787.318743 1771865803.3110325 1771865811.3406887 1771972820.8536546 1771972821.5067422 1771972840.4580994 1771972846.1839893 1771972884.3953075 1771972886.8935175 1771972892.4252405 1771972902.1194937 1772004121.2945533 1772004122.7917647 1772004124.9790232 1772004129.7317517 1772004134.1553736 1772004140.8575795 1772004142.5861886 1772004147.0769281 1772039635.139008 1772039636.0414748 1772039639.855896 1772039648.0528839 1772039651.6689503 1772039654.9362936 1772039660.0298471 1772039667.3506672 1772097086.5031183 1772097098.1678927 1772097111.1263285 1772097117.7405796 1772109463.553514 1772109466.3407483 1772109480.4852076 1772109481.6438973 1772109484.0316198 1772109485.8141325 1772109494.0484235 1772125617.511287 1772125620.4649448 1772125620.9415054 1772125625.5994627 1772125633.153215 1772125651.902158 1772125654.4224913 1772125794.3522947 1772125796.7602608 1772125799.6996412 1772125812.3675652 1772125813.0661526 1772125813.6645544 1772125816.1068468 1772183828.892642 1772183832.5869255 1772183835.152446 1772183843.5205145 1772183852.0932834 1772183859.433871 1772183868.0199094 1772280404.2078578 1772280404.69581 1772280407.464592 1772280409.17338 1772280410.9133086 1772280413.3649797 1772280421.0677361 1772280423.5847754 1772295578.4514158 1772295580.894601 1772295581.7305021 1772295582.7096155 1772295583.8931496 1772295588.8290505 1772295589.741979 1772295599.709021 1772295602.4200597 1772297271.8931916 1772297272.796662 1772297276.1779351 1772297281.0048177 1772297287.5373304 1772297289.1350865 1772297290.1080134 1772297296.3202076 1772297945.7492647 1772297949.3261893 1772297951.851947 1772297953.4251385 1772297961.0872998 1772297962.237692 1772297968.548078 1772297976.193011 1772298793.4816813 1772298801.7994263 1772298804.3413033 1772298816.8963897 1772298819.4326506 1772298821.0167608 1772298821.461571 1772299046.3897016 1772299050.552813 1772299058.2212174 1772299059.2914927 1772299066.873316 1772299073.6742685 1772299786.0516667 1772299787.7142491 1772299788.997042 1772299795.5276682 1772299806.997665 1772299816.2948682 1772300068.4680173 1772300074.1381872 1772300075.076055 1772300080.9735785 1772300090.6366215 1772300094.4405732 1772300530.293983 1772300534.5245671 1772300544.3982706 1772300548.0080998 1772300552.9624085 1772300570.5476682 1772300932.9506423 1772300936.419418 1772300941.5620844 1772300943.8668664 1772300964.111361 1772328442.6384232 1772328443.3122764 1772328444.0383964 1772328454.9741364 1772328455.7685978 1772328456.676097 1772328464.6393201 1772328468.4323661 1772328473.5744238 1772351413.8249013 1772383323.1008327 1772383329.9349842 1772383331.386728 1772383332.146261 1772383333.3551807 1772383335.9397588 1772383337.1753385 1772383342.6916847 1772383348.262124 1772383821.0542176 1772383823.6034913 1772383825.878503 1772383826.176101 1772383827.88893 1772383832.7978203 1772383842.736432 1772383847.1015575 1772383850.6285467 1772454124.9551854 1772454151.6994405 1772454233.6164246 1772454250.9810789 1772454289.6593218 1772454310.1916735 1772454394.1553872 1772454398.7474406 1772454562.4118385 1772713528.9459274 1772713544.885845 1772713545.9493737 1772713650.5365589 1772713668.5272853 1772713706.8689525 1772713719.4318998 1772714313.3804982 1772714634.441328 1772764959.4377325 1772764964.7828572 1772764967.7785013 1772764970.1141407 1772764973.2195883 1772764984.4319944 1772765126.5007186 1772787175.2837644 1772787179.9415834 1772787186.6077988 1772787186.8416843 1772787187.15247 1772787198.6093411 1772787204.9290109 1772787209.0141208 1772809991.9257238 1772809992.8731363 1772809997.4999394 1772810001.7896464 1772810005.7003007 1772810006.7824953 1772810008.0087657 1772810021.9598997 1772810085.6787655 1772905492.0566986 1772905498.5148373 1772905501.3888893 1772905503.641356 1772905509.1755662 1772905511.2718103 1772905521.3545146 1772905530.8175929 1772967830.8897622 1772967834.800573 1772967835.3464074 1772967838.857526 1772967842.5253148 1772967849.667246 1772967857.5036254 1772967858.8364737 1772967861.6873882 1772984316.610907 1772984318.0384367 1772984361.0834682 1772984389.3850882 1772984403.9999688 1772984440.3767893 1772984445.8218489 1772984475.5563498 1772984492.1683066 1772986406.4741344 1772986410.3417528 1772986411.5768716 1772986412.093717 1772986415.0171423 1772986419.9504926 1772986423.3365016 1772986428.4155931 1773059898.1412277 1773059935.98033 1773060041.6970541 1773060054.2331545 1773061011.8323395 1773061314.2291052 1773061380.437499 1773061414.112351 1773061436.1397038 1773145071.5631673 1773145145.0533056 1773145299.1570978 1773145317.0917435 1773145361.1160474 1773145431.9178998 1773145447.205267 1773145574.0338075 1773145864.4072688 1773145867.958283 1773145870.8676126 1773145873.084005 1773145874.1125846 1773145883.6725326 1773145885.4807596 1773145903.0986722 1773158716.4506488 1773209697.8553648 1773209704.3154953 1773209707.7399786 1773209708.3590436 1773209712.3566198 1773209715.2477503 1773209716.6491067 1773209717.4205372 1773209727.397243 1773243569.3923771 1773243579.9017727 1773327509.4352446 1773327512.384058 1773327517.778177 1773327519.3600962 1773327525.9831553 1773327530.2042542 1773327531.6041195 1773327533.6185954 1773342044.3975337 1773342047.2800632 1773342047.7213204 1773342051.3167768 1773342070.793869 1773422305.7551844 1773422306.8472383 1773422307.260621 1773422307.861149 1773422309.2151213 1773433616.940507 1773433617.8015654 1773433618.1402817 1773433618.8915472 1773433620.1571712 1773433636.6559062 1773433685.9827228 1773433769.0329056 1773433793.9351418 1773436822.279561 1773496529.2417994 1773496531.6484542 1773496534.2970135 1773496540.2494192 1773496542.5848348 1773496556.6658444 1773496557.646253 1773508559.8649719 1773508564.2156093 1773508565.6863298 1773508566.2063718 1773508567.2482834 1773508576.2386317 1773508579.5570102 1773508588.7930615 1773526091.7305086 1773526094.7576952 1773526099.7316136 1773526101.0460598 1773526102.468852 1773526107.369785 1773526110.1862388 1773526115.115235 1773526116.7317014 1773531665.82529 1773531666.3771586 1773531666.8047104 1773531667.4920819 1773531668.6569617 1773533178.7996001 1773533179.23835 1773533180.4051468 1773533180.702309 1773533326.7572465 1773533328.9965563 1773533329.9414577 1773533330.16112 1773533330.968805 1773533332.2384558 1773533342.702904 1773533347.4469643 1773533359.1699326 1773663912.872022 1773663917.414473 1773663920.1189451 1773663923.0031617 1773663929.1929984 1773663934.9318051 1773663938.2461636 1773663945.447361 1773663948.7060542 1773923127.7739248 1773923140.1724749 1773923171.917618 1773923216.2591379 1773923290.2481165 1773923351.7546723 1773923387.236511 1773924177.1936789 1773924247.1279826 1774116622.3116958 1774116626.685884 1774116631.36191 1774116634.4917035 1774116636.007466 1774116646.396959 1774116649.9595244 1774122611.4872355 1774122612.0778387 1774122617.113013 1774122623.748957 1774122624.2195117 1774122627.254311 1774122631.9285514 1774122633.3222346 1774122643.6527953 1774123449.8178384 1774123455.4579494 1774123456.9654434 1774123460.0542014 1774123468.123217 1774123470.894454 1774123473.1936722 1774123615.9096093 1774123617.057869 1774123618.2236078 1774123620.8008826 1774123627.442505 1774123629.493724 1774123630.8533177 1774123636.9826944 1774123643.869337 1774125064.8095303 1774125068.9721835 1774125072.345307 1774125073.838626 1774125078.0622084 1774125078.9767094 1774125084.6969202 1774125096.4611142 1774165455.8215635 1774165456.3814306 1774165458.2990782 1774165464.2143352 1774165468.043054 1774165468.4514842 1774165473.8426971 1774165484.6675928 1774165490.0981755 1774173607.1004112 1774173625.73087 1774173709.2447455 1774173744.2978158 1774173764.3022842 1774173786.8334386 1774173805.8676367 1774173809.644974 1774173889.2116613 1774179069.3753922 1774179134.4216766 1774179147.1273863 1774179151.712217 1774179172.1551447 1774179178.1981494 1774179230.1370556 1774179231.5304184 1774179279.552431 1774183796.2095468 1774183796.7006834 1774183797.983253 1774183801.156979 1774183802.2355645 1774183811.2893264 1774183822.0530934 1774183824.9673326 1774191717.4712055 1774191718.3463879 1774191721.421663 1774191725.149967 1774191727.2233143 1774191732.0443897 1774191735.698229 1774191737.403349 1774268525.0307348 1774268526.373377 1774268527.2372344 1774268537.347842 1774268572.9748507 1774268604.4843407 1774268639.346915 1774268687.8962731 1774268712.863652 1774527755.3994756 1774527759.1027331 1774527759.7701855 1774527766.0900435 1774527768.3282084 1774527775.64296 1774527847.611203 1774527868.9990609 1774527892.2252436 1774873655.527003 1774873666.6517813 1774873668.6499827 1774873672.1687975 1774873674.125012 1774873676.3726752 1774873680.1577253 1774873685.824583 1774875895.7435656 1774875899.2784672 1774875902.3986785 1774875905.0208993 1774875905.594042 1774875909.4528077 1774875914.4021006 1774875918.060093 1774876701.5632007 1774876702.4201756 1774876704.384826 1774876706.8571978 1774876710.02423 1774876719.672133 1774876732.959303 1774876733.9153466 1774876736.3431017 1774880824.6487224 1774880825.8109229 1774880832.7772617 1774880833.8427367 1774880836.6255288 1774880839.2399762 1774880841.9262152 1774880851.3003206 1774881363.6655617 1774881367.4241898 1774881372.1439908 1774881374.0549834 1774881385.053962 1774881389.3328514 1774881393.963817 1774881394.7380836 1774881400.2569187 1775231066.5313282 1775231119.1918912 1775231129.4662294 1775231177.3856704 1775231196.8174288 1775231214.4311275 1775231297.0647576 1775231334.9891703 1775231338.6613705 1775232630.3965228 1775232640.9850821 1775232648.2935927 1775232767.7549682 1775232769.345424 1775232773.8040285 1775232779.7044146 1775232795.4553795 1775232797.4147656 1775234999.7864647 1775235006.9964473 1775235009.0573256 1775235017.2879946 1775235271.5614855 1775235283.7214663 1775235285.2803273 1775235306.43616 1775241999.4150372 1775242123.5503404 1775242126.3104184 1775242143.7351582 1775242210.8824239 1775242221.0156906 1775242396.821857 1775242449.6782231 1775242917.341283 1775312885.8533607 1775312892.5294592 1775312916.0363607 1775312923.368411 1775312928.9784486 1775312930.7954159 1775312939.4274864 1775318471.3398528 1775318474.8361926 1775318479.0674982 1775318483.5954714 1775318484.0378363 1775318488.6386657 1775318489.0825813 1775319309.9300623 1775319312.934079 1775319315.2263668 1775319319.3970985 1775319376.0797794 1775319379.438265 1775319387.2380319 1775319400.7464328 1775319407.4777956 1775322237.4052963 1775322237.8814938 1775322241.1159406 1775322242.6739452 1775322247.1877317 1775322250.2518969 1775322251.8086483 1775322254.6575804 1775322268.3851843 1775381179.7835803 1775381180.9311726 1775381187.0079129 1775381187.4863334 1775381190.7522886 1775381197.9658923 1775381202.1844847 1775381202.9599855 1775402318.8826947 1775402321.8426278 1775402322.2964063 1775402323.9786787 1775402325.1313353 1775402325.7507243 1775402334.9895287 1775402342.0844438 1775402350.98194 1775462783.7941637 1775462786.3998082 1775462791.9899664 1775462797.2010918 1775462817.1794748 1775462854.5869381 1775462868.0183764 1775462878.52322 1775464091.0254564 1775464097.9112625 1775464102.6998096 1775464107.9394155 1775464109.435578 1775464111.759231 1775464115.5834837 1775464125.0957696 1775464128.2511601 1775466263.7154732 1775478270.6244485 1775478281.4753964 1775478288.554501 1775478310.7563734 1775478311.489444 1775478314.0560038 1775478327.5556254 1775478336.92283 1775478403.020345 1775492855.630969 1775492865.677199 1775492871.0985777 1775492913.0388153 1775492914.2092292 1775492916.9741492 1775492924.6610458 1775492936.5097935 1775494313.6594186 1775494318.0464292 1775494319.3477843 1775494320.2532756 1775494321.7131712 1775494327.6839483 1775494328.640422 1775494331.6578414 1775494365.9452775 1775551071.1644187 1775551074.4337926 1775551079.0472832 1775551083.2774842 1775551085.7583468 1775551090.7644863 1775737435.2773647 1775737438.7938755 1775737439.635319 1775737447.1997576 1775737453.2451897 1775737457.3720942 1775737460.0834644 1775737479.3835547 1776083164.7412949 1776083166.0760298 1776083172.9341552 1776083173.2533977 1776083177.1253726 1776083177.7411783 1776083180.209172 1776083263.7892222 1776083286.7843368 1776342281.6236448 1776342324.3168411 1776342367.6482716 1776342394.2922654 1776342405.7413058 1776342434.293768 1776342520.3987992 1776343739.3542569 1776343741.3466635 1776343749.4476836 1776343754.4298182 1776343755.0325396 1776343769.2924407 1776343775.1753948 1776343828.6562598 1776343854.564765 1776344633.014359 1776344637.3803189 1776344644.7009134 1776344655.25513 1776344660.5385182 1776344822.1057956 1776344856.866423 1776344870.981311 1776344900.9728403 1776344911.9065537 1776344991.6632652 1776345011.4701812 1776345020.397637 1776345020.6287603 1776494589.0378575 1776494589.6638293 1776494594.2250469 1776494594.5081048 1776494594.7770948 1776494598.6157148 1776494600.1698377 1776494607.1387196 1776494618.9425201 1776496070.773081 1776496074.2403238 1776496082.1198342 1776500548.6272972 1776500550.8541093 1776500552.396871 1776500561.6513975 1776500561.9745164 1776500563.704424 1776500564.6515799 1776500569.7395694 1776500573.3939784 1776513541.9652882 1776513542.9883733 1776513543.6343865 1776513544.158197 1776513553.7539227 1776513556.4451942 1776513559.8873482 1776513565.521203 1776513566.9828477 1776515776.2957382 1776515778.0470045 1776515783.6812472 1776515788.2738 1776515788.6813345 1776515789.7096481 1776515791.667823 1776515799.8251324 1776515806.7688403 1776521436.0148668 1776521440.1395595 1776521442.0799096 1776521444.7308571 1776521446.7341077 1776521450.7588751 1776521456.820204 1776521457.2570791 1776521462.973624 1776525730.7254903 1776525731.5157208 1776525732.2143252 1776525735.2291906 1776525739.6271024 1776525745.47407 1776525747.4315937 1776525748.1166008 1776530796.9598818 1776530834.8976426 1776530864.183933 1776530904.1523414 1776530906.5831788 1776530917.970012 1776530957.2714953 1776530958.9008594 1776530975.3914669 1776602223.330836 1776602243.389179 1776602275.7255769 1776602286.458232 1776602300.1333187 1776602300.6690238 1776602301.1831164 1776602314.4517279 1776602954.1821818 1776602955.5293558 1776602959.3396807 1776602962.849875 1776602970.9934807 1776602971.7103772 1776602974.2212696 1776602980.194477 1776688037.9927702 1776688046.959831 1776688056.5510614 1776688061.4678383 1776688066.5871947 1776688113.6823382 1776688153.5094948 1776688265.2301989 1776688298.7890384 1776732662.0460057 1776732665.8318326 1776732666.489607 1776732670.0498426 1776732671.863852 1776732676.685261 1776732678.7114165 1776732685.426199 1776732686.6590118 1777121007.3493567 1777121011.3679473 1777121015.6233008 1777121017.4013567 1777121021.4683287 1777121025.4130871 1777121033.1263654 1777121034.594803 1777121036.4797184 1777124043.4091897 1777124045.9143817 1777124049.68581 1777124050.627295 1777124050.8497925 1777124063.542509 1777124065.626547 1777124068.4933844 1777125999.781397 1777126000.7849672 1777126001.1903439 1777126003.6446674 1777126009.2178264 1777126014.702515 1777126015.3995945 1777126026.6103077 1777126027.3554199 1777134789.5697863 1777134794.8848414 1777134798.203008 1777134802.584216 1777134805.801339 1777134810.2188227 1777134810.6067982 1777134815.5159879 1777287340.259427 1777287342.5806 1777287394.4660351 1777287403.198653 1777287414.5551069 1777287429.0213566 1777287435.7822795 1777287438.907569 1777287443.075804 1777293571.550748 1777293575.1182587 1777293575.6059732 1777293579.0007524 1777293579.7482665 1777293582.7539198 1777293588.9424148 1777293591.4147072 1777363065.5634713 1777363068.047331 1777363068.8651152 1777363069.2966669 1777363073.8316216 1777363082.3102756 1777363084.8887331 1777363085.6754465 1777808351.4681172 1777808352.1735678 1777808688.5471714 946dfsdoehjalx82nego3ua5g03ht5s 740343 740342 2026-05-03T11:45:04Z Pywikibot-oauth 29170 740343 wikitext text/x-wiki 1717938323.983468 1717938325.9381392 1717938327.6745121 1717938345.265466 1717938346.1106002 1717938350.5920074 1717938353.0482574 1717953288.8608625 1717953293.9055603 1717953292.1927369 1717953292.2962074 1717953294.2398 1717953312.240725 1717953316.1704223 1717953317.268496 1717953318.2313948 1717997567.7045777 1718009302.675245 1718009303.0268657 1718009305.1731467 1718009309.4585795 1718009328.7909298 1718009333.1985834 1718009383.5844293 1718009385.1342936 1718009386.2813547 1718009388.613266 1718009398.8815582 1718009408.5800366 1718009439.4752173 1718009607.9868848 1718009609.3225954 1718009610.7008185 1718009611.3111014 1718009614.7206109 1718009619.8805332 1718009633.8648026 1718009654.4389236 1718013612.7444367 1718013615.4898036 1718013616.8618758 1718013617.578818 1718013628.183184 1718013640.3193917 1718013648.6140828 1718013688.6004112 1718016374.1180348 1718016375.439417 1718016376.2004616 1718016380.8626587 1718016404.172379 1718016421.9062774 1718017148.5199714 1718017151.167183 1718017152.579374 1718017154.8653364 1718017156.385661 1718017173.681575 1718017176.016188 1718017200.9282327 1718018372.899415 1718018659.6671212 1718018660.4208403 1718018662.0027812 1718018664.5138478 1718018682.755611 1718018686.6985393 1718018704.9304743 1718021145.9996097 1718021148.1332645 1718021148.8790848 1718021151.64248 1718021152.3035438 1718021183.5700638 1718021188.2089362 1718021194.6740658 1718021912.815989 1718021915.923219 1718021917.6584659 1718021919.7312863 1718021921.5385063 1718021940.462804 1718021956.3317823 1718021965.900075 1718022675.5741732 1718025361.51236 1718025362.1419137 1718025363.549265 1718025365.794714 1718025367.0023723 1718025381.4007874 1718025386.8869488 1718025390.1932719 1718025420.3657703 1718026112.6940236 1718026114.5253518 1718026116.9373848 1718026119.4845717 1718026120.817934 1718026123.051878 1718026136.3197055 1718026140.8453245 1718026145.4011593 1718026163.7837195 1718029773.4831073 1718029774.3958006 1718029775.4855509 1718029776.785981 1718029781.6460838 1718029783.6814554 1718029795.5788717 1718029798.7532082 1718029803.2993777 1718029839.3786342 1718088780.7319355 1718088783.1151495 1718088785.5244112 1718088786.0638566 1718088790.2916877 1718088800.889361 1718088810.884886 1718088814.4438264 1718088814.2049983 1718098333.8518348 1718098334.492469 1718098335.9334357 1718098338.9121008 1718098351.4070423 1718098360.9338825 1718098363.3991063 1718098388.9819927 1718098502.7364287 1718098783.731209 1718098785.4471197 1718098788.7367818 1718098790.8354266 1718098793.2723055 1718098796.6948872 1718098804.8592188 1718098809.4647124 1718098817.6042728 1718098830.9912333 1718099231.027644 1718099234.4692736 1718099235.052649 1718099236.3166866 1718099255.4998035 1718099256.26313 1718099258.3496053 1718099280.7436473 1718111091.2757294 1718111094.233729 1718111096.5565636 1718111103.6016734 1718111108.502889 1718111116.434526 1718111142.8487227 1718114486.9111218 1718114488.8848925 1718114492.5300286 1718114505.449661 1718114508.5768387 1718114513.384398 1718114557.7346702 1718120951.709677 1718120954.2943966 1718120955.4632218 1718120962.1287925 1718120969.2791822 1718120975.7068148 1718120983.0374181 1718120998.2290237 1718167739.5514672 1718167741.361884 1718167744.7950137 1718167745.417929 1718167757.8886697 1718167765.954192 1718167775.6431954 1718168307.9341757 1718168309.0630918 1718168310.747874 1718168311.1551263 1718168311.824176 1718168328.8877923 1718168329.1683598 1718168332.8930173 1718168334.318795 1718170628.1888835 1718170631.9050498 1718170632.746343 1718170634.9433777 1718170636.927007 1718170654.1273365 1718170656.173754 1718170657.3509326 1718170659.621824 1718170887.5461829 1718204836.6592476 1718204841.3648756 1718204842.685919 1718204846.9438975 1718204855.260591 1718204857.186586 1718204866.7263968 1718204946.7416897 1718206153.2249477 1718206154.0826955 1718206156.8141618 1718206166.206424 1718206170.4542036 1718206189.6599023 1718206193.0557477 1718206209.0511112 1718206394.678831 1718206399.1699252 1718206403.0055304 1718206416.9370177 1718206422.3951635 1718206426.1713943 1718206481.3811412 1718207931.4095542 1718207936.0076962 1718207937.0227344 1718207938.648662 1718207951.2997663 1718207962.9280522 1718207970.8110354 1718207986.3565502 1718270206.6322293 1718270208.396686 1718270209.8471525 1718270212.1417482 1718270212.8735263 1718270225.4295442 1718270229.9387715 1718270233.8893638 1718270249.8745449 1718278524.21183 1718278526.7441041 1718278529.0446036 1718278530.6510525 1718278533.3816156 1718278541.910818 1718278549.337206 1718278552.886615 1718278569.0438437 1718287801.4408586 1718287803.4836357 1718287804.9007418 1718287808.1488054 1718287808.4518878 1718287822.867423 1718287826.7880008 1718287855.8315911 1718297766.9014719 1718297767.4670007 1718297769.5687966 1718297772.4048378 1718297777.3219984 1718297790.6331906 1718297792.4884562 1718297795.184645 1718302176.0627773 1718302177.5144217 1718302178.8230069 1718302194.8260093 1718302201.1135983 1718302206.1642869 1718302218.1861632 1718302219.3047798 1718336718.1941583 1718365268.4987638 1718365269.641732 1718365270.5083897 1718365271.728583 1718365274.002535 1718365291.8463135 1718365294.8545115 1718365301.4906988 1718365315.3869822 1718365505.726982 1718448902.0726335 1718448904.9608967 1718448905.7732697 1718448907.9344823 1718448914.5668309 1718448928.1298878 1718448928.9807873 1718448930.3379903 1718448930.331011 1718454069.948404 1718454073.9749632 1718454076.1152103 1718454077.8158538 1718454080.9835265 1718454093.4771943 1718454096.5800304 1718454103.1700485 1718454102.7764804 1718456201.0723767 1718456201.771049 1718456204.8900273 1718456223.2486367 1718456226.5021062 1718456230.0176444 1718456234.8390899 1718459952.221978 1718459952.9086947 1718459954.7137554 1718459957.011037 1718459957.8085938 1718459970.2652814 1718459973.344553 1718459980.3818643 1718459980.794316 1718467221.4074085 1718467223.9760313 1718467225.2852647 1718467226.4534006 1718467227.5403411 1718467238.6423047 1718467245.6560714 1718467249.314935 1718467250.7741568 1718470146.792804 1718470150.8378944 1718470152.434354 1718470155.6266527 1718470156.4344456 1718470167.0206006 1718470170.511652 1718470178.847092 1718470180.4159863 1718477476.8284774 1718477478.9504488 1718477480.2399306 1718477483.233796 1718477495.1057756 1718477505.138055 1718477508.230259 1718477509.4137573 1718479108.4211571 1718515652.3761146 1718515657.7088983 1718515658.6416357 1718515660.4557362 1718515660.9534945 1718515671.641125 1718515676.942455 1718515679.664335 1718515691.044993 1718516411.4838226 1718517061.1334279 1718517064.36412 1718517066.351747 1718517067.9823635 1718517070.1635823 1718517078.9948351 1718517089.3589723 1718517090.8877964 1718517687.892127 1718517688.3769186 1718517689.950249 1718517694.0879142 1718517702.0483367 1718517711.8517518 1718517713.7155662 1718517722.782742 1718517837.657381 1718531410.3578694 1718531413.2360501 1718531413.7496576 1718531414.6364017 1718531415.9476206 1718531419.6359458 1718531428.8146567 1718531435.9711194 1718531436.9587393 1718531438.3370793 1718536061.2031472 1718536064.3968182 1718536065.9384258 1718536068.7385488 1718536072.2085466 1718536082.2379959 1718536083.1270118 1718536090.3124897 1718536093.951949 1718541954.3876143 1718541956.0022333 1718541956.941455 1718541957.5561693 1718541958.0702612 1718541975.0538633 1718541980.5246894 1718541981.3653994 1718542008.4670186 1718636379.6202543 1718636381.1092196 1718636382.0674365 1718636383.378525 1718636390.121835 1718636402.868477 1718636403.469083 1718636414.6279762 1718636448.2600234 1718638626.856629 1718638627.783421 1718638633.7572656 1718638635.0484576 1718638639.7305253 1718638645.3893626 1718638654.4974911 1718638655.9837 1718638656.509398 1718638675.2028575 1718730999.6562796 1718731002.9459317 1718731004.5080602 1718731005.8755076 1718731020.2701058 1718731025.4137113 1718731062.9800775 1718744024.6903846 1718744025.9837515 1718744028.94272 1718744030.9566023 1718744042.0349915 1718744050.1404827 1718744054.1966991 1718773967.0703459 1718773968.0080812 1718773970.3090975 1718773970.3435733 1718773971.079693 1718773995.5025868 1718773996.6876066 1718773997.3720262 1718773999.1633239 1718886004.5143113 1718886004.9995835 1718886009.3486383 1718886011.502742 1718886020.6752129 1718886021.2545116 1718886026.1455162 1718886031.2892191 1718886086.0996928 1718961575.2159712 1718961577.248636 1718961579.266859 1718961584.0054727 1718961585.5416117 1718961596.9843493 1718961608.302492 1718961614.6889198 1718961616.3877892 1718968603.7748945 1718968607.0690818 1718968607.9450648 1718968609.6774971 1718968612.2656987 1718968614.1366622 1718968625.3810906 1718968629.4604537 1718968641.5719926 1718968681.1329365 1718968682.261607 1718968683.5617135 1718968684.106964 1718968688.5447705 1718968690.5267246 1718968697.4459171 1718968705.5173635 1718968709.6065145 1718968741.2709723 1719060263.9319239 1719060265.1403356 1719060266.340842 1719060269.3961422 1719060283.8203645 1719060288.0482583 1719060294.2719293 1719060297.7118967 1719061420.802171 1719061422.6048853 1719061423.7334316 1719061425.0414433 1719061433.5318284 1719061439.1523328 1719061445.326212 1719061461.978173 1719061880.7222142 1719061882.552266 1719061884.4065745 1719061884.964865 1719061892.874263 1719061895.8984957 1719061904.7980072 1719061914.2728014 1719061944.038279 1719062152.8865724 1719067189.487594 1719067190.1866813 1719067191.4030895 1719067193.725632 1719067202.8044908 1719067204.7037551 1719067216.787414 1719067229.7356596 1719067909.3010273 1719067911.3103838 1719067911.9389522 1719067912.7892058 1719067915.1173623 1719067926.6543186 1719067935.485951 1719067939.5406718 1719067944.3043442 1719145650.792378 1719145652.1845744 1719145652.8407626 1719145655.4633198 1719145657.428794 1719145666.624809 1719145677.3898938 1719145679.7491868 1719145690.3449385 1719151844.203008 1719151847.829848 1719151852.1046011 1719151856.2039797 1719151862.2484019 1719151867.8664546 1719151870.772161 1719151874.5618086 1719155047.2379646 1719155049.7190826 1719155050.821006 1719155051.5469427 1719155054.5321891 1719155064.8799038 1719155067.3398724 1719155073.8036382 1719155105.9072046 1719155891.186099 1719155894.1741269 1719155894.702736 1719155901.2573574 1719155905.927427 1719155918.0138943 1719155919.6432118 1719155949.5647342 1719171489.1549513 1719171489.9106762 1719171494.0356336 1719171499.7293534 1719171510.372511 1719171513.5158641 1719171519.8476577 1719171642.8685024 1719242605.7242808 1719242606.3999186 1719242608.330176 1719242609.081625 1719242620.0841155 1719242626.622884 1719242632.7130654 1719242646.629726 1719242788.043846 1719246563.8788664 1719246565.1245325 1719246565.523271 1719246567.5838163 1719246568.6878052 1719246574.7292345 1719246582.940538 1719246594.208879 1719246624.0132446 1719246646.4423573 1719255511.0461993 1719255514.2679725 1719255514.8902783 1719255533.9694326 1719255535.7519948 1719255561.5833826 1719255600.0428908 1719257206.277582 1719257207.5948808 1719257208.5332088 1719257212.2003682 1719257229.9038367 1719257240.7883828 1719257257.7664475 1719257412.6408064 1719298510.1701732 1719407566.2328699 1719407567.4559505 1719407569.9593308 1719407575.7728598 1719407593.567035 1719407593.8329344 1719407631.4438539 1719407673.9627962 1719490893.0374126 1719490894.4612806 1719490897.4321358 1719490899.1701922 1719490902.0502431 1719490917.8597374 1719490927.1120436 1719490982.7129836 1719491028.2046077 1719658980.759956 1719658982.1867814 1719658983.3265736 1719658984.8375463 1719659006.3760595 1719659008.233768 1719659038.1869128 1719659053.6470735 1719661510.9347355 1719661511.5324843 1719661512.9147425 1719661515.870037 1719661516.9088366 1719661518.3048205 1719661522.8482125 1719661535.0718417 1719661567.8569882 1719661598.4858406 1719662437.4862742 1719662439.475177 1719662440.519351 1719662443.9609544 1719662448.8941991 1719662457.9865503 1719662477.7968066 1719662501.4439266 1719662505.5643024 1719664452.6829715 1719664453.517005 1719664456.0385885 1719664456.5487328 1719664460.285548 1719664473.429615 1719664480.2840178 1719664517.5621357 1719664520.4785154 1719673276.6724093 1719673278.5594711 1719673280.2434716 1719673283.1366646 1719673309.672662 1719673317.2102964 1719673336.6643648 1719673370.991012 1719677715.7309895 1719677719.557844 1719677720.011801 1719677725.3283927 1719677734.3811567 1719677734.578576 1719677747.991037 1719677779.4570024 1719677795.2211277 1719677944.121938 1719677947.0342872 1719677952.954374 1719677957.6550858 1719677967.588756 1719677985.8510435 1719678003.8949015 1719678018.1203597 1719678487.7313912 1719678490.4696572 1719678491.3958938 1719678496.5990489 1719678498.2562368 1719678509.3167796 1719678516.4686754 1719678547.306207 1719678562.7342274 1719678689.5803418 1719678690.270386 1719678691.1140273 1719678692.451933 1719678692.9669394 1719678705.9989023 1719678720.7839897 1719678754.5303414 1719678801.921674 1719679196.1161187 1719679702.7277484 1719679704.884765 1719679705.6118531 1719679707.7974935 1719679710.1557584 1719679723.6905518 1719679734.038543 1719679770.7907984 1719679818.6751614 1719680158.875494 1719680161.4341679 1719680162.4199877 1719680164.2232368 1719680183.9374866 1719680187.663405 1719680221.9159675 1719680235.5601242 1719680708.6096206 1719680709.4699545 1719680715.619083 1719680732.265567 1719680736.4170895 1719680736.932406 1719680738.4691868 1719680769.77296 1719680780.7043424 1719688562.565408 1719691360.4738486 1719691361.0909443 1719691362.8320959 1719691367.614035 1719691371.838276 1719691382.4826112 1719691388.392583 1719691424.3254218 1719691437.8558855 1719691910.8170524 1719691911.8364177 1719691915.5230062 1719691918.5787246 1719691955.9031386 1719691959.146336 1719691960.9298646 1719691962.9000072 1719691972.0988379 1719691975.7922778 1719691986.8865433 1719691997.4708471 1719692032.7521966 1719692053.8494172 1719738721.563538 1719738723.4371152 1719738723.5942557 1719738724.4970622 1719738725.1963532 1719738734.7646797 1719738743.3773084 1719738751.5416954 1719738786.870921 1719738799.769176 1719739777.2650309 1719739778.3169456 1719739779.938744 1719739783.1745806 1719739797.9755929 1719739804.799515 1719739835.4536004 1719739865.0080156 1719740957.4115753 1719740963.4064841 1719740968.0831258 1719740970.203206 1719740970.6358604 1719740983.8126853 1719740998.5138216 1719741026.1598616 1719741034.488669 1719742149.5130558 1719742150.1764612 1719742151.1998274 1719742152.22184 1719742155.7655077 1719742158.0400107 1719742174.5534735 1719742189.252219 1719742216.181138 1719742226.4915278 1719742546.869991 1719742549.0948424 1719742550.334266 1719742552.9718885 1719742554.7338808 1719742557.8963645 1719742562.7436194 1719742573.797242 1719742619.708493 1719742625.194558 1719745259.5410144 1719745261.4883902 1719745262.6057122 1719745263.6752841 1719745286.9080038 1719745289.0641947 1719745328.0916362 1719745349.6027694 1719752167.7671835 1719754514.0760689 1719754514.9256747 1719754516.3132918 1719754536.5157144 1719754539.9762955 1719754596.3803048 1719754599.82873 1719760133.5291634 1719760134.2539825 1719760140.7209601 1719760151.467467 1719760154.502864 1719760158.4525688 1719760203.6156392 1719760312.8365571 1719824939.5139902 1719824940.8243928 1719824942.4226027 1719824943.062349 1719824944.140916 1719824961.630868 1719824966.442031 1719825010.3715134 1719825038.4196992 1719830109.6348207 1719830110.8810217 1719830111.422231 1719830112.20914 1719830117.347853 1719830121.7140367 1719830130.0074415 1719830146.1857674 1719830188.7506788 1719830204.6365817 1719836492.969278 1719836494.6186726 1719836494.6443224 1719836496.742013 1719836523.180333 1719836638.187037 1719836688.0424724 1719839171.3108604 1719841448.5217607 1719841450.4651759 1719841452.4335685 1719841454.0664856 1719841473.2166533 1719841481.9279184 1719841536.3091393 1719841562.9440105 1719841673.1179872 1719842581.891341 1719842582.7098043 1719842584.522381 1719842586.1380289 1719842590.3433087 1719842610.3571744 1719842611.8049507 1719842666.4960856 1719842712.4774687 1719847508.6857514 1719847509.3525307 1719847510.6604362 1719847528.2575898 1719847536.007867 1719847606.7301466 1719847623.6523726 1719847741.2522056 1719993027.9122436 1719993029.0979218 1719993030.7474782 1719993032.9349523 1719993050.6589947 1719993060.693691 1719993090.2760384 1719993113.2468278 1720004323.8437161 1720004327.9480708 1720004329.254853 1720004333.9301894 1720004357.6504843 1720004375.2054017 1720004385.1751335 1720004400.7738714 1720006892.066838 1720018543.5467849 1720018544.207071 1720018548.11588 1720018550.9547276 1720018552.9559293 1720018553.8820128 1720018567.2008767 1720018573.33096 1720018636.918563 1720018725.3587666 1720020012.144781 1720020015.209173 1720020018.3855567 1720020018.6251917 1720020021.5434313 1720020041.9798167 1720020046.4386566 1720020090.0238922 1720020103.3348067 1720095888.5110908 1720095894.3936722 1720095898.7496827 1720095914.40975 1720095932.5874338 1720095936.788244 1720095992.5494847 1720095997.6260736 1720096068.6120174 1720096142.000555 1720113393.4267867 1720113393.9954696 1720113394.5428329 1720113395.3445654 1720113410.3803558 1720113416.6878488 1720113463.1089094 1720113474.4864273 1720178905.152999 1720264983.1573057 1720264984.7289004 1720264991.1436696 1720264996.5567691 1720265012.2315247 1720265016.7129402 1720265054.6461728 1720265068.45914 1720268414.5574844 1720268456.0846417 1720268457.8302736 1720268459.1110072 1720268462.6664674 1720268464.0216665 1720268485.1050167 1720268489.3534741 1720268530.802286 1720268547.8900359 1720269854.7584038 1720269858.775462 1720269869.3305595 1720269883.1087477 1720269894.0281174 1720269941.6018271 1720269968.3731894 1720281992.4461744 1720281996.0212932 1720281997.9298186 1720281999.0800533 1720282019.8583853 1720282022.7717931 1720282064.3937569 1720282089.4292839 1720282979.3870595 1720282980.70788 1720282981.8929803 1720282983.583917 1720283006.0254724 1720283021.6412923 1720283063.0679586 1720283076.427101 1720283146.0883942 1720283148.7675686 1720283150.0253646 1720283151.398002 1720283166.69723 1720283172.1708326 1720283237.126988 1720283251.5744073 1720347929.6809032 1720347930.5536857 1720347931.5924973 1720347933.0147126 1720347950.2618797 1720347962.1530797 1720348006.9132035 1720348019.4262323 1720355684.7588637 1720355688.9037657 1720355690.8150926 1720355694.2809334 1720355695.3445952 1720355734.9794688 1720355736.9226706 1720355738.5939343 1720355743.7059312 1720355745.7016191 1720355746.3900065 1720355755.6159356 1720355767.7396665 1720355817.6985352 1720355825.541677 1720362535.8521876 1720362539.7770073 1720362541.6408083 1720362542.6222377 1720362543.7119908 1720362546.4056485 1720362566.697002 1720362575.465509 1720362600.9130247 1720362615.262974 1720429846.2601721 1720429851.2459822 1720429853.3674114 1720429856.5243065 1720429860.0182812 1720429866.6442153 1720429867.3754158 1720429928.3265693 1720429965.3328753 1720430013.1402261 1720437341.4689736 1720437343.9167843 1720437348.867465 1720437350.1222687 1720437367.6023335 1720437368.6960366 1720437438.242683 1720437464.6256282 1720441473.9818053 1720441475.3272228 1720441476.3406963 1720441478.8895733 1720441479.7282956 1720441491.7034128 1720441500.936126 1720441578.124788 1720441600.7416165 1720508030.779806 1720508034.720798 1720508035.3622708 1720508037.7463782 1720508042.6894598 1720508044.9407175 1720508056.5278485 1720508062.3510454 1720508121.945859 1720508141.6810555 1720723150.2531953 1720723152.0034084 1720723153.4047132 1720723154.3587787 1720723155.6927114 1720723160.229176 1720723181.9268985 1720723192.2047257 1720723210.7215843 1720723229.6315517 1720871823.769133 1720871824.6627216 1720871825.5460563 1720871826.1253562 1720871827.6929772 1720871844.2957664 1720871850.666975 1720871928.7215664 1720871949.1951418 1720874547.0185373 1720969499.4983323 1720969501.5016003 1720969503.052767 1720969503.8038156 1720969508.6751223 1720969518.3859234 1720969527.5263083 1720969531.275996 1720969576.9711084 1720969596.8234456 1721145106.3810425 1721145106.911887 1721145108.9086998 1721145111.0675786 1721145113.3288937 1721145132.1856048 1721145140.2767642 1721145184.267049 1721145216.828088 1721305209.7903893 1721305213.3784285 1721305214.8135803 1721305215.1242259 1721305221.4533546 1721305238.789072 1721305264.8440905 1721305426.81819 1721305485.3038528 1721379138.4693382 1721379141.1253483 1721379142.7651606 1721379147.1431847 1721379162.4500675 1721379163.127343 1721379224.7573798 1721379237.1989245 1721406788.94073 1721406793.3566136 1721406795.4649131 1721406831.6017003 1721406852.2838242 1721406869.9846714 1721406899.919841 1721406912.9084558 1721488399.1502702 1721488401.390993 1721488404.5964868 1721488406.046398 1721488407.5913856 1721488418.311122 1721488424.1997676 1721488427.7730663 1721488504.7484682 1721488525.566082 1721496591.4225824 1721496594.500339 1721496599.4931395 1721496601.0831027 1721496602.28746 1721496625.780832 1721496643.8198357 1721496652.6943266 1721496667.8110917 1721565388.2224255 1721565388.8312228 1721565390.4933197 1721565390.6252916 1721565391.4323554 1721565393.3962724 1721565407.8343496 1721565420.1680913 1721565454.1642957 1721565478.4827487 1721574226.567986 1721574228.2650464 1721574229.2136655 1721574230.5642936 1721574234.564178 1721574240.1197848 1721574253.3657877 1721574304.1189775 1721574326.7021465 1721576971.9406857 1721576974.0474002 1721576977.079685 1721576977.6775851 1721576978.880478 1721576992.2445269 1721577004.8481708 1721577048.988025 1721577065.7160993 1721578295.2526956 1721578298.8162296 1721578299.1991253 1721578300.0686698 1721578302.5384188 1721578304.4118538 1721578321.6604548 1721578324.0449317 1721578440.7719927 1721578479.2742977 1721580017.9542558 1721580019.2280664 1721580020.8857832 1721580021.9373968 1721580024.704843 1721580052.6509597 1721580055.1464536 1721580089.107742 1721580100.2947977 1721650930.8342354 1721650933.5484543 1721650947.093313 1721650950.4567475 1721651005.5955992 1721651481.2783616 1721651559.495912 1721674276.1086073 1721674278.513514 1721674281.290339 1721674283.639705 1721674288.2609918 1721674305.2613103 1721674311.6022947 1721674338.3399606 1721674362.5169706 1721718314.6641715 1721718316.3952758 1721718319.9596653 1721718325.270815 1721718343.0735612 1721718347.1543753 1721718393.3736312 1721718415.8997684 1721910087.0128944 1721910090.1194847 1721910091.1340427 1721910110.6500988 1721910114.7352288 1721910330.7036839 1721910348.0335593 1721910916.43767 1721910918.2617009 1721910918.9612172 1721910920.6596704 1721910923.7422097 1721910927.19123 1721910944.6203954 1721910956.9221787 1721911128.751464 1721911158.3159337 1721912339.4567149 1721912343.9946265 1721912346.3522673 1721912360.1102629 1721912367.2019844 1721912498.5683155 1721912514.5882468 1721987679.8209765 1721987700.8785155 1721987702.3838289 1721987704.0928543 1721987708.7966185 1721987717.842413 1721987731.7817628 1721987743.6735523 1721987755.6558464 1721987776.7134225 1722009022.164185 1722009023.5288925 1722009026.1637077 1722009026.7395837 1722009028.985516 1722009044.6780007 1722009057.0580795 1722009102.7638628 1722009128.2290883 1722011314.4384987 1722011317.0866902 1722011323.0479326 1722011329.1328695 1722011330.6450853 1722011345.1625364 1722011363.1033154 1722011367.4035761 1722011409.0791147 1722011437.4246118 1722083518.8362637 1722083520.1399145 1722083521.4632201 1722083524.563069 1722083525.399378 1722083531.860173 1722083547.3582554 1722083597.739719 1722083631.056319 1722085677.4967399 1722085679.4884202 1722085679.9108589 1722085688.0438259 1722085689.9928405 1722085695.2417676 1722085703.2458162 1722085704.999607 1722085764.2840428 1722085781.77046 1722095979.0386055 1722095980.0828955 1722095981.032806 1722095983.626646 1722095984.984198 1722095999.230339 1722096005.4851468 1722096059.4911695 1722096071.8962398 1722100536.4515254 1722100539.4221365 1722100542.5566645 1722100544.0714207 1722100545.4322321 1722100564.5859752 1722100566.014869 1722100615.2521555 1722100643.20215 1722149013.9013457 1722149015.767447 1722149016.9281707 1722149017.5551665 1722149018.389765 1722149027.7650094 1722149036.6032405 1722149045.8741276 1722149104.189777 1722149107.7602215 1722155521.3010793 1722155522.2409105 1722155523.7213988 1722155528.6886873 1722155542.7506652 1722155672.0228562 1722155681.411199 1722157757.768678 1722157761.2266603 1722157778.985823 1722163153.3098607 1722163155.395189 1722163156.2589576 1722163174.1873949 1722163180.5309765 1722163215.403878 1722163256.7635057 1722165512.4110675 1722174536.351207 1722174538.6816373 1722174539.4588919 1722174542.5816898 1722174554.7090611 1722174566.311441 1722174613.8005621 1722174624.0169446 1722242650.1910343 1722242651.618098 1722242654.8140075 1722242656.8090444 1722242658.0002894 1722242674.320784 1722242686.162094 1722242716.8431196 1722242745.6145446 1722244920.0555336 1722244922.2241864 1722244924.9416807 1722244978.3089955 1722244980.8752184 1722244981.2110722 1722244982.3846757 1722244999.3691816 1722245010.4448211 1722245063.3641362 1722245069.0751998 1722246449.8212233 1722252759.7456295 1722252763.403051 1722252765.549591 1722252766.465789 1722252781.9618795 1722252789.6683662 1722252834.8567882 1722252846.037899 1722255909.6763847 1722255912.8771906 1722255917.6040564 1722255933.7703345 1722255940.327634 1722255954.335101 1722256095.858246 1722256171.285489 1722256831.1770594 1722258348.349472 1722258350.8484561 1722258351.7297373 1722258355.2572641 1722258358.1317604 1722258378.183615 1722258391.2777941 1722258439.4786732 1722258458.8920097 1722258747.4458783 1722258748.4867609 1722258752.014911 1722258753.2976851 1722258776.3941264 1722258780.365012 1722258828.8410087 1722258856.5356793 1722266281.154913 1722266283.9311874 1722266286.8559344 1722266287.742336 1722266295.0477529 1722266307.5419962 1722266318.8401215 1722266368.3401177 1722266390.6271458 1722267600.9945157 1722267613.3273997 1722267615.6415715 1722267629.8862028 1722267646.5896106 1722267701.1500127 1722267710.70105 1722268060.4806027 1722269798.3464947 1722269799.06523 1722269803.173558 1722269805.006228 1722269806.2911599 1722269826.6815646 1722269830.208888 1722269887.5769298 1722269901.5990813 1722271938.8490343 1722271940.654133 1722271942.2798257 1722271945.2685156 1722271954.4873567 1722271960.5731528 1722271970.4570544 1722272032.061529 1722272039.191121 1722285046.130592 1722285053.13936 1722285050.3333395 1722285054.3085802 1722285072.0029724 1722285089.6750438 1722285139.903813 1722285151.8262293 1722286556.865009 1722286557.787786 1722286559.4217722 1722286560.8234248 1722286566.8899527 1722286568.9542303 1722286587.239442 1722286591.8479471 1722286650.8837395 1722286670.6716592 1722287811.6441412 1722287814.9035003 1722287820.1875937 1722287823.045072 1722287833.3711326 1722287840.8799474 1722287847.3387156 1722287910.7062888 1722287933.3743765 1722346814.3318946 1722346815.3555522 1722346816.5075314 1722346819.4600098 1722346823.8913958 1722346840.9840052 1722346852.0418973 1722346901.757354 1722346936.7027256 1722353424.4027636 1722353455.8584085 1722353475.5796852 1722353476.625922 1722353478.1814175 1722353479.2128873 1722353505.9890182 1722353514.8506823 1722353529.4125268 1722353573.6369014 1722357662.938199 1722357666.437098 1722357669.5629907 1722357674.895245 1722357683.176122 1722357690.5174837 1722357699.457917 1722357752.839344 1722357818.180176 1722515375.864221 1722515382.8253098 1722515441.5088887 1722515444.4139678 1722515473.4817035 1722515494.5169368 1722515550.025863 1722515705.8252301 1722515774.3782804 1722703516.6385605 1722703523.7818244 1722703524.9584632 1722703528.4236033 1722703541.265863 1722703551.7528145 1722703605.1434042 1722703617.285085 1722861260.5651002 1722861274.2730734 1722861282.853552 1722861327.648218 1722861328.7040336 1722861341.652638 1722861366.9537344 1722861368.267377 1722861411.8933487 1722957515.2378643 1722957517.9867597 1722957521.0474427 1722957525.66109 1722957526.7974 1722957542.7545946 1722957550.747547 1722965766.1494622 1722965766.9189792 1722965769.080297 1722965775.1350465 1722965776.436328 1722965802.8354776 1722965805.2216742 1722972230.2460885 1722972232.4957376 1722972238.2461116 1722972239.310697 1722972262.4442368 1722972265.5337362 1723119651.996149 1723119671.2755423 1723119674.4815555 1723119675.2286239 1723119700.4973273 1723119732.5752525 1723119837.029244 1723125159.3408673 1723125161.305721 1723125164.671936 1723125185.5027578 1723125201.5769818 1723125281.7976792 1723127344.0401428 1723127345.030985 1723127347.6052334 1723127348.2776942 1723127355.4759185 1723127366.430687 1723127376.5442193 1723127502.6736557 1723127507.9946194 1723127511.6701398 1723127524.3709917 1723127555.333043 1723127624.4754634 1723129978.2325845 1723129980.065203 1723129989.2464702 1723129990.1236107 1723129996.6202312 1723130005.8243701 1723130021.1074052 1723130113.5195165 1723131899.804144 1723131902.20493 1723131905.102239 1723131908.9329078 1723131909.5538316 1723131934.1060607 1723131952.547817 1723132075.5102296 1723132076.8952231 1723132078.9014304 1723132080.5638356 1723132102.4776583 1723132117.5459423 1723132197.1211262 1723134185.454269 1723134186.0828547 1723134188.3349106 1723134189.4652045 1723134190.480767 1723134193.0541909 1723134220.2506118 1723134222.9765935 1723134307.4119363 1723135892.3347054 1723135893.8114343 1723135897.6299603 1723135903.8710804 1723135921.066215 1723135931.0387099 1723136009.1816049 1723136902.2131515 1723136903.9931657 1723136906.1799746 1723136908.3397403 1723136933.3292496 1723136934.7258308 1723137040.877315 1723193766.4798963 1723198497.489374 1723198503.6559103 1723198506.1072052 1723198506.6462848 1723198511.2412324 1723198523.283447 1723198540.268096 1723198601.4533756 1723293918.052099 1723293919.0126128 1723293921.7233214 1723293922.8796544 1723293924.7155743 1723293939.8329105 1723293957.6624916 1723294023.1734905 1723295716.4582942 1723295718.1176283 1723295719.1733673 1723295720.8703227 1723295731.279886 1723295742.4269278 1723295756.1501608 1723295824.8342354 1723296063.7411687 1723296066.0409968 1723296066.9913926 1723296068.4480395 1723296085.9844544 1723296101.2945962 1723296154.130692 1723297450.4546869 1723297453.313314 1723297454.6593533 1723297461.3677888 1723297464.9280722 1723297483.7273545 1723297489.243885 1723297555.934929 1723303640.0538623 1723303641.0859456 1723303666.7665021 1723303674.4819245 1723303792.3911774 1723307055.669447 1723307057.516665 1723307060.937572 1723307065.154463 1723307068.336204 1723307091.879684 1723307102.205826 1723307165.0516765 1723421891.6107564 1723421892.2079666 1723421895.6024501 1723421904.3759992 1723421905.757803 1723421926.5555098 1723422032.8409994 1723457214.2616053 1723457215.15762 1723457217.5868185 1723457254.1931028 1723457260.4853334 1723457313.550356 1723500944.139548 1723500947.844652 1723500950.5009212 1723500972.7893791 1723500986.8719485 1723501045.8168595 1723503249.5519896 1723503250.7019823 1723503252.239709 1723503256.149816 1723503282.5018637 1723503291.6707165 1723503344.7708678 1723617445.5637114 1723617446.120923 1723617447.710768 1723617452.9640238 1723617459.3619127 1723617479.1712415 1723617484.4352062 1723617573.3607473 1723639240.4812639 1723639242.4700098 1723639244.217371 1723639244.9857624 1723639250.0838876 1723639283.742886 1723639306.2462215 1723639394.4827173 1723724470.8341424 1723724471.7962675 1723724472.5649292 1723724483.1117017 1723724489.4274752 1723724504.6824448 1723724742.2423058 1723789488.737526 1723789491.9785106 1723789495.1937232 1723789507.179287 1723789523.8786826 1723789529.5911324 1723789585.4323795 1723969218.427382 1723969221.6018429 1723969222.467898 1723969226.3746696 1723969227.7480848 1723969244.946983 1723969259.1996505 1723969327.049781 1724070102.5254915 1724070104.030959 1724070106.3740706 1724070118.5323465 1724070172.053344 1724070490.7402184 1724143306.904538 1724143311.0641122 1724143311.7600024 1724143315.4748845 1724143317.400293 1724143319.5802855 1724143336.301159 1724143339.2931793 1724143433.1847665 1724158542.3415682 1724158543.136938 1724158545.9649029 1724158546.7066395 1724158551.6076107 1724158570.2962599 1724158577.4562912 1724158661.8227847 1724202592.9038768 1724202628.7645361 1724202629.7426107 1724202639.145731 1724202640.2604976 1724202644.7802536 1724202694.4860175 1724202703.172851 1724202742.1755662 1724320027.2917662 1724320030.2812905 1724320030.9599948 1724320034.4022193 1724320039.9547336 1724320064.6408205 1724320067.8799412 1724320155.4411907 1724322006.8179777 1724322017.021479 1724322100.0275319 1724326816.9750662 1724326835.2257452 1724326839.3397768 1724326858.9847226 1724329530.0523298 1724329531.5851007 1724329532.342777 1724329534.3340228 1724329538.6644125 1724329562.7337675 1724329568.038632 1724329693.312654 1724329728.0111637 1724339828.4843464 1724339832.2171478 1724339834.2105722 1724339836.9052422 1724339842.2160335 1724339853.4929526 1724339860.8692455 1724339927.5192857 1724339972.5675364 1724340171.2986777 1724675112.2099783 1724675112.7536762 1724675113.8609295 1724675130.883486 1724675142.509672 1724675455.240375 1724675476.4276843 1724678442.9240308 1724678443.7646422 1724678447.3701274 1724678450.5327325 1724678471.2342534 1724678481.0344825 1724678614.5176039 1724678662.635488 1724678840.4042537 1724678843.25312 1724678844.0742831 1724678845.7958224 1724678874.517959 1724678879.3479588 1724679030.4941568 1724679097.7171695 1724679895.7099562 1724679898.7889495 1724679900.2195878 1724679903.5279362 1724679921.7844772 1724679928.0266182 1724680045.960651 1724680117.7574298 1724740336.2182548 1724764054.1148956 1724764103.170195 1724764105.5358524 1724764109.538788 1724764111.6916456 1724764113.9705515 1724764139.067442 1724764156.787153 1724764158.9183803 1724764238.4044094 1724931783.1112685 1724931828.8406136 1724931831.20521 1724931839.6174808 1724931841.0950983 1724931846.149007 1724931877.815933 1724931883.4549878 1724931894.0296752 1724931917.710784 1725133164.072982 1725133164.7953568 1725133170.7556214 1725133188.4473302 1725133196.307781 1725133275.3370075 1725133289.371418 1725140712.2051272 1725140713.0222561 1725140716.4887998 1725140718.6381378 1725140720.004144 1725140722.1596622 1725140742.347565 1725140743.618021 1725140797.1206677 1725140803.9172254 1725200633.529623 1725200635.044884 1725200636.8651588 1725200641.4771197 1725200643.175392 1725200662.855143 1725200670.1966913 1725200712.189818 1725200725.6398485 1725200829.3296444 1725207335.0009885 1725207337.3394368 1725207367.0959451 1725207368.6036494 1725207370.6801124 1725207377.3880663 1725207384.7640123 1725207401.538926 1725207505.5956042 1725207507.5365038 1725208502.6187615 1725208505.7267725 1725208507.542662 1725208509.9724796 1725208534.7410796 1725208545.9173281 1725208588.1209402 1725208594.0258324 1725209079.5139468 1725209108.9646592 1725209109.9745634 1725209110.8624318 1725209112.8804767 1725209118.5993817 1725209193.2443478 1725209221.8756156 1725281554.7296872 1725281556.2016904 1725281558.0330102 1725281580.3035154 1725281584.1793041 1725281687.167911 1725281764.955561 1725300224.2238321 1725300225.9345813 1725300229.3170836 1725300230.516357 1725300256.3338172 1725300308.0946443 1725300319.4941478 1725300320.8204544 1725540715.3032386 1725540717.9711885 1725540719.1833887 1725540720.432735 1725540722.1555789 1725540749.0875998 1725540751.213678 1725540972.8921459 1725541015.92986 1725631426.7354417 1725631427.6936705 1725631428.2327724 1725631448.6708682 1725631463.0081913 1725631515.3664324 1725631557.198132 1725822506.3782604 1725822507.5937872 1725822511.661547 1725822512.4515877 1725822515.9412503 1725822535.2268958 1725822593.0592098 1725822598.4597292 1725822607.1766093 1725884435.798726 1725884436.3909311 1725884437.4291615 1725884469.482712 1725884481.8351278 1725884647.5585947 1725884675.1920853 1726143690.4869845 1726143691.3081863 1726143693.3989668 1726143694.4958773 1726143701.1455789 1726143712.3017654 1726143722.4283848 1726143981.2912416 1726144071.9595954 1726302858.4009302 1726675441.8821027 1726675447.1515436 1726675455.56139 1726675468.5214655 1726675479.9343245 1726675529.4341502 1726675578.1315203 1726734255.6599536 1726734258.0744572 1726734261.6568701 1726734263.415758 1726734271.322075 1726734284.6144738 1726734293.6049356 1726734342.2983801 1726734368.8190172 1726829047.453488 1726829048.2625833 1726829050.5636995 1726829053.7786524 1726829056.1417718 1726829059.8768687 1726829083.4874034 1726829086.4730258 1726829091.3235495 1726838086.3674679 1726838087.5454314 1726838090.5266967 1726838091.309051 1726838095.503319 1726838121.7484057 1726838162.286817 1726852924.4158013 1726852947.8678963 1726852969.8119648 1726907944.1144762 1726907946.9047077 1726907954.4580448 1726907957.356998 1726907970.7593565 1726907975.3553808 1726924569.5547562 1726924570.11676 1726924570.6655016 1726924578.9927793 1726924582.2498786 1726924584.8417032 1726924592.4838006 1726924599.1381044 1726924608.6165662 1727094178.8340871 1727094183.3336067 1727094187.5304337 1727094188.7281716 1727094190.2004 1727094197.5468636 1727094204.1370888 1727094213.1934218 1727094224.8191156 1727252538.2230966 1727252545.1595104 1727252559.3410785 1727252560.3491113 1727252585.4905877 1727252604.2638414 1727252611.335605 1727252619.5693839 1727252647.0808942 1727252666.8197966 1727355171.5528011 1727355172.1388216 1727355175.9172277 1727355179.5949962 1727355187.6415644 1727355189.9619722 1727355195.9563243 1727355209.6537554 1727355213.1416783 1727355738.2683496 1727355739.447531 1727355740.8816657 1727355743.0290265 1727355744.3655899 1727355754.689045 1727355768.3128917 1727355773.5655093 1727355789.0512674 1727356845.3867826 1727356849.4635057 1727356851.768166 1727356853.750152 1727356856.3031561 1727356857.9159436 1727356884.2286303 1727356893.986862 1727356913.6343558 1727357844.6776798 1727357847.1814015 1727357851.3251064 1727357863.0378542 1727357870.5985737 1727357881.012939 1727357912.1287177 1727358935.303634 1727358935.9912815 1727358939.3313124 1727358940.3998544 1727358946.4800787 1727358950.667642 1727358960.9032006 1727358974.1791952 1727359005.7682602 1727364185.5690017 1727364186.335221 1727364188.1669273 1727364191.111278 1727364197.9766107 1727364218.0347583 1727364224.4208484 1727364229.735253 1727698959.124807 1727698960.0979502 1727698961.8392282 1727698964.5413785 1727698973.0976288 1727698995.476023 1727699001.1445177 1727699001.8644443 1727951197.7174723 1727951205.6155488 1727951210.6008136 1727951211.924095 1727951214.3595564 1727951239.830181 1727951260.4132447 1727951282.1391022 1727951287.3107123 1727951295.984193 1727957717.7947898 1727957718.6923344 1727957719.9319725 1727957723.2567813 1727957732.4791858 1727957738.5735471 1727957757.3239744 1727957770.9410255 1727958071.3421822 1727958072.6552424 1727958073.4494936 1727958090.4808335 1727958092.377394 1727958098.803949 1727958119.8236375 1727958131.9921308 1728033605.927856 1728033610.166473 1728033618.1204672 1728033619.478822 1728033631.886684 1728033633.5909014 1728033647.518328 1728059474.6622338 1728059487.5971162 1728059514.2836185 1728059537.8234003 1728059539.5742385 1728059555.2033007 1728059577.58866 1728059591.8590653 1728122909.0253503 1728122911.2703123 1728122912.2143638 1728122914.4684803 1728122915.4730194 1728122922.2035043 1728122922.9835937 1728122933.4255273 1728122953.6694286 1728129579.751556 1728129580.3356383 1728129581.3151999 1728129582.1964667 1728129585.9221125 1728129596.659089 1728129602.1400926 1728129611.0264146 1728129613.638498 1728133448.9883578 1728133449.627583 1728133452.256095 1728133453.6784909 1728133457.0713844 1728133462.6810381 1728133480.493868 1728133484.297163 1728133484.900972 1728194810.3820596 1728194811.8586535 1728194812.9597461 1728194816.63949 1728194820.2523391 1728194824.9291325 1728194832.8092308 1728194835.9376342 1728194853.9915667 1728234031.697532 1728234033.8452804 1728234034.8792348 1728234036.522442 1728234038.732697 1728234046.88053 1728234057.2472894 1728234062.2539334 1728234066.9047368 1728303707.3891773 1728303708.2521691 1728303714.9815907 1728303722.5586314 1728303772.3002484 1728303773.1410623 1728303776.6379309 1728303786.609231 1728303836.3226495 1728303846.5049798 1728337169.0340455 1728337170.1327274 1728337174.211485 1728337191.5496802 1728337192.9797745 1728337194.4701893 1728337207.912653 1728537193.6512961 1728732945.4463923 1728732948.6507535 1728732952.2837873 1728732953.691373 1728732955.2932432 1728732956.524756 1728732968.339935 1728732970.5543928 1728732982.2182877 1728737744.7459152 1728737748.98257 1728737752.1383252 1728737761.0445974 1728737812.1413603 1728737818.6112876 1728737826.940009 1728737872.9231803 1728737875.5850608 1728743498.7469113 1728743499.9835532 1728743500.5865278 1728743504.0295928 1728743513.9563892 1728743516.4044924 1728743521.059433 1728743536.4969213 1728743539.457314 1728743942.3254461 1728743947.0616877 1728743948.5496256 1728743952.4485714 1728743956.8069415 1728743972.981716 1728743974.955076 1728743988.2777052 1728745978.289991 1728745979.4105432 1728745981.1054873 1728745981.9421353 1728745985.224251 1728745992.1692357 1728746008.6597588 1728746010.1733787 1728746063.5124123 1728746211.8122053 1728746213.9458363 1728746217.8126671 1728746218.3260763 1728746223.4439285 1728746235.339829 1728746237.54506 1728746240.7656617 1728746242.9190016 1728746253.7251363 1728833700.0260398 1728833701.4446497 1728833702.2353542 1728833703.9480202 1728833708.9518077 1728833713.0262654 1728833714.4510262 1728833723.400574 1728833731.5921385 1728833736.895667 1728835384.371322 1728835385.962284 1728835387.0517457 1728835387.7445607 1728835388.9590096 1728835392.4119325 1728835399.9746296 1728835407.122815 1728835417.8316333 1728835431.4600117 1728836544.9717374 1728836547.9728825 1728836549.3966005 1728836551.46428 1728836552.6611505 1728836564.7708545 1728836575.8413124 1728836577.6584494 1728836582.209422 1728920255.0991843 1728920258.0877094 1728920266.047279 1728920267.7859914 1728920269.8180747 1728920271.430736 1728920272.3737376 1728920275.7158494 1728920285.1150532 1728920313.6354492 1729006711.7335062 1729006718.0533266 1729006720.2043796 1729006723.6731513 1729006726.5683281 1729006733.0146976 1729006754.30765 1729006776.9883995 1729010354.851715 1729010356.3835125 1729010372.5242126 1729010386.5633569 1729010392.79671 1729010395.8405745 1729033820.8557181 1729033823.9684222 1729033826.6887953 1729033828.8346639 1729033829.7552333 1729033835.2953548 1729033851.8851895 1729033867.2496648 1729033873.9356413 1729092755.8003762 1729092757.4442213 1729092760.2669573 1729092762.2494287 1729092763.1737988 1729092776.6677477 1729092783.585181 1729092795.4211159 1729092802.884515 1729093404.8581364 1729093406.1022863 1729093409.6069078 1729093413.4827905 1729093415.0146415 1729093437.0040774 1729093443.9370294 1729093455.6258225 1729093917.3740594 1729093924.7103052 1729093926.2689004 1729093934.4847856 1729093939.4272058 1729093949.0355246 1729093972.820219 1729094446.2924614 1729094448.044019 1729094450.5190663 1729094452.3579662 1729094454.1246204 1729094455.875043 1729094467.1689668 1729094470.4615102 1729094494.8975074 1729094518.1359916 1729104871.5899901 1729104874.876859 1729104876.8862448 1729104877.7222195 1729104879.6530187 1729104887.6756997 1729104891.0999753 1729104907.2810287 1729104915.628079 1729257860.7060654 1729257865.0598102 1729257865.908288 1729257870.1832783 1729257884.2104728 1729257890.3658347 1729257893.8982866 1729257898.6145709 1729332868.8884962 1729332875.6134863 1729332877.9988463 1729332879.5559447 1729332893.679242 1729332894.9814157 1729332920.3224845 1729332947.9222736 1729332968.8512816 1729334085.642702 1729334088.3801568 1729334092.1009166 1729334092.9905782 1729334094.3209932 1729334098.021537 1729334103.7886531 1729334113.7123656 1729334126.603184 1729334133.2773445 1729339236.7112806 1729339237.2109628 1729339239.8039072 1729339241.923618 1729339245.3853216 1729339246.3951786 1729339250.5824714 1729339262.8487272 1729339267.2262473 1729339292.2161791 1729342907.005911 1729342912.4427733 1729342919.0908499 1729342920.2621865 1729342922.3985302 1729342932.4808924 1729342939.7966642 1729342947.7565434 1729342958.935519 1729345509.0483184 1729345510.2446895 1729345512.228264 1729345513.2745836 1729345515.4445262 1729345516.5309505 1729345523.1481001 1729345530.791648 1729345543.021134 1729345564.3512073 1729352269.5894463 1729352271.1257896 1729352272.4453163 1729352278.0577192 1729352281.2217155 1729352286.6776705 1729352298.173631 1729352299.0579467 1729352314.2006667 1729352316.07831 1729355762.6713998 1729355763.7223508 1729355767.140102 1729355768.0427616 1729355770.2150545 1729355779.3283195 1729355787.676488 1729355806.501878 1729358508.6128478 1729358509.3026485 1729358510.1842167 1729358513.0574265 1729358515.126321 1729358516.7900476 1729358525.60399 1729358529.4947524 1729358545.4960544 1729358552.3557 1729367046.3978016 1729367049.017654 1729367050.0929554 1729367051.2651315 1729367056.071756 1729367056.814972 1729367063.5559955 1729367071.520121 1729367080.6116037 1729412704.8927162 1729412706.355342 1729412708.0568678 1729412710.6722658 1729412715.3055286 1729412720.817641 1729412735.5620499 1729412740.1556945 1729412750.209623 1729506881.5077236 1729506882.998659 1729506885.2772717 1729506887.9168231 1729506889.3227882 1729506890.270235 1729506908.287083 1729506917.0852423 1729506922.2671366 1729506925.880165 1729562000.486412 1729562002.1365795 1729562003.450998 1729562005.5320075 1729562013.7140665 1729562014.851959 1729562027.823392 1729562030.9649224 1729562037.4399283 1729772628.024384 1729772632.1716542 1729772633.3096597 1729772641.8233664 1729772643.2488031 1729772652.314984 1729772667.7016115 1729772677.9223237 1729774190.9545734 1729774191.597862 1729774193.9808326 1729774202.2812762 1729774205.5565357 1729774211.2316782 1729774216.5960338 1729774227.0569327 1729774234.6505063 1729956626.8351767 1729956628.2261896 1729956630.6545267 1729956631.7810423 1729956632.7964118 1729956641.0736098 1729956646.7477207 1729956656.1438482 1729956677.1112947 1729963223.1188562 1729963225.7192516 1729963230.0806804 1729963236.5373201 1729963237.9832456 1729963238.6328769 1729963240.6313212 1729963249.340651 1729963252.4305904 1729963258.9741237 1730041013.5380948 1730041015.6442053 1730041026.0668254 1730041067.7284575 1730041076.675968 1730041087.8943112 1730041095.5179813 1730041129.9984517 1730041146.4527524 1730042544.7177842 1730042546.114285 1730042549.491665 1730042552.6548748 1730042554.1026793 1730042562.970534 1730042566.0576777 1730042566.737246 1730042578.9335535 1730044922.608126 1730044923.2814202 1730044926.6715765 1730044933.286997 1730044938.2111177 1730044945.0962775 1730044958.992743 1730044964.1534376 1730108564.953472 1730108566.2638736 1730108567.4402096 1730108574.8510845 1730108575.9162414 1730108588.8945043 1730108595.2026105 1730108647.3785403 1730118135.637466 1730118140.5202587 1730118141.2257318 1730118144.1956835 1730118148.371045 1730118151.6871338 1730118166.2305794 1730118184.2650702 1730118203.2182014 1730179976.65268 1730179977.939642 1730179978.7225032 1730179980.8295987 1730179988.8647323 1730179989.9527414 1730179998.2916584 1730180000.8676643 1730180007.775465 1730180025.6631205 1730218898.9072146 1730218905.6026793 1730218909.059037 1730218910.3365545 1730218915.8225565 1730218926.8502307 1730218932.3286083 1730218939.3001914 1730275298.8027234 1730275301.4654057 1730275303.1072261 1730275304.0636823 1730275317.381003 1730275320.6247735 1730275333.5557346 1730275380.380172 1730280384.1852689 1730280384.8983238 1730280385.6372325 1730280388.6256185 1730280390.6127968 1730280396.4061003 1730280405.0505073 1730280422.5386162 1730280426.1869366 1730280430.868838 1730284674.686032 1730284680.906267 1730284682.2430077 1730284685.2335389 1730284689.0890508 1730284689.7998638 1730284702.695149 1730284715.6218622 1730284722.7031624 1730374527.1452029 1730374527.7010581 1730374529.5714324 1730374532.335925 1730374539.5056646 1730374545.225128 1730374562.1102057 1730374571.857448 1730380728.7295353 1730380731.150879 1730380732.6688063 1730380736.5049667 1730380739.8626847 1730380754.6919937 1730380764.2745686 1730380770.4302964 1730409100.9300206 1730409102.331282 1730409102.9998615 1730409105.8457847 1730409117.0779421 1730409125.186845 1730409140.8327959 1730413799.680919 1730425798.490704 1730425799.8475976 1730425804.5104012 1730425807.6398041 1730425811.7750034 1730425823.3259237 1730425830.182246 1730425831.0041034 1730477208.939486 1730477210.362072 1730477213.3330104 1730477222.7644532 1730477250.6180503 1730477271.8797004 1730477278.7356114 1730477311.7083013 1730477344.9664245 1730551466.2613475 1730551468.1558676 1730551468.6379552 1730551471.574293 1730551485.292978 1730551714.9587398 1730551721.064079 1730551770.7810545 1730551772.724341 1730551779.172007 1730551783.5625727 1730551785.240131 1730551795.530203 1730551816.602113 1730551843.3321774 1730568764.139239 1730568766.4208605 1730568768.0659432 1730568770.7483375 1730568775.3193119 1730568777.1212685 1730568778.2512453 1730568786.6107159 1730568792.1702764 1730568803.3814995 1730572393.2263505 1730572394.2957191 1730572396.1838949 1730572403.882823 1730572407.1082404 1730572415.5606542 1730572418.9502246 1730572426.7249322 1730573493.4395432 1730573494.498661 1730573497.7063038 1730573499.4742029 1730573503.44434 1730573505.044457 1730573507.062294 1730573514.6670637 1730573527.9402637 1730573529.6573448 1730646276.7328491 1730646278.8141346 1730646279.7373104 1730646286.0035422 1730646292.8514357 1730646295.655658 1730646306.019205 1730646327.7861974 1730647912.8937979 1730647913.7561932 1730647916.4450212 1730647919.0412316 1730647921.0074391 1730647926.6910808 1730647930.057654 1730647933.496736 1730647936.6280458 1730647949.4988215 1730807242.5316253 1730807244.3396552 1730807245.8609428 1730807251.8184936 1730807261.783787 1730807265.3647041 1730807272.387132 1730817468.565808 1730817471.377723 1730817472.8056078 1730817482.5650048 1730817497.1087816 1730817499.4315834 1730817503.9007418 1730817513.8748765 1730817523.1081626 1730821401.8298514 1730821406.4129963 1730821407.9715912 1730821409.6416264 1730821412.768464 1730821421.6235604 1730821427.8204122 1730821437.4782767 1730821442.916009 1730822472.9151068 1730822478.4528308 1730822479.8638492 1730822482.0061872 1730822486.754859 1730822490.588171 1730822506.739088 1730822513.804522 1730899260.7787814 1730899264.2263396 1730899273.500649 1730899292.8726277 1730899303.721257 1730901723.905749 1730901742.118694 1730901753.511005 1730903054.6751752 1730903055.8458865 1730903057.2122521 1730903074.4498112 1730971745.8499439 1730971747.5699441 1730971749.1461153 1730971751.4877 1730971759.2653332 1730971761.1175764 1730971775.4306664 1730971783.5866497 1730971803.5608537 1730981972.6511354 1730981973.328158 1730981974.8271549 1730981977.8909194 1730981987.2681918 1730981999.041532 1730981999.8671234 1730982008.7539716 1730982044.559671 1731056397.2586415 1731056402.036135 1731056411.9442914 1731056451.7027507 1731056453.9502587 1731056486.1215286 1731056487.0533705 1731056515.2322998 1731056532.1200871 1731144519.888281 1731144520.509171 1731144523.3933926 1731144527.078465 1731144531.4000866 1731144542.6378856 1731144549.7665086 1731144686.2622302 1731144689.2599902 1731144690.9398296 1731144695.6028743 1731144699.6347964 1731144707.2914085 1731144712.291652 1731144721.7356853 1731144727.467037 1731148127.8145342 1731148129.112714 1731148131.860765 1731148136.942361 1731148141.6284542 1731148154.7230666 1731148155.9279375 1731148162.3672278 1731148397.0358782 1731148397.522588 1731148400.5981908 1731148402.4493976 1731148410.2816496 1731148419.8652954 1731148428.1873734 1731148429.6606069 1731148718.409702 1731148723.2307727 1731148724.7611856 1731148725.445875 1731148728.9497018 1731148733.7036128 1731148749.5031757 1731148755.6574883 1731148767.156155 1731154967.4147255 1731154971.837443 1731154972.7053823 1731154979.110837 1731154980.2745206 1731154994.0468187 1731154998.1615376 1731155002.669648 1731167622.600458 1731167626.352391 1731167629.0613265 1731167632.2916656 1731167638.0113463 1731167644.7619684 1731167645.7460804 1731167653.387026 1731171025.7433338 1731171028.1454437 1731171032.2400746 1731171041.9862351 1731171043.0770853 1731171055.3759856 1731171055.877064 1731171075.172642 1731229412.1347032 1731229415.2789226 1731229416.5422425 1731229418.095707 1731229431.661456 1731229433.0100691 1731229437.1850004 1731229442.8717866 1731229613.1210473 1731229613.8068168 1731229614.5309494 1731229621.1576624 1731229628.7896118 1731229631.4962785 1731229637.5075917 1731229639.5613863 1731229654.606807 1731481286.7534761 1731481288.5645113 1731481290.766877 1731481291.8198197 1731481302.1982982 1731481308.6676452 1731481327.047522 1731481331.2523713 1731593220.8888807 1731593224.1370466 1731593225.8446 1731593231.513437 1731593235.6293445 1731593265.1321702 1731593265.8563323 1731593266.696744 1731593298.358575 1731859628.3740964 1731859630.484212 1731859631.553499 1731859633.175853 1731859634.8326163 1731859637.6302872 1731859651.440454 1731859654.1323884 1731859662.2396228 1731859672.9553397 1731861962.1777155 1731861964.292851 1731861977.7196784 1731861979.7432628 1731861986.7312233 1731861990.4504364 1731922884.9139953 1731922887.2335374 1731922887.9522748 1731922888.5676258 1731922897.286149 1731922906.193417 1731922913.8000236 1731922923.4335632 1731922945.7963576 1731932203.806244 1731932204.5280297 1731932207.3690157 1731932210.3461585 1731932213.994411 1731932222.5832834 1731932223.471831 1731932249.044136 1731932265.9347122 1731932501.2521935 1731932508.8772318 1731932513.0450733 1731932542.3964057 1731932553.9959211 1731932563.2576783 1731932594.0971456 1731933170.9760642 1731933172.4696252 1731933173.7094665 1731933178.535318 1731933182.5050938 1731933185.610432 1731933197.295215 1731933222.811717 1731933232.5881987 1731935401.3611374 1731935413.0451057 1731935414.2300546 1731935416.9610739 1731935429.9369838 1731935445.890509 1731947718.9175668 1731947721.6089666 1731947723.2720885 1731947726.3099442 1731947732.5519915 1731947734.7302103 1731947746.6716468 1731947754.0796657 1731947759.056394 1731963042.2459922 1731963043.3076453 1731963047.4277034 1731963050.4457273 1731963051.789089 1731963059.3552227 1731963066.1642108 1731963898.3942215 1731963899.426723 1731963902.774446 1731963908.7706244 1731963913.0985982 1731963916.1861327 1731963930.2955592 1731965728.4651444 1731965729.8994205 1731965734.3784678 1731965735.846021 1731965741.7106583 1731965743.9287534 1731965753.8558125 1731965761.6160433 1731965769.8767486 1731997802.2921572 1731997810.3072803 1731997821.0103588 1731997823.6369407 1731997842.411579 1732005461.3886943 1732005463.7190425 1732005471.0041788 1732005474.6214101 1732005485.6469896 1732005499.9193833 1732008487.1600018 1732008491.797435 1732008494.5423522 1732008502.4767828 1732008514.2675614 1732008528.0170114 1732031510.4307609 1732031512.470964 1732031513.5795474 1732031515.2409818 1732031523.700186 1732031555.7789493 1732031561.1792595 1732031575.9569871 1732031604.1394897 1732031631.6602669 1732033181.5732715 1732033187.0737615 1732033188.6749732 1732033191.9551766 1732033194.1693351 1732033205.2199373 1732033222.024943 1732033223.8429763 1732041367.0638227 1732041374.360133 1732041375.0871248 1732041386.533412 1732041429.4158008 1732041455.4944332 1732041459.8669043 1732041465.4243455 1732041515.1712544 1732263466.6664398 1732263467.7951367 1732263471.1644146 1732263479.6797717 1732263480.2140698 1732263498.7567801 1732263522.56127 1732264323.2435894 1732288770.6208334 1732288780.6333094 1732288792.343384 1732288797.264224 1732288809.1924157 1732288813.6531975 1732288817.9377081 1732288820.9671955 1732288828.0163698 1732383770.9811113 1732383772.019344 1732383775.677074 1732383783.7112272 1732383785.2454233 1732383791.2049956 1732383804.3264155 1732383828.7691948 1732383855.2422316 1732384005.5223076 1732384006.78085 1732384009.1067138 1732384011.001988 1732384016.0497475 1732384029.856547 1732384038.54369 1732384056.9650784 1732433695.8831894 1732433732.9025521 1732433748.8732421 1732433783.7346292 1732441728.9562159 1732441754.4433556 1732441782.3504713 1732441805.516257 1732451639.3175128 1732451643.1642468 1732451645.2693274 1732451751.4095888 1732452561.6061358 1732452576.3843272 1732452603.0346284 1732452616.329989 1732453335.171801 1732453347.7624328 1732453388.8228903 1732453412.1198726 1732457617.6644711 1732457618.7323854 1732457625.315965 1732457629.101936 1732461125.5489106 1732461128.287391 1732461141.5258722 1732461147.4306962 1732467075.7547572 1732467084.6461084 1732467091.89446 1732467122.5807369 1732468773.0488203 1732468802.825153 1732468813.33293 1732469872.8794227 1732469876.575231 1732469902.8869994 1732469955.3939478 1732470377.6167781 1732470396.1452968 1732470423.8126786 1732470445.830942 1732470991.45309 1732470993.7259717 1732471013.3167658 1732471018.7096245 1732471036.7073948 1732471039.5707095 1732471044.3352518 1732471062.9311054 1732520037.0320818 1732520040.5129967 1732520042.1200364 1732520044.3863719 1732520044.986072 1732520057.2194798 1732520065.5948634 1732520087.8231437 1732520095.1079488 1732536734.1849625 1732536735.187456 1732536736.589417 1732536744.997573 1732536746.8804607 1732536754.527193 1732536760.801082 1732536778.5082223 1732536779.565857 1732553889.4913087 1732553891.8560991 1732553893.615305 1732553897.2921178 1732553899.525495 1732553901.1819782 1732553905.777386 1732553917.4970317 1732553923.9444463 1732562315.4978662 1732562315.966834 1732562318.6292334 1732562322.6073444 1732562327.6694388 1732562346.4216428 1732562356.2182302 1732562357.001847 1732593967.9975262 1732593968.631301 1732593969.3510222 1732593972.3546522 1732593977.7886488 1732593979.985906 1732594000.434706 1732594015.288365 1732594036.3076348 1732616945.9189374 1732616946.8032322 1732616950.1755753 1732616952.190844 1732616956.7188 1732616973.3852801 1732616981.3340652 1732617007.8578043 1732650478.146098 1732650478.8655012 1732650482.054069 1732650483.2019038 1732650491.7780273 1732650501.0392954 1732650504.1629848 1732650520.974529 1732719992.060976 1732719992.9039497 1732719993.6523044 1732719994.3609269 1732719997.193117 1732720008.3417926 1732720024.2752085 1732720025.8679025 1732720054.9436398 1732721005.8010385 1732721008.0343213 1732721010.1515133 1732721017.508236 1732721021.39178 1732721024.1566527 1732721030.3488595 1732721041.7503881 1732721047.331507 1732722433.5197935 1732722435.6278255 1732722439.5679765 1732722441.9508731 1732722446.9056737 1732722454.7095733 1732722468.0639024 1732722477.8043704 1732871671.3932276 1732871672.2253082 1732871678.2360198 1732871684.9135783 1732871686.3062546 1732871687.5788589 1732871689.2884448 1732871707.1721458 1732871713.4964151 1732871719.3099146 1732948701.823288 1732948705.645968 1732948712.4570334 1732948715.2281327 1732948716.8692715 1732948724.1452303 1732948740.629487 1732951478.1179664 1732951478.6306114 1732951481.6304414 1732951482.4399962 1732951490.939268 1732951498.3275948 1732958893.428547 1732958894.411381 1732958918.0187109 1732958927.3729992 1732959282.7071395 1732959313.630829 1732959320.7503846 1732959748.9811394 1732959770.8425634 1732960101.9984646 1732960107.534045 1732960138.5458903 1732960145.0319757 1732962593.7243786 1732962599.6971328 1732962601.0662632 1732962606.605405 1732962608.2602785 1732962610.6957266 1732962611.941968 1732962618.4101582 1732962624.4917603 1732962628.754138 1732970526.5556984 1732970538.7876263 1732970550.6137106 1732970566.5419803 1732970857.9357018 1732970861.2015047 1732970880.6689203 1732970901.5037766 1732975118.6913564 1732975121.714272 1732975124.1275043 1732975126.7590756 1732975127.902717 1732975136.1045487 1732975144.8489838 1732975152.0163014 1732975166.8195279 1732985289.0232406 1732985292.5707827 1732985298.2890525 1732985300.096001 1732985304.9423993 1732985310.3897424 1732985316.3400378 1732985320.7302096 1732985330.646815 1733080179.8714154 1733080182.2174754 1733080183.7056813 1733080187.129284 1733080187.6562762 1733080197.6049402 1733080206.2771382 1733080214.914623 1733080229.6740513 1733140064.208817 1733140065.2534864 1733140065.9737613 1733140069.2690368 1733140070.786767 1733140075.0304115 1733140081.696741 1733140093.7225945 1733140106.7209074 1733140109.0243447 1733143242.2514603 1733143248.2144585 1733143249.4314134 1733143251.6573458 1733143256.0222833 1733143259.6437476 1733143267.2247188 1733143270.0791595 1733143277.795833 1733143286.3701718 1733154982.5744405 1733154986.1220756 1733154987.259687 1733154991.008131 1733154991.8595552 1733154994.1339047 1733155010.4902403 1733155019.416577 1733155042.1721528 1733159155.4314275 1733159167.030669 1733159168.4029393 1733159174.167873 1733159175.1603377 1733159202.731806 1733159210.605375 1733168522.0316908 1733168526.638999 1733168531.6582913 1733168532.5080645 1733168535.4875433 1733168544.9785478 1733168548.9552453 1733168573.5332053 1733169970.4149306 1733169971.7890635 1733169987.607266 1733169988.9386342 1733169990.5251367 1733169992.666319 1733169994.047022 1733169995.7627249 1733170009.7685456 1733170462.0889544 1733170463.9820032 1733170467.044954 1733170471.9154284 1733170480.642101 1733170481.885501 1733170496.5555415 1733170505.309697 1733219253.6427739 1733219256.7237084 1733219261.192824 1733219266.133451 1733219268.4844553 1733219269.1851923 1733219289.6428618 1733219294.3419852 1733219300.7973099 1733219630.9789228 1733219631.5469549 1733219633.5728836 1733219637.2201772 1733219639.1018076 1733219646.767386 1733219660.574712 1733219675.677772 1733219687.30307 1733224231.4707232 1733224232.3889892 1733224234.342062 1733224235.8343258 1733224237.4398193 1733224245.0629716 1733224257.4724257 1733224266.3068144 1733224271.8994398 1733227582.8463392 1733227583.5131407 1733227585.0287392 1733227592.584582 1733227604.602964 1733227610.088609 1733227628.302275 1733227641.8276615 1733228864.4773238 1733228866.74998 1733228869.8279743 1733228872.190608 1733228874.8892612 1733228884.3857858 1733228887.3335903 1733228897.1727421 1733228971.4516807 1733229786.021049 1733229786.66641 1733229790.7480805 1733229799.2262502 1733229802.0443177 1733229804.4731007 1733229811.4373858 1733229813.377825 1733229826.7686434 1733229853.3298552 1733234293.688889 1733234301.798663 1733234304.4010224 1733234305.4084508 1733234306.1285028 1733234308.6419322 1733234314.0123327 1733234319.1362226 1733234340.7632995 1733234876.684493 1733234879.0027857 1733234882.3916202 1733234883.6695943 1733234889.1685822 1733234891.9050684 1733234908.3120115 1733234936.354204 1733234938.8755677 1733238720.608564 1733238726.1778567 1733238730.278317 1733238734.962571 1733238753.1915474 1733238766.1926172 1733238990.5689092 1733238992.9023156 1733239002.4197814 1733239009.9664338 1733239013.7127926 1733239015.8269987 1733239041.6941237 1733239048.5333445 1733240946.6946738 1733240948.684239 1733240949.858537 1733240951.7910414 1733240966.3996506 1733240982.7181993 1733240983.687201 1733240986.7007341 1733242288.9102626 1733242291.8940446 1733242293.693395 1733242298.4761782 1733242306.8164103 1733242311.8970075 1733242318.5424666 1733242336.828924 1733255433.1931605 1733255633.6699867 1733255653.0470135 1733255663.1899922 1733271568.5178902 1733293035.286282 1733293038.8491454 1733293062.8098772 1733293075.5979953 1733306785.4062219 1733306788.1839104 1733306795.809741 1733306798.033864 1733306810.0447462 1733306819.5070994 1733306821.8249385 1733306845.3565247 1733308871.4943094 1733308873.2617729 1733308879.7920218 1733308880.398352 1733308899.693787 1733308903.4764695 1733308904.7923117 1733309390.7614777 1733309395.251379 1733309398.2893078 1733309402.5071542 1733309406.6513014 1733309412.9853697 1733309419.4013913 1733309444.7180636 1733314049.608768 1733314050.8355372 1733314055.470318 1733314072.3486557 1733314098.261678 1733315374.4849255 1733315406.3125675 1733315453.007395 1733322553.0044217 1733322556.9803238 1733322563.83114 1733322576.0566854 1733322596.9634542 1733322598.1692662 1733322768.862828 1733322773.8497927 1733322776.958355 1733322777.9852057 1733322779.067944 1733322785.3724024 1733322790.6682105 1733322802.9243758 1733322827.531432 1733333193.2300014 1733333198.3919308 1733333200.4507997 1733333212.6177614 1733333215.9385328 1733333235.194576 1733333238.831189 1733338333.5444129 1733338335.7633626 1733338346.8919969 1733338361.1912727 1733338380.2940402 1733339052.9226713 1733339057.1518238 1733339057.6057532 1733339061.192743 1733339068.2405028 1733339079.9187348 1733339084.0606103 1733380420.0212486 1733380421.606655 1733380425.2091165 1733380426.0167086 1733380432.8284676 1733380436.2047918 1733380446.2166383 1733380451.8656907 1733380463.5257213 1733384979.0359178 1733384981.606588 1733384985.539735 1733384992.5014267 1733384998.4741216 1733385006.1097124 1733385011.9194536 1733390811.420039 1733390812.1788619 1733390818.8177466 1733390833.786025 1733390835.3938174 1733390838.1063056 1733390844.777927 1733396841.614761 1733396848.0114086 1733396850.8401172 1733396852.8094835 1733396860.2416327 1733396863.0192623 1733396871.7705586 1733396914.0040936 1733401219.1505253 1733401220.0574515 1733401225.063062 1733401226.787789 1733401232.2275171 1733401245.996172 1733401277.5867527 1733449646.5339172 1733449653.2777321 1733449655.3623538 1733449657.6258104 1733449658.5671172 1733449659.9490492 1733449666.6821601 1733449674.7923486 1733449691.2928286 1733494747.931788 1733494753.0851731 1733494757.7123055 1733494758.2674625 1733494762.5787327 1733494782.7055457 1733494783.6043348 1733494789.1412604 1733495742.2988338 1733495743.761341 1733495744.4240904 1733495747.9927275 1733495763.3438127 1733495766.8898356 1733495787.6293023 1733495792.2613227 1733499449.4758797 1733499456.7387803 1733499457.9393198 1733499459.3670979 1733499463.4222405 1733499474.702234 1733499476.049058 1733499483.5740209 1733499498.3721578 1733502662.0274692 1733502663.8277683 1733502665.095098 1733502672.2443776 1733502677.5460172 1733502690.7745686 1733502694.9604292 1733502708.0412395 1733505470.201204 1733505472.1913333 1733505473.263023 1733505476.0696583 1733505482.4900954 1733505487.4447098 1733505505.671235 1733505517.676156 1733505733.499319 1733505734.095049 1733505735.8226748 1733505740.2475958 1733505748.0329335 1733505761.4851673 1733505794.7748582 1733506113.984502 1733506122.9218292 1733506123.361182 1733506123.9724724 1733506128.3213918 1733506138.5410657 1733506143.387333 1733506151.5541925 1733557537.7647562 1733557539.9018676 1733557544.0487056 1733557550.7210174 1733557558.1248958 1733557559.7645786 1733557564.649211 1733557567.2888486 1733565406.164843 1733565406.9513352 1733565418.972544 1733565423.6188152 1733565432.9495125 1733565439.746262 1733567442.0237205 1733567446.3039818 1733567447.3340971 1733567459.8344622 1733567460.4285808 1733567462.8390877 1733567473.067186 1733567935.1028788 1733567938.1556034 1733567940.3346186 1733567950.854293 1733567960.1414592 1733567960.701589 1733567969.7438977 1733567972.6006207 1733570469.411528 1733570470.6235194 1733570471.3499756 1733570472.2118711 1733570474.2138884 1733570485.6307247 1733570492.1640036 1733570493.0946727 1733570511.4052603 1733571081.2802474 1733571083.6984477 1733571084.258744 1733571100.301063 1733571107.8362153 1733571113.5683346 1733571117.6746516 1733585231.6380436 1733585234.323886 1733585236.852115 1733585237.8098404 1733585241.079353 1733585244.1001995 1733585251.813903 1733585259.0539622 1733585263.1471586 1733585750.7919397 1733585756.250291 1733585766.299205 1733585768.5369081 1733585774.1288636 1733585790.8809888 1733585793.410951 1733595927.1657395 1733595931.978675 1733595933.186769 1733595933.7419264 1733595935.2153459 1733595937.777819 1733595948.0802283 1733595961.6471128 1733595996.1958773 1733643664.802906 1733643666.9933524 1733643676.61076 1733643678.5545428 1733643679.6358993 1733643681.6312675 1733643686.9804542 1733643729.4601016 1733643739.8072762 1733650787.7630966 1733650790.2734067 1733650798.6556857 1733650809.237082 1733650810.5124211 1733650837.7441363 1733650867.9347098 1733650874.5275176 1733653494.9788938 1733653495.7485487 1733653496.8101516 1733653508.7553625 1733653509.3915036 1733653519.4390192 1733653534.3760762 1733653537.5714998 1733656739.7554934 1733656740.9948246 1733656745.699247 1733656755.4289315 1733656760.9822845 1733656761.6517587 1733656764.7476268 1733656766.3896408 1733658253.7502165 1733658254.63226 1733658255.2004552 1733658272.5413344 1733658279.3151307 1733658284.36497 1733658290.7471957 1733658918.9721398 1733658920.3418303 1733658925.7979481 1733658940.7062976 1733658948.3468363 1733658956.1735587 1733658970.5708482 1733661213.063345 1733661216.4161725 1733661216.90439 1733661220.4818115 1733661221.8897872 1733661227.467153 1733661233.9002542 1733661235.2784066 1733661242.5368476 1733672735.1560616 1733672737.0928104 1733672741.9912848 1733672744.640307 1733672746.223438 1733672747.8502743 1733672762.349206 1733672764.4948823 1733672769.2089665 1733673042.7114322 1733673048.5305562 1733673050.175404 1733673051.0693357 1733673062.6022651 1733673075.8755403 1733673080.5610647 1733673105.5424361 1733677623.205507 1733677624.1413872 1733677625.5410368 1733677630.676029 1733677641.258817 1733677644.0154574 1733677670.450337 1733677697.539429 1733677706.220611 1733732917.729072 1733732922.778485 1733732924.1954682 1733732925.1251035 1733732939.5123525 1733732943.796028 1733732977.3228796 1733739732.753779 1733739737.683406 1733739741.5038257 1733739743.8315432 1733739758.1880817 1733739770.6115084 1733739789.3433433 1733739808.6955342 1733739812.6888 1733740512.385763 1733740513.2260416 1733740515.098953 1733740523.913746 1733740525.3611784 1733740526.5216775 1733740544.2393446 1733740547.1774135 1733740555.3291698 1733743804.4463463 1733743807.3536985 1733743809.70843 1733743810.3246124 1733743817.6777225 1733743823.017097 1733743839.215962 1733743842.400228 1733743867.113646 1733746817.5787003 1733746818.3561563 1733746827.4099703 1733746831.6853008 1733746847.3427215 1733746849.3852785 1733746903.903557 1733748596.8917224 1733748597.7761698 1733748602.9008763 1733748605.3872135 1733748615.1536703 1733748620.2708554 1733748629.0212128 1733748652.1510158 1733761260.5527625 1733761261.838159 1733761264.4923453 1733761269.7144816 1733761275.7195458 1733761291.0287778 1733761295.432108 1733761316.7537513 1733761804.904209 1733761808.0875254 1733761810.4236267 1733761812.4223142 1733761823.0650399 1733761827.1908689 1733761837.127467 1733761841.3615758 1733761866.1509743 1733762264.8901064 1733762265.9916751 1733762267.266812 1733762271.8752313 1733762272.5526114 1733762280.5551348 1733762288.5907092 1733762294.4682882 1733762324.5145082 1733797678.9547925 1733797680.3043654 1733797686.3321779 1733797693.5512068 1733797703.2558506 1733797707.1447423 1733797708.8686543 1733822509.377478 1733822510.2404916 1733822520.1245093 1733822524.2725966 1733822524.995237 1733822532.6738303 1733822540.19579 1733822555.0441415 1733823236.1631703 1733823239.772133 1733823240.5919967 1733823242.2522368 1733823244.2788386 1733823252.2633336 1733823262.5869706 1733823264.0098014 1733823280.2782557 1733827759.2170558 1733827761.83209 1733827767.0119371 1733827767.9738233 1733827773.2282934 1733827791.2194312 1733827791.7680264 1733827797.6309197 1733832972.2255442 1733832973.1952362 1733832975.952454 1733832995.9818823 1733833000.4753177 1733833002.799605 1733833036.6471875 1733834737.8805032 1733834740.0520172 1733834743.88104 1733834748.1553388 1733834752.4233265 1733834769.8890462 1733834772.4007912 1733834798.1576154 1733836074.259244 1733836077.7049952 1733836083.0826397 1733836084.2656305 1733836088.6810768 1733836102.482965 1733836113.1277158 1733836132.5725064 1733836496.3533037 1733836498.3189676 1733836499.0263884 1733836502.0276124 1733836514.4971824 1733836522.197993 1733836525.4895005 1733836546.553581 1733905764.6046803 1733905768.2721238 1733905769.7859128 1733905775.6284866 1733905777.6412177 1733905789.8565626 1733905797.3834574 1733905812.554496 1733908927.7658398 1733908931.5025 1733908934.0517693 1733908940.4066727 1733908952.016059 1733908964.3180888 1733908989.1316671 1733908993.2989984 1733909288.657325 1733909290.8760068 1733909293.3179958 1733909293.7696488 1733909307.5138328 1733909313.9445667 1733909328.9396684 1733909330.359382 1733909336.699531 1733909902.4304671 1733909904.6518452 1733909910.477193 1733909924.9769745 1733909932.6229227 1733909938.500676 1733909946.0414634 1734006504.1333292 1734006509.8071592 1734006512.048598 1734006517.1330192 1734006518.812081 1734006533.7427895 1734006547.1742134 1734006555.7657967 1734015726.2168474 1734015726.9747858 1734015732.3542402 1734015740.220944 1734015759.9980555 1734015764.1156278 1734015784.5271907 1734027101.1632953 1734027102.2415211 1734027104.4368935 1734027105.446029 1734027107.0598297 1734027117.1169271 1734027128.1979995 1734027139.2692516 1734027140.5368311 1734088774.0993812 1734088777.1879537 1734088777.714932 1734088780.891004 1734088781.4808877 1734088789.5336397 1734088804.045803 1734088816.0933163 1734093159.558811 1734093160.9894395 1734093162.3781676 1734093170.8064487 1734093174.7633927 1734093183.86795 1734093188.411972 1734093196.76535 1734172341.7707095 1734172342.4083743 1734172343.168821 1734172350.172758 1734172356.9757605 1734172363.7750375 1734172388.8443363 1734172416.3446264 1734172430.83665 1734175097.5265257 1734175099.85371 1734175101.877565 1734175104.969263 1734175112.7166493 1734175119.9440668 1734175121.150225 1734175126.1709414 1734177108.2648222 1734177109.5323458 1734177110.9781883 1734177112.6747355 1734177117.3391833 1734177121.0887563 1734177131.8735366 1734177137.6291678 1734177141.3786077 1734199035.8221405 1734199037.481856 1734199038.004862 1734199039.968881 1734199045.415362 1734199064.914838 1734199067.2668197 1734199069.0058367 1734262028.6908529 1734262029.307968 1734262035.2942023 1734262039.4181511 1734262040.3107548 1734262040.8191369 1734262054.9778004 1734262059.1196017 1734262065.9713304 1734264058.8774114 1734264062.150621 1734264063.0401947 1734264065.8985987 1734264074.2219696 1734264081.5155044 1734264092.787558 1734264146.2914078 1734268844.9836473 1734268846.3901615 1734268846.9945705 1734268847.7356365 1734268849.5164173 1734268860.365839 1734268868.1805236 1734268870.3608446 1734268876.3276196 1734269281.15436 1734269287.1708488 1734269288.8807511 1734269289.7311661 1734269293.4040473 1734269296.2506533 1734269304.7172859 1734269325.7669764 1734269329.419911 1734271395.6991515 1734271396.6889472 1734271397.880067 1734271402.6827838 1734271403.8652008 1734271413.4226174 1734271423.0080652 1734271425.488706 1734271427.6578972 1734351688.058646 1734351689.6575918 1734351694.9861565 1734351698.0319583 1734351701.5358753 1734351722.3482032 1734351726.086569 1734351741.6723933 1734367468.4239993 1734367473.1290283 1734367474.3041587 1734367476.32963 1734367487.2137127 1734367493.396583 1734367508.0347528 1734367572.7470653 1734438290.7985852 1734438292.2057211 1734438294.82526 1734438297.8977218 1734438303.43967 1734438311.3271127 1734438323.1823792 1734438391.312719 1734438990.0230591 1734438991.4290752 1734438992.3159082 1734438997.0685658 1734439000.9377115 1734439003.5536366 1734439013.0345373 1734439022.8144507 1734439041.4531271 1734610935.5402877 1734610936.018706 1734610936.7709029 1734610938.0711465 1734610940.2272396 1734610948.181996 1734610963.6168685 1734610969.7630963 1734610976.624657 1734693435.791713 1734693437.9342422 1734693442.8375373 1734693446.8058383 1734693450.5835466 1734693459.3054142 1734693466.8991237 1734693469.2940693 1734693471.3070602 1734969779.4377246 1734969780.6083114 1734969783.713666 1734969790.1905634 1734969798.3195398 1734969803.4121616 1734969810.2726023 1734969815.611365 1734969818.2863302 1735215538.1666918 1735215538.5484898 1735215543.1818237 1735215547.2899783 1735215557.8561838 1735215568.1153088 1735215569.912203 1735215597.7214365 1735298753.3061194 1735298755.0128474 1735298758.4833825 1735298765.6748583 1735298770.1487741 1735298779.8815114 1735298806.5731514 1735298841.728858 1735300814.2834265 1735300815.2847862 1735300820.9974098 1735300823.9439876 1735300829.0210621 1735300837.9418302 1735300848.477985 1735300851.946753 1735508397.0287507 1735508398.5288246 1735508399.4302917 1735508403.8215485 1735508405.3892164 1735508410.275628 1735508424.4502141 1735508431.1793299 1735508468.0790179 1735579413.8945177 1735579414.414634 1735579416.8128467 1735579418.6358535 1735579420.7884207 1735579433.5342782 1735579440.9099731 1735579451.8205795 1735579459.6753137 1735619086.9711988 1735619087.409217 1735619087.9281003 1735619095.159358 1735619099.3349144 1735619101.4988656 1735619112.587005 1735619119.9110858 1735619127.832429 1735711857.8234038 1735711859.564477 1735711862.3517983 1735711863.3506043 1735711872.5843375 1735711873.9384556 1735711892.2770236 1735711935.7533352 1735711956.2635896 1735752840.1028368 1735752843.3724842 1735752843.761337 1735752844.8144312 1735752851.5520108 1735752857.523881 1735752861.484574 1735752869.4489007 1735752870.265695 1735816433.6132152 1735816435.809237 1735816437.337141 1735816442.6280434 1735816454.9639046 1735816459.1432912 1735816462.9862452 1735816467.2984185 1735820518.8371863 1735820520.5738156 1735820522.8006866 1735820529.5624504 1735820530.426708 1735820536.6808848 1735820548.6727474 1735820550.8155315 1735820552.770849 1735905730.1280572 1735905731.5647476 1735905733.118345 1735905734.0669265 1735905734.694602 1735905748.389628 1735905754.5810616 1735905758.8846927 1735905761.8809183 1735920210.2677524 1735920212.436216 1735920213.7218347 1735920219.1996355 1735920226.1635919 1735920241.4036157 1735920241.7497404 1735920250.0450702 1735922820.4782093 1735922821.1348338 1735922822.7804573 1735922835.6868227 1735922981.6318777 1735922985.1768062 1735922989.272801 1735922995.7330163 1735923003.3491628 1735923004.6397786 1735923020.1836908 1735985905.5444398 1735985916.0105693 1735985919.6104634 1735985919.9892411 1735985937.6283722 1735985958.222152 1735986005.935107 1735986021.704869 1735987092.3328984 1735987093.8391883 1735987095.3711596 1735987103.9556334 1735987104.5368266 1735987106.7685935 1735987116.1892285 1735987124.2150946 1735987126.3644824 1735997735.301569 1735997736.5944946 1735997740.4465046 1735997742.8420439 1735997745.0824842 1735997746.6846266 1735997762.8327234 1735997764.1441154 1735997770.4355567 1735999881.9054108 1735999882.537724 1735999885.4977186 1735999886.93881 1735999890.086601 1735999892.2900712 1735999902.443185 1735999913.3734689 1735999914.6378303 1736005021.269936 1736005026.0950496 1736005026.5565746 1736005028.5512946 1736005034.295627 1736005046.0001605 1736005054.8968458 1736005057.636277 1736091843.3751974 1736091844.0270586 1736091855.4683526 1736091857.5741239 1736091923.0427983 1736091924.572181 1736091940.7193031 1736091978.6729257 1736094594.3971121 1736094597.1088984 1736094598.9986238 1736094600.458892 1736094603.2124414 1736094608.6036782 1736094622.655662 1736094631.1214418 1736094649.4742968 1736095641.5843077 1736095646.6030598 1736095659.935441 1736095673.4031339 1736095675.767698 1736096674.6084228 1736096675.5232391 1736096676.2434072 1736096678.1660178 1736096686.8612764 1736096695.1379368 1736096698.5002198 1736096708.280524 1736158560.5399482 1736158561.9534502 1736158563.4882185 1736158564.7752595 1736158574.529928 1736158588.3760154 1736158615.945422 1736158629.2041485 1736158653.2757142 1736165960.2888427 1736165966.1696758 1736165968.4497535 1736165969.0200455 1736165981.8632822 1736165998.8243723 1736166001.2628193 1736166008.3271723 1736240676.5533333 1736240681.200234 1736240686.528377 1736240687.5252 1736240689.8596854 1736240700.8519623 1736240714.9799516 1736240720.5002007 1736259527.365497 1736259536.772254 1736259578.5615714 1736259682.986006 1736260613.78191 1736260615.0057075 1736260618.4702165 1736260622.4034257 1736260624.3663952 1736260635.4417725 1736260639.6916158 1736260642.856217 1736441675.4581223 1736441679.9146483 1736441683.5242102 1736441690.9802032 1736441694.5142927 1736441719.6086934 1736441732.7007813 1736441754.46947 1736441886.5042713 1736441887.8903387 1736441890.8630843 1736441891.7496033 1736441901.1597342 1736441911.8327436 1736441921.6508195 1736441929.3110847 1737053060.7107148 1737053061.7079356 1737053064.9652221 1737053068.0993688 1737053069.2623348 1737053085.2016392 1737053090.228786 1737053098.1883311 1737053100.9433181 1737218159.9871378 1737218160.8943348 1737218173.5094814 1737218175.3223531 1737218175.7673883 1737218206.747201 1737218214.572571 1737218236.5821056 1737218253.0675943 1737281149.6906452 1737281151.7767713 1737281158.6541772 1737281161.3245492 1737281171.5785894 1737281181.0609574 1737281183.4652088 1737634751.2807136 1737634757.2278888 1737634761.4429455 1737634766.177611 1737634770.9341338 1737634780.3815856 1737634781.078672 1737634808.1874688 1737634830.808764 1737980365.2704349 1737980366.532835 1737980372.7169843 1737980378.6984127 1737980392.7996438 1737980402.1677213 1737980408.840801 1738176385.9614975 1738176387.5311823 1738176389.7672567 1738176395.7514846 1738176399.232108 1738176413.4351516 1738176432.6113453 1738176435.5840304 1738307106.897794 1738307110.556664 1738307112.859659 1738307118.9154048 1738307126.0298553 1738307130.3858697 1738307145.7877836 1738307150.676601 1738509315.7534444 1738509317.248571 1738509320.8597095 1738509325.4734414 1738509326.7232912 1738509336.0920534 1738509348.1706765 1738509357.7451594 1738510960.97414 1738510966.4917815 1738510967.4010441 1738510971.0032785 1738510975.2703307 1738510991.4107807 1738511006.686129 1738511007.4859824 1738511557.295736 1738511559.0962 1738511560.9264438 1738511566.4940279 1738511571.443775 1738511573.2373033 1738511580.1756394 1738511592.6698241 1738514823.3109682 1738514824.2517784 1738514825.514968 1738514826.179941 1738514830.463543 1738514836.9260972 1738514850.069192 1738514850.981052 1738514877.4470348 1738563652.295612 1738563653.7358687 1738563661.408399 1738563662.226456 1738563667.1011114 1738563669.3023953 1738563678.3859153 1738563691.8069675 1738563729.4151654 1738585091.3736339 1738585092.5167472 1738585095.8209786 1738585097.641139 1738585107.9601016 1738585110.2047687 1738585113.6362388 1738585121.1674669 1738585175.540115 1738805903.3422842 1738805908.6929772 1738805909.751889 1738805911.667848 1738805919.6154075 1738805933.1037781 1738805936.0323374 1738805938.619792 1739190245.1729622 1739190275.102606 1739190359.784534 1739190366.8907857 1739190382.5055847 1739190416.8249395 1739190450.1152332 1739190482.7457755 1739725878.7171612 1739725883.8818684 1739725891.685329 1739725892.68016 1739725936.528464 1739725943.7014942 1739725970.0041378 1739725977.2309911 1739794871.4846091 1739794875.9820058 1739794876.688585 1739794880.338071 1739794891.5054476 1739794902.4280593 1739794925.2632608 1739794932.1904132 1739988426.6435232 1739988427.7066967 1739988430.0451086 1739988434.0439842 1739988441.0419397 1739988441.7888176 1739988456.312907 1739988461.2888188 1739988487.343532 1740054285.1691186 1740054286.3942266 1740054292.37818 1740054295.811164 1740054308.0411217 1740054312.4567688 1740054322.6335552 1740054333.4984338 1740079286.440632 1740079288.2980962 1740079289.982014 1740079302.4534955 1740079334.7564526 1740079355.0628817 1740079360.4295704 1740079381.8605378 1740157548.6281772 1740157553.7571568 1740157554.7670753 1740157557.3696394 1740157558.3090923 1740157564.9541898 1740157575.4727216 1740157591.5358796 1740157659.8851328 1740220077.4754336 1740220087.2189336 1740220091.073763 1740220094.516704 1740220098.0173957 1740220101.9434617 1740220111.7498071 1740220116.2820933 1740220121.0643718 1740245083.9737985 1740245090.3478086 1740245090.8755617 1740245092.7752793 1740245098.5716355 1740245107.3766751 1740245111.6379035 1740245121.6337688 1740306828.5973806 1740306834.7376788 1740306845.121794 1740306867.0319235 1740306872.6905491 1740306913.480411 1740306920.1069384 1740399729.9223397 1740399825.766838 1740399827.3049707 1740399830.2140074 1740399840.8109517 1740399845.9939446 1740399865.9941838 1740399874.3998785 1740399909.2752402 1740482110.7903411 1740482112.6169007 1740482113.9752886 1740482115.2887034 1740482116.3916032 1740482121.1089497 1740482137.4481843 1740482154.288911 1740482169.020022 1740662877.656166 1740662883.3141673 1740662884.0697079 1740662887.5417233 1740662943.9152436 1740662951.775909 1740662962.4440465 1740663000.0761418 1740698034.6122122 1740698039.362832 1740698040.584123 1740698041.3482378 1740698043.0440652 1740698044.8144715 1740698062.7515821 1740698072.4950461 1740698077.9344592 1740719912.2369485 1740719913.802656 1740719921.609393 1740719922.6849043 1740719923.830786 1740719932.330509 1740719944.6747625 1740719945.5915139 1740758862.4804335 1740758864.3160887 1740758873.1681957 1740758875.706354 1740758876.702129 1740758911.9918113 1740758929.7068546 1740758947.6397083 1740758955.9092875 1740829320.9958465 1740829323.5461824 1740829326.3017564 1740829327.2471852 1740829343.458982 1740829351.5309384 1740829355.2095764 1740830092.8333147 1740830098.5127282 1740830101.1660757 1740830102.6165016 1740830105.7693543 1740830109.3415632 1740830115.824294 1740830122.818993 1740830132.8016496 1740834891.5516295 1740834892.54687 1740834898.2090986 1740834901.943733 1740834906.881616 1740834923.5885248 1740834924.5466075 1740834965.8267653 1740835506.9199913 1740835511.1185188 1740835515.1694639 1740835518.1965115 1740835519.4156275 1740835545.7867088 1740835548.0261815 1740835571.3404436 1740846718.6309428 1740846719.2229779 1740846720.9839458 1740846724.331695 1740846731.2153864 1740846745.9712794 1740846746.6058896 1740846753.5852516 1740851654.8073878 1740851657.1226265 1740851659.0984578 1740851662.5845704 1740851679.0356247 1740851686.6202796 1740853131.9662952 1740853135.2259994 1740853140.0243337 1740853141.5544727 1740853142.5853932 1740853151.5907438 1740853161.4089994 1740853179.152378 1740853234.7913692 1740909590.7676952 1740909593.4394844 1740909594.1006145 1740909600.1618545 1740909605.5640283 1740909627.5641062 1740909629.763059 1740909638.391702 1741538002.746394 1741538004.5974147 1741538007.1031163 1741538011.1803036 1741538022.5535285 1741538023.2208674 1741538035.1005435 1741538037.6209497 1741538053.6795459 1741540241.5225925 1741540243.0384476 1741540243.7290587 1741540248.8801308 1741540250.8812892 1741540255.0324414 1741540275.3322263 1741540278.8879032 1741540279.8883533 1742736926.4213793 1742736929.0452437 1742736929.9147203 1742736941.0108812 1742736943.6206505 1742736953.7565837 1742736955.0753472 1742817897.1766253 1742817906.055439 1742817908.110843 1742817925.20516 1742817931.6035576 1742817933.6209328 1742817941.782805 1742817949.0679486 1742817976.523266 1742820762.8189282 1742820767.58487 1742820769.723738 1742820779.3241792 1742820808.8599684 1742820809.7592335 1742820868.020134 1742833599.6929293 1742833600.6258411 1742833605.432312 1742833606.0664065 1742833609.8345032 1742833621.3044624 1742833629.688015 1742833634.2095566 1742833685.3454952 1742836321.144967 1742836329.1386688 1742836330.3600333 1742836333.159632 1742836336.205278 1742836340.7387507 1742836348.8935614 1742836371.8875759 1742836403.011777 1743006400.4382706 1743006402.8110816 1743006406.0368016 1743006408.5252998 1743006422.3414671 1743006436.7540543 1743006441.0074162 1743006507.553623 1743348894.2369478 1743348901.5321884 1743348903.3034456 1743348912.1285534 1743348913.6900957 1743348919.0135596 1743348934.7863953 1743348939.0275247 1743704487.3344524 1743704488.7368083 1743704493.066661 1743704502.7999954 1743704508.704604 1743704526.4536037 1743704540.3676257 1743704595.6681256 1744540076.4937 1744540077.7716103 1744540080.2340953 1744540087.4633138 1744540090.1468627 1744540090.9323301 1744540104.043849 1744540105.8583179 1744540113.6994038 1744540979.8903549 1744540981.2079186 1744540983.7677922 1744540989.2262633 1744541006.268343 1744541009.6697378 1744541010.7569468 1744542352.2102094 1744542354.7567139 1744542358.0040245 1744542358.6157143 1744542366.1230075 1744542381.9384413 1744542389.4165056 1744542397.4071445 1745173293.8249953 1745173294.6977684 1745173296.4183428 1745173299.7737727 1745173321.02643 1745173328.499534 1745238314.6789122 1745238315.1873124 1745238316.4272435 1745238323.9033215 1745238325.5795352 1745238328.3564548 1745238347.3873117 1745238371.5862057 1745238387.9306889 1745843070.958591 1745843075.5153403 1745843076.3962047 1745843077.0973387 1745843094.5423474 1745843118.8675365 1745843138.420316 1746226656.8705308 1746226657.815519 1746226659.102352 1746226663.2202785 1746226665.2551959 1746226674.0033555 1746226678.4311152 1746226696.077037 1746362184.0793815 1746362190.0461793 1746362191.708346 1746362195.0864835 1746362196.7399127 1746362201.1714997 1746362217.4062338 1746362226.1971035 1746362262.0417452 1746362599.2312064 1746362607.3190908 1746362617.876917 1746362619.045333 1746362649.466091 1746362658.9040372 1746363616.3271368 1746363619.165741 1746363621.2730448 1746363624.960459 1746363630.1416016 1746363642.0023985 1746363648.6735318 1746363701.3209887 1746367035.9069357 1746367040.6509783 1746367046.6282654 1746367051.5990014 1746367060.6876135 1746367064.021934 1746367074.9660578 1746371404.782657 1746371407.2207198 1746371412.0853345 1746371418.4139013 1746371423.897549 1746371428.9851322 1746371441.6439266 1746371486.6761787 1746447841.1483686 1746447845.21004 1746447850.4436421 1746447851.0021956 1746447852.2266257 1746447854.305104 1746447866.7331069 1746447877.529441 1746447904.8588624 1746970866.2850928 1746970871.4382925 1746970876.4223201 1746970877.5313618 1746970896.6955512 1746970907.5881906 1746970913.7251034 1746972125.4956772 1746972131.1131086 1746972134.1966543 1746972136.3567512 1746972140.2242782 1746972163.447233 1746972167.0903578 1746972172.4392664 1747052634.0867045 1747052637.9719176 1747052640.901573 1747052650.1282237 1747052650.804084 1747052656.5234401 1747052660.2318363 1747052672.2194757 1747052680.016201 1747494465.0081844 1747494465.7188168 1747494469.3196251 1747494477.337838 1747494486.9829397 1747494504.5049129 1747494544.0859094 1747494559.1372905 1747496024.7672715 1747496028.2004454 1747496030.561923 1747496032.7285593 1747496037.386692 1747496038.418993 1747496047.849549 1747496057.4868774 1747496135.6289368 1747560799.4387653 1747560800.5358477 1747560804.0414832 1747560806.5466936 1747560809.9259021 1747560811.1534076 1747560819.0543056 1747560829.0155323 1747560842.1566617 1747572646.5470788 1747572647.390134 1747572648.7524438 1747572652.7892008 1747572654.873262 1747572685.5694017 1747572695.3083656 1747572723.2853117 1747573964.4942021 1747573968.209933 1747573970.4658723 1747573971.2906015 1747573977.1336067 1747573984.4106464 1747573998.8427653 1747574004.6505325 1747574075.1307337 1747574305.2764027 1747574306.1658869 1747574311.2029257 1747574311.6356444 1747574321.143026 1747574323.3239775 1747574333.4431956 1747574354.3533092 1747574406.3318686 1747579511.5783572 1747579512.221208 1747579517.5236735 1747579519.637736 1747579524.4089606 1747579535.953931 1747579545.1393197 1747582487.1076038 1747582493.1306417 1747582493.8906002 1747582496.2982512 1747582519.7728572 1747582521.1929443 1747582651.9926095 1747582654.431721 1747582655.285922 1747582657.8852582 1747582686.572977 1747582696.4993298 1747582720.848927 1747663813.9657867 1747663814.9364848 1747663816.62631 1747663817.6334417 1747663818.8450267 1747663825.5548377 1747663846.4810712 1747663865.7397933 1747663890.7066286 1748067724.2420354 1748067729.804218 1748067745.057909 1748067754.8269758 1748067757.5958548 1748067758.5507638 1748070374.502674 1748070381.6441398 1748070383.3808093 1748070391.5950193 1748070416.2224102 1748070434.3698165 1748070435.555058 1748070436.6042447 1748070476.8085542 1748070496.1171339 1748084467.5058494 1748084468.2441168 1748084474.8024223 1748084477.277225 1748084481.1347795 1748084493.7509103 1748084495.9662008 1748084497.9603918 1748084510.263257 1748262319.461814 1748262326.0824232 1748262332.1754222 1748262336.183644 1748262343.4696805 1748262356.9252026 1748262360.7433844 1748262382.4167514 1748262387.204495 1748456951.5199213 1748456954.1033602 1748456961.047204 1748456962.36518 1748456965.1899178 1748456970.0175683 1748456981.9784403 1748456984.6797266 1748456990.9099953 1748457001.6800666 1748551688.3058105 1748551690.0631135 1748551693.6542091 1748551695.5739806 1748551704.4907575 1748551708.129478 1748551710.4948766 1748551720.0561225 1748551720.7178066 1748551734.3925445 1748687373.7607691 1748687380.5627248 1748687383.7903376 1748687386.032045 1748687394.5852222 1748687396.8480425 1748687398.276464 1748687402.4907308 1748687407.7660398 1748687418.5964398 1748697083.773052 1748697089.4772348 1748697092.8141148 1748697094.1940024 1748697094.9007196 1748697102.0838292 1748697132.8360145 1748697150.0251675 1748697187.1960125 1748702521.1370988 1748702531.4553287 1748702533.9648993 1748702538.197775 1748702544.2479873 1748702559.1965306 1748702563.5938144 1748702614.1509361 1748704845.2390134 1748704846.953144 1748704851.1478662 1748704852.389785 1748704858.6064208 1748704867.4006689 1748704880.0561786 1748704884.7375908 1748704907.1115549 1748704914.9893456 1748707249.4935129 1748707258.156049 1748707267.1819637 1748707278.0714958 1748707288.8793342 1748707295.7226372 1748707657.9277403 1748707665.0076687 1748707668.6328948 1748707670.4473636 1748707672.7199476 1748707676.2001882 1748707686.09082 1748707694.7650838 1748707696.7660286 1748707712.3426354 1748712594.9639416 1748712596.8361835 1748712597.2533367 1748712598.4701526 1748712639.9945111 1748712648.4648838 1748712666.6423347 1748712670.6976936 1748712683.751865 1748712694.838877 1748780697.1300132 1748780707.1812928 1748780710.8320565 1748780713.4933453 1748780714.5160713 1748780720.221217 1748780723.211522 1748780729.3108208 1748780734.3013072 1748780738.1098628 1748787367.9196851 1748787373.6341035 1748787374.8326871 1748787376.6386254 1748787378.22919 1748787393.1979444 1748787403.4755344 1748787413.9729302 1748787459.553451 1748871990.789132 1748871995.020706 1748871996.1685622 1748871999.473268 1748872000.461004 1748872018.3708444 1748872029.4726076 1748872043.0605848 1748872044.5643191 1748878636.3922968 1748878639.2287827 1748878640.8189514 1748878641.4030552 1748878648.2457068 1748878652.9519298 1748878667.3149946 1748878670.2457824 1748878706.71913 1748878718.4691658 1749098719.6553814 1749098720.7774096 1749098724.074082 1749098726.3920724 1749098748.0580766 1749098778.3085325 1749098912.5852885 1749098915.8331559 1749098918.0611174 1749098920.7714863 1749098922.0139832 1749098925.4494755 1749098942.071467 1749098942.7237644 1749098944.6195276 1749098952.1434 1749099136.3788838 1749099148.0185165 1749099148.6944551 1749099174.1283717 1749099194.9333398 1749099200.43662 1749099208.8724835 1749099231.0205483 1749099242.1005156 1749099248.5668106 1749126621.6487837 1749126623.688538 1749126627.3696332 1749126631.3988378 1749126638.2690864 1749126655.0908453 1749126659.7739618 1749126672.561119 1749126705.4273717 1749139750.3806634 1749139754.8162315 1749139755.6006756 1749139759.1034007 1749139760.887557 1749139779.7558067 1749139782.278983 1749139794.1488376 1749139827.5752163 1749205752.9047642 1749205758.0134082 1749205759.1623423 1749205773.9736311 1749205779.741236 1749205782.8816354 1749205792.9915836 1749205800.0576766 1749207436.9932654 1749207439.3376372 1749207442.0507126 1749207444.3223388 1749207450.0089462 1749207461.327043 1749207464.8948407 1749207466.3757741 1749207469.173337 1749207629.3760676 1749207631.3845394 1749207641.1218069 1749207644.51641 1749207650.1583064 1749207651.5605333 1749207652.81352 1749207659.088342 1749207660.1834414 1749207666.5334415 1749218815.2893264 1749218816.950752 1749218818.3285556 1749218822.7867248 1749218830.0134652 1749218850.0837555 1749218853.1024146 1749218874.1123745 1749218877.6380124 1749271867.1203532 1749271875.1028454 1749271875.563298 1749271877.454733 1749271880.210177 1749271892.7287812 1749271895.330672 1749271897.2302961 1749271907.042344 1749280038.2102046 1749280039.1501412 1749280042.1373932 1749280057.7576523 1749280085.8312287 1749280088.9918113 1749280100.0247335 1749280122.1361923 1749280151.82418 1749280164.4802487 1749295833.2289293 1749295838.1579623 1749295839.2984896 1749295843.2131975 1749295843.7777479 1749295845.2553825 1749295846.4326391 1749295854.436964 1749295860.3326712 1749295864.1298404 1749309368.4493246 1749309381.3636708 1749309383.1646597 1749309384.0942638 1749309387.6640103 1749309389.23439 1749309399.0786464 1749309401.8483248 1749309405.5220308 1749309449.2977185 1749310907.467713 1749310909.3287082 1749310916.5364704 1749310917.7325003 1749310920.2343166 1749310933.2956555 1749310935.9080079 1749310938.7189498 1749310982.2758734 1749322674.1674924 1749322675.0894198 1749322677.0391877 1749322691.4998703 1749322697.4724205 1749322701.3889818 1749322712.1984563 1749322712.8898647 1749373634.7000587 1749373638.8944862 1749373640.2385037 1749373648.106886 1749373652.0485783 1749373660.711902 1749373676.109536 1749373681.8637192 1749373724.1735797 1749375217.2968209 1749375220.885726 1749375221.7534225 1749375227.9966497 1749375231.575274 1749375246.927451 1749375250.322288 1749375260.3010128 1749375431.9646034 1749375433.6707664 1749375447.2827883 1749375458.8470395 1749375465.1968532 1749375466.3214815 1749375474.8340738 1749390237.9649787 1749390241.9855897 1749390247.4103007 1749390250.009474 1749390253.2129986 1749390259.3222694 1749390273.1098864 1749390274.645784 1749390276.2960196 1749390334.5760574 1749392242.377895 1749392245.8439276 1749392247.4123716 1749392248.3556786 1749392252.8020425 1749392270.550798 1749392274.6797643 1749392279.2192132 1749392286.722365 1749411613.2145607 1749411614.732268 1749411621.26396 1749411625.9782994 1749411635.3499079 1749411641.017848 1749411642.6818094 1749411645.4244514 1749411651.7081828 1749413924.5660992 1749413925.2623918 1749413931.9420364 1749413937.1102436 1749413939.190069 1749413950.1087549 1749413950.858109 1749413955.1419845 1749413965.2417042 1749475183.4130828 1749475269.0891244 1749475280.846001 1749475300.9858892 1749475424.7997751 1749475439.293529 1749475443.358688 1749475545.3827717 1749475584.8560176 1749475599.222495 1749618634.866136 1749618635.7672427 1749618636.6498623 1749618637.9993894 1749618639.5859237 1749618655.1264527 1749618669.2126846 1749618675.6886957 1749618722.4055316 1749622725.3681571 1749623331.8992586 1749623338.5948672 1749624021.5295086 1749624027.1660826 1749624034.3393967 1749624059.3551826 1749624065.3029423 1749624089.2069666 1749624112.0961478 1749624156.4944594 1749627557.6170328 1749627563.7709548 1749627566.3929112 1749627599.0472715 1749627602.9159732 1749627603.3838735 1749627613.2461598 1749627645.581141 1749627661.1322215 1749631132.487801 1749631137.7846777 1749631139.412108 1749631142.746514 1749631146.1334321 1749631155.0891125 1749631161.494069 1749631166.674999 1749631176.7612834 1749631201.0510392 1749632884.8329377 1749632887.012211 1749632888.9150484 1749632893.6216717 1749632894.5124671 1749632896.1735542 1749632902.2687907 1749632921.3957534 1749632935.7908692 1749632951.6520977 1749633187.2506747 1749633190.3788958 1749633191.4032943 1749633195.3396616 1749633196.1310704 1749633197.259268 1749633216.1033268 1749633239.4701803 1749633312.8432822 1749633320.344461 1749634764.6499696 1749634767.173367 1749634771.523061 1749634773.3909554 1749634779.5950031 1749634781.118316 1749634787.29547 1749634805.5617473 1749634810.9764915 1749634814.2035315 1749640748.4963331 1749640749.7684474 1749640750.2619064 1749640754.7561483 1749640766.8769314 1749640790.1035645 1749640790.9451928 1749640801.2948 1749640805.6763635 1749655238.0478213 1749655247.8873465 1749655259.6407182 1749655286.745856 1749655303.6456158 1749655305.511278 1749655312.70322 1749655325.0117638 1749655398.9007478 1749712651.54721 1749712655.934081 1749712657.8582826 1749712661.6096082 1749712668.4279766 1749712680.4651814 1749712686.21438 1749712699.3320618 1749721830.855182 1749721834.6855922 1749721835.5651665 1749721836.6144137 1749721841.478143 1749721843.8823774 1749721855.1086738 1749721867.9388387 1749721875.0416765 1749721879.2328339 1749732133.6596942 1749732135.3497596 1749732141.655937 1749732144.1405883 1749732145.5692327 1749732158.3680172 1749732180.1515033 1749732183.9803326 1749736582.9264092 1749736585.354908 1749736587.0578477 1749736595.4875488 1749736597.2588503 1749736614.8722656 1749736616.2536585 1749736626.8954155 1749736644.5392482 1749736645.7009246 1749739531.1874294 1749739533.13513 1749739533.6555822 1749739535.965754 1749739537.7629826 1749739549.3384633 1749739563.0764222 1749739564.1078699 1749739579.6870344 1749739583.0480855 1749740339.83903 1749740342.3714132 1749740350.120534 1749740350.6521754 1749740352.1002567 1749740355.49081 1749740366.1328075 1749740375.3159406 1749740392.1473715 1749740471.082113 1749747046.3999448 1749747050.4988081 1749747051.2065408 1749747053.0657842 1749747073.8171906 1749747079.023346 1749747108.931413 1749747114.5529356 1749747126.137808 1749747129.3645394 1749748428.7751336 1749748429.2344713 1749748431.537067 1749748432.2051632 1749748434.882207 1749748456.9194813 1749748463.0082138 1749748490.8282359 1749748491.2097864 1749750799.0156703 1749750800.096002 1749750806.0923882 1749750810.6573071 1749750818.1064825 1749750820.5025675 1749750832.1615047 1749750840.0820537 1749750849.3169732 1749750880.6903806 1749752263.3721592 1749752269.0241702 1749752271.5187314 1749752272.3386934 1749752274.153682 1749752297.2797587 1749752308.4526787 1749752332.3235343 1749752373.8145905 1749811480.761157 1749811482.7338417 1749811484.0564961 1749811486.8999205 1749811487.9248195 1749811495.0833464 1749811507.1862533 1749811511.639231 1749811514.662488 1749811517.533321 1749812344.3792236 1749812350.206982 1749812351.204563 1749812352.4549727 1749812353.6899989 1749812366.166027 1749812373.4487863 1749812375.8403049 1749812380.6793523 1749812381.9697902 1749815170.9090002 1749815171.9317243 1749815174.630299 1749815175.2614148 1749815179.4528818 1749815187.344421 1749815196.1581042 1749815203.8359156 1749815206.6176918 1749815259.4852054 1749859758.6398895 1749859761.2934213 1749859763.734038 1749859767.986022 1749859775.409929 1749859776.3732328 1749859795.550158 1749859802.2851381 1749859805.429732 1749859832.0472 1749902075.1299372 1749902075.6157472 1749902076.5964658 1749902079.499213 1749902080.878528 1749902097.4279869 1749902101.63446 1749902107.435497 1749902112.4152546 1749904577.0686636 1749904583.3769503 1749904586.4636397 1749904589.030314 1749904591.9222016 1749904592.8966002 1749904612.8343856 1749904617.307598 1749904626.4113624 1749904662.8498883 1749912211.7811341 1749912214.2153661 1749912218.1345556 1749912219.715525 1749912223.5604692 1749912225.5720553 1749912240.9375608 1749912241.9256985 1749912291.2109222 1749912298.7625544 1750076546.501283 1750076550.6776783 1750076555.6073227 1750076556.5223265 1750076558.0226476 1750076562.8913903 1750076578.3625565 1750076588.2349954 1750076598.8494236 1750076666.8024526 1750112020.9380093 1750112029.2343192 1750112031.7011588 1750112032.4458618 1750112051.2178729 1750112057.2509675 1750112063.4932077 1750112085.0010915 1750112581.7224362 1750112703.9725606 1750112705.7631092 1750112735.3743072 1750112762.3768733 1750112787.421681 1750112792.8325596 1750112793.4704797 1750112807.3919795 1750112819.946196 1750113253.1045556 1750113253.899241 1750113258.1956327 1750113263.9384453 1750113267.0486717 1750113277.0779586 1750113279.327918 1750113283.3153214 1750113322.4880247 1750146864.5753095 1750146868.7486885 1750146872.6152499 1750146874.7673848 1750146893.0411189 1750146897.522212 1750146898.8933263 1750147032.4358764 1750147034.0832617 1750147035.2034974 1750147062.851591 1750147071.3774083 1750147082.1078281 1750147166.2895048 1750147201.5141869 1750147233.0696373 1750147257.1892726 1750147853.784512 1750147859.530698 1750147866.428959 1750147883.1651356 1750147887.1592982 1750147896.8126338 1750147911.3134596 1750147920.819351 1750200358.6303794 1750200360.5763211 1750200361.920015 1750200365.099988 1750200374.0899963 1750200382.0526805 1750200389.6803308 1750200395.137887 1750200395.946482 1750319130.497368 1750319132.5684865 1750319167.7384648 1750319174.36161 1750319198.0307698 1750319218.6176298 1750319238.455424 1750319245.6904848 1750319251.9066992 1750335677.7313075 1750335681.838659 1750335682.2718496 1750335683.2765782 1750335702.586242 1750335712.588418 1750335767.6190648 1750502963.2558582 1750502972.8640456 1750502977.842085 1750502980.354517 1750502983.038681 1750502985.054749 1750502988.6171334 1750502993.587592 1750502997.7213852 1750505662.371309 1750505673.4059393 1750505694.1069899 1750505694.99598 1750505699.495038 1750505700.1377063 1750505840.6451004 1750505842.494917 1750505847.6640582 1750505849.7305999 1750505851.670657 1750505854.782527 1750505863.8916667 1750505867.5244918 1750505876.7239835 1750505886.9933908 1750516320.2753 1750516323.3719172 1750516324.494533 1750516325.2255218 1750516331.5726774 1750516335.0856616 1750516348.0861354 1750516348.7241356 1750516353.4451141 1750516353.9589283 1750516620.4199061 1750516625.3062873 1750516626.4206717 1750516630.5137868 1750516631.5460155 1750516654.8093772 1750516661.3673344 1750516662.9118385 1750516685.066775 1750520688.892653 1750520691.3227167 1750520698.1969924 1750520701.2254708 1750520707.2675326 1750520714.714345 1750520722.506279 1750520779.4648824 1750591023.2526793 1750591029.7906947 1750591033.6760864 1750591038.2577965 1750591039.5859969 1750591041.75532 1750591046.325174 1750591053.242928 1750591055.9179752 1750591059.8156152 1750619759.270681 1750619760.5961554 1750619766.6795948 1750619768.1111012 1750619772.7757778 1750619775.6570215 1750619790.4443107 1750619794.4791846 1750619796.7462895 1750619850.7801914 1750620339.5018923 1750620345.732223 1750620355.8457134 1750620376.2872174 1750620412.3427517 1750620419.4820836 1750620421.2609086 1750620446.5260575 1750622090.78472 1750622091.7098215 1750622096.1691563 1750622100.6803923 1750622104.9237328 1750622105.8404343 1750622113.7479684 1750622123.2251766 1750622124.337181 1750622129.6151385 1750681291.965105 1750681295.2112973 1750681300.780856 1750681305.2473927 1750681306.0782137 1750681309.1641443 1750681341.3806005 1750681441.8443985 1750940633.0334418 1750940637.7753532 1750940642.7058442 1750940644.2142265 1750940648.1112323 1750940660.8890212 1750940663.1971006 1750940666.7814307 1750940687.7098012 1750940742.4480157 1751110725.2078402 1751110729.1739366 1751110730.3148015 1751110733.9212723 1751110735.1801746 1751110741.2618518 1751110752.2854383 1751110757.2074318 1751110758.8447082 1751110790.1221993 1751114981.6072633 1751114982.9551451 1751114983.3459275 1751114986.7715294 1751114991.1609395 1751114991.9845252 1751115010.1980166 1751115017.4232025 1751115053.0503392 1751115066.730599 1751189470.2953637 1751189472.289429 1751189476.6330023 1751189481.17639 1751189481.9573102 1751189484.8299835 1751189494.7784457 1751189507.0900698 1751189551.5453267 1751191153.15442 1751191157.4138577 1751191160.6247377 1751191167.3223672 1751191178.041022 1751191182.9582558 1751191187.4798217 1751191231.0580914 1751210541.5037293 1751210542.6481793 1751210546.0688426 1751210565.4190056 1751210576.4266472 1751210602.0677116 1751210612.8193116 1751210617.5654838 1751210639.9121401 1751210761.052541 1751210763.1451428 1751210764.1585217 1751210765.6493883 1751210774.2062628 1751210786.4356728 1751210797.3688347 1751210800.8474517 1751210842.0230649 1751286298.5361385 1751286299.0539618 1751286309.9448109 1751286330.4786575 1751355143.6259344 1751355146.68288 1751355147.7218432 1751355156.6756976 1751355165.9402833 1751355173.8904796 1751355175.9409008 1751355188.7918036 1751355226.6272078 1751545581.0122294 1751545586.6132703 1751545593.6615384 1751545594.7327814 1751545596.5224533 1751545616.781041 1751545624.3310037 1751545681.4531589 1751545704.627739 1751725818.967529 1751725819.5161512 1751725821.5602055 1751725823.2456803 1751725824.4361553 1751725834.479581 1751725852.156433 1751725853.304842 1751725897.3900046 1751725905.7422347 1751730085.9102023 1751730087.9532862 1751730089.7864442 1751730092.5901027 1751730097.7223408 1751730098.6084144 1751730115.5875676 1751730118.519118 1751730165.6099408 1751730181.8135753 1751732874.3393655 1751732875.3494453 1751732877.5679533 1751732883.9959602 1751732888.6535351 1751732895.8564885 1751732900.8064644 1751732906.3657126 1751732912.9698772 1751740009.8792338 1751802647.7944303 1751802649.198215 1751802653.345696 1751802659.375122 1751802663.2127845 1751802674.4501565 1751802677.4429996 1751802682.8299348 1751802688.28721 1751853616.4622428 1751853620.6045835 1751853622.8813455 1751853627.6323647 1751853628.3295627 1751853630.8563719 1751853640.4701383 1751853645.9375217 1751853647.1251276 1751853652.3462539 1751888466.2609575 1751888467.4893453 1751888470.644313 1751888471.5961049 1751888474.367563 1751888475.778744 1751888493.6230636 1751888511.9997575 1751888555.5523255 1751888594.5809436 1751977069.6957645 1751977071.599551 1751977078.172867 1751977081.300183 1751977087.1417215 1751977093.7141619 1751977100.8432062 1751977139.7281485 1751977179.9199867 1751978326.1916354 1751978328.4840539 1751978338.9560432 1751978341.3715274 1751978357.1786745 1751978367.2191665 1751978372.2492654 1751978383.1259727 1751980162.3040843 1751980174.3750544 1751980175.5560195 1751980178.9389732 1751980184.242051 1751980198.1207654 1751980210.761367 1751980236.0854242 1751981521.3733516 1751981561.7564917 1752053337.3207977 1752053338.8619225 1752053341.3972442 1752053346.3473854 1752053350.2991476 1752053351.9596155 1752053366.2021606 1752053377.5975795 1752053450.5912552 1752057310.3442078 1752065104.6770759 1752065107.2878308 1752065108.424729 1752065109.805908 1752065111.1052766 1752065134.5520885 1752065142.4615617 1752065157.0391557 1752066731.5141857 1752066733.6911905 1752066735.0969563 1752066738.4530632 1752066739.4971445 1752066761.0648172 1752066772.953822 1752066801.1133144 1752067159.2773154 1752068830.9687135 1752068832.173346 1752068835.5154512 1752068839.5407856 1752068846.499726 1752068863.1123843 1752068874.2521362 1752068926.1676552 1752068934.778435 1752205661.7582107 1752205666.3036857 1752205666.8440635 1752205668.3498464 1752205678.4908006 1752205679.9102979 1752205691.515887 1752205705.4272656 1752220171.244901 1752220175.9887323 1752220177.0568392 1752220178.3969288 1752220180.7236824 1752220181.7845435 1752220191.9305685 1752220207.8247237 1752220217.7638764 1752220251.2989273 1752249865.716855 1752249869.9362595 1752249870.4005945 1752249881.748938 1752249892.8276708 1752249896.8790243 1752249908.8752942 1752249917.4683437 1752317363.4795117 1752317370.0336106 1752317390.3611355 1752317398.607496 1752317400.3005273 1752317401.024259 1752317406.7781847 1752317423.9100559 1752317436.6103513 1752317447.8547115 1752319914.6331575 1752319915.4795966 1752319926.760566 1752319941.802452 1752319954.2052486 1752319961.5241613 1752320014.6087837 1752320016.6784222 1752336325.0512245 1752336333.917163 1752336387.8570414 1752406193.7112389 1752406194.5214336 1752406195.635355 1752406199.4264512 1752406204.7821202 1752406220.247316 1752406226.2589955 1752406232.176263 1752406283.0001185 1752406308.260031 1752407210.996911 1752407211.828674 1752407214.9152431 1752407218.776768 1752407233.0008824 1752407248.180142 1752407253.493582 1752407254.4523447 1752407255.5309138 1752407256.869781 1752411688.2908175 1752411690.4053566 1752421497.2642744 1752421498.495637 1752421521.409316 1752421527.077749 1752421529.294662 1752421541.667016 1752421542.9554195 1752421566.3176177 1752421567.4761708 1752422206.6630602 1752422216.0846853 1752422240.574253 1752422243.658565 1752422733.8036196 1752424983.430937 1752425015.0811005 1752425032.2356212 1752425033.2287548 1752425033.9963248 1752425035.8940485 1752425046.9963098 1752425077.1100595 1752425103.4793208 1752426778.1639986 1752426780.7987607 1752426784.201647 1752426791.5249655 1752426804.0015364 1752426808.0771294 1752426848.8854136 1752426862.0891616 1752428571.8599634 1752433661.8094244 1752433662.9587271 1752433664.1917112 1752433685.771401 1752433696.9874265 1752433700.9476068 1752433705.246769 1752433706.4015415 1752433747.4182 1752433753.9025729 1752455476.2998357 1752455479.6996272 1752455482.2440193 1752483546.3578281 1752483551.9453197 1752483553.252048 1752483556.7156012 1752483568.962246 1752483584.3881648 1752483591.3398833 1752483592.6544354 1752483645.051297 1752484105.6790297 1752484170.1442206 1752484791.816609 1752484834.8382723 1752581294.7668931 1752581300.203477 1752581301.6654656 1752581306.5516346 1752581309.2304502 1752581319.2380588 1752581334.545645 1752581335.531903 1752581350.2245443 1752653208.11366 1752653214.7264032 1752653215.6132576 1752653220.876051 1752653222.770341 1752653235.1640432 1752653242.5288699 1752653252.4051535 1752653338.5787513 1752655341.0746193 1752655344.7018456 1752655351.8267777 1752655353.770705 1752655365.720272 1752655367.9655826 1752655372.2233975 1752655379.8366141 1752655380.969712 1752658083.33107 1752658095.3492181 1752658097.3265333 1752658103.705013 1752658119.4050083 1752658125.6491268 1752658140.1298707 1752658157.0762637 1752662380.6002362 1752662381.4293406 1752662385.4971538 1752662391.565842 1752662399.0018964 1752662414.0315292 1752662414.9375114 1752662422.1790829 1752666174.9191167 1752666196.5410588 1752666212.8757172 1752667013.887674 1752668577.7272162 1752668578.4540179 1752668581.5293293 1752668583.950793 1752668588.5230892 1752668599.85014 1752668600.7181296 1752668612.5240064 1752668638.3085136 1752674979.3560166 1752695230.498447 1752695233.0964093 1752695237.1934483 1752695240.3221178 1752695250.9757826 1752695252.022823 1752695262.6248226 1752695265.9665592 1752755414.5913417 1752755416.6762884 1752755417.4517312 1752755422.1348903 1752755428.7812822 1752755441.3666263 1752755447.8217468 1752755463.3045473 1752755550.326027 1752815598.8271685 1752815602.4160266 1752815609.0523677 1752815612.2074547 1752815613.9390266 1752815626.9855943 1752815628.551522 1752815697.9424307 1752824171.8763149 1752824175.7537646 1752824177.8018596 1752824180.0683246 1752824181.5045102 1752824187.5248275 1752824203.2315161 1752824205.9222045 1752824212.0189817 1752909344.2239141 1752909344.6388516 1752909346.401105 1752909355.5477102 1752909366.23498 1752909372.353175 1752909434.874642 1752931130.6346424 1752931131.467248 1752931140.8398387 1752931142.9503345 1752931155.0360262 1752931179.6947343 1752931212.4887893 1752931217.1517313 1752931226.8343508 1752931325.5797493 1752931985.5287938 1752931989.3067138 1752931991.956637 1752931996.0261855 1752932012.876879 1752932021.4536695 1752932022.7543962 1752932060.5794108 1752938384.516586 1752938386.0041265 1752938388.9465365 1752938391.062609 1752938396.614473 1752938420.788231 1752938429.9272988 1752938463.618736 1752938586.3024359 1753081920.181048 1753081924.5152 1753081932.0630558 1753081942.4622169 1753081951.253088 1753081965.0180943 1753081969.2437797 1753082037.394756 1753082089.858027 1753082090.9234664 1753090707.2661088 1753090712.8956099 1753090714.5297365 1753090715.4559264 1753090718.6303651 1753090739.0777605 1753090744.614489 1753090779.8588169 1753090816.3522484 1753109852.260959 1753109860.0056849 1753109861.4736617 1753109862.2648656 1753109866.242469 1753109872.8958058 1753109885.6476934 1753109888.1732457 1753109898.4354076 1753109954.9590533 1753527778.5117466 1753527779.731848 1753527780.577084 1753527791.3466794 1753527801.5885005 1753527810.1640723 1753527816.8174925 1753527845.6910954 1753527875.0335333 1753528087.7175646 1753528091.62572 1753528095.123978 1753528097.9584997 1753528111.0641444 1753528121.4111438 1753528124.0014498 1753528191.185296 1753528771.9768803 1753528772.6663513 1753528780.6560063 1753528781.3893888 1753528792.0522988 1753528795.6139822 1753528803.8401124 1753528805.3791673 1753543354.5843496 1753543368.8904924 1753543381.8730474 1753543389.7707224 1753543400.0396738 1753543401.9568622 1753543423.2695198 1753543426.357917 1753543427.0342505 1753543436.3947318 1753547961.6327457 1753547964.9480078 1753547972.7431076 1753547977.264395 1753547978.7783508 1753547983.9778428 1753547987.5205367 1753547995.981038 1753547997.829545 1753548003.2144182 1753549710.751082 1753555073.117537 1753555075.194001 1753555080.1292431 1753555081.6338127 1753555084.8535955 1753555085.9333053 1753555102.253864 1753555104.3959394 1753555105.8811164 1753555109.921584 1753557013.7667754 1753557019.6222768 1753557021.1462777 1753557023.7295516 1753557037.9135652 1753557039.2593813 1753557053.3965182 1753557114.414277 1753560209.107383 1753607412.7562165 1753607413.8237505 1753607414.9938471 1753607415.4590468 1753607451.9975915 1753607465.7359056 1753607479.331 1753607488.4349377 1753619523.7802236 1753621634.870607 1753621636.5215642 1753621639.034233 1753621645.05623 1753621647.4843652 1753621653.1763496 1753621660.2784498 1753621668.1427321 1753621727.8170462 1753624311.93218 1753624312.5691931 1753624319.2812183 1753624322.309761 1753624325.2693536 1753624342.1486804 1753624343.0279913 1753624343.6775765 1753624379.7460775 1753624421.0528874 1753628448.1217368 1753628452.4393914 1753628457.8755803 1753628468.61442 1753628478.814922 1753628496.1882634 1753628506.2181995 1753628510.35918 1753633880.8245702 1753633884.0189211 1753633888.1368659 1753633889.9688065 1753633894.9289176 1753633909.2709587 1753633912.9586463 1753633914.656439 1753633974.4984894 1753634196.9595485 1753634198.4258742 1753634200.7588377 1753634202.8742635 1753634214.523655 1753634221.3979316 1753634222.6455235 1753634232.2655947 1753634235.5019648 1753635790.6564934 1753635801.1622255 1753635804.1653693 1753635805.7986543 1753635806.8686574 1753635810.6662238 1753635828.0595148 1753635834.7401557 1753635875.2372122 1753635906.12679 1753637939.8341918 1753637941.723922 1753637946.156286 1753637947.7580767 1753637950.0366821 1753637961.358346 1753637979.3405824 1753638007.4410455 1753642653.8151813 1753705434.0385585 1753705437.3170333 1753705440.9904394 1753705446.1188889 1753705447.3851764 1753705450.675415 1753705471.9571779 1753705475.4415438 1753705505.6278014 1753705534.4087162 1753964919.8963556 1753964928.974177 1753964932.0748856 1753964932.9618192 1753964941.4599595 1753964963.5642147 1753964987.6735666 1753965027.0833921 1754050030.3789477 1754050035.0561054 1754050040.0168066 1754050044.233994 1754050054.4163415 1754050064.863411 1754050067.0610914 1754050073.1985257 1754050081.106659 1754050116.7667983 1754051714.1005504 1754147464.6104853 1754147466.0603118 1754147466.8723512 1754147469.322801 1754147471.4604385 1754147480.567856 1754147488.5365741 1754147494.9528346 1754147496.3750696 1754147541.0013463 1754147901.1338613 1754147902.1700509 1754147903.5346334 1754147910.526371 1754147913.5406568 1754147922.1252503 1754147926.2353654 1754147930.73985 1754147934.617274 1754147937.192003 1754154724.6913762 1754154727.3907928 1754154729.7545896 1754154732.281492 1754154733.0530417 1754154743.6075919 1754154757.663202 1754154771.1261935 1754154776.5890312 1754154815.3744185 1754161692.0995958 1754161693.8928325 1754161698.0712461 1754161701.2578607 1754161702.7071328 1754161722.8262532 1754161734.993284 1754161811.8192391 1754161831.204044 1754163693.6155944 1754163701.2349622 1754163704.9144213 1754163705.781919 1754163707.3302922 1754163717.1612923 1754163732.095443 1754163733.6481328 1754163795.264803 1754210911.854374 1754210914.495917 1754210915.6907413 1754210917.0608191 1754210921.2635305 1754210923.115985 1754210941.8069832 1754210942.7540262 1754210945.496934 1754211020.0348015 1754219489.6631823 1754219490.1588373 1754219490.7965908 1754219492.7039154 1754219494.8038013 1754219498.2529283 1754219519.982066 1754219525.1832073 1754219527.7887845 1754219562.5918531 1754221986.949188 1754221993.6517015 1754222013.344442 1754222086.263555 1754222139.0420344 1754222170.0545282 1754222202.5397425 1754222232.3531396 1754222259.1345057 1754222261.757903 1754223031.4519022 1754223031.9048984 1754223033.2070441 1754223036.2916546 1754223038.8532968 1754223040.5199792 1754223067.7043796 1754223070.026523 1754223115.7667549 1754223133.9409313 1754223591.5066426 1754223593.0655425 1754223595.2943885 1754223599.7125196 1754223608.6046302 1754223613.470199 1754223619.4759579 1754223632.459162 1754223681.8974965 1754228561.1553266 1754228562.819451 1754228563.6393201 1754228569.5833647 1754228570.3724957 1754228589.3824787 1754228591.2490494 1754228627.380794 1754228639.0961065 1754232590.2389843 1754232591.4989154 1754232593.2010121 1754232595.9642012 1754232616.50332 1754232621.5638747 1754232639.7652113 1754232674.7439165 1754233070.4743738 1754233072.0152574 1754233073.9464557 1754233075.2448533 1754233079.4979722 1754233080.141323 1754233092.7940302 1754233104.017456 1754233144.346957 1754233162.5799844 1754239909.7946708 1754239915.5617726 1754239916.4486494 1754239935.9771721 1754239984.2906501 1754239990.9896011 1754240011.013253 1754240017.1374927 1754240049.960765 1754240081.5875914 1754293574.2338655 1754293575.0399668 1754293581.1391838 1754293581.863938 1754293603.6632936 1754293613.1434186 1754293618.4339972 1754293679.7011929 1754310285.6145704 1754310291.0624673 1754310294.4581003 1754310295.5655785 1754310296.365084 1754310297.6415553 1754310318.1626227 1754310321.7382398 1754310364.1850843 1754310405.4504304 1754317826.9290524 1754317830.7565248 1754317832.2182643 1754317840.799902 1754317843.7951312 1754317852.457583 1754317853.4192817 1754317862.7597876 1754317868.896572 1754317887.399214 1754318775.8339396 1754318779.9629686 1754318783.297025 1754318784.222822 1754318785.2888439 1754318786.5568762 1754318806.1119292 1754318820.514628 1754318827.4494452 1754323040.2911096 1754323045.0321183 1754323051.0663688 1754323054.277648 1754323055.6279497 1754323061.1204603 1754323069.822695 1754323077.3025553 1754323079.2780805 1754323084.750792 1754323667.7419314 1754323668.2115483 1754323672.5697134 1754323673.6980371 1754323675.405283 1754323677.4616768 1754323689.9075372 1754323705.4609141 1754323708.592731 1754323736.7744064 1754326223.9695542 1754326224.8513129 1754326230.1929665 1754326231.4682832 1754326235.9761422 1754326241.1815274 1754326257.2851758 1754326261.3494196 1754326263.654178 1754326283.3476288 1754330387.2604 1754330390.003617 1754330391.219144 1754330400.809656 1754330402.4465642 1754330414.9430423 1754330422.6040044 1754330437.9510179 1754330474.04123 1754334084.6124992 1754334085.1113546 1754334086.7677271 1754334207.156391 1754334209.7791314 1754334212.4710393 1754334216.8630707 1754334335.936511 1754334337.392412 1754334340.5175052 1754334344.0764573 1754334347.05312 1754334349.616821 1754334358.0505111 1754334359.6280644 1754334374.6576247 1754334409.232203 1754394229.9115093 1754394236.1680892 1754394236.9868488 1754394246.1246827 1754394249.1736414 1754394264.3860807 1754394275.5825715 1754394318.6056807 1754394343.5812619 1754569418.2930825 1754569421.837108 1754569423.1742985 1754569425.1570497 1754569425.9239967 1754569438.7803164 1754569459.056397 1754569474.1716316 1754569488.3651893 1754569492.8347008 1754638639.458234 1754638642.5091085 1754638644.0283828 1754638646.775579 1754638651.3673298 1754638652.4136136 1754638668.26929 1754638677.3526635 1754638685.0813951 1754638748.8697855 1754657291.6403043 1754657292.4744985 1754657293.3465893 1754657293.950285 1754657294.4197512 1754657300.9399118 1754657317.3675215 1754657318.825882 1754657323.5254388 1754657377.0663774 1754661010.431923 1754661013.0314443 1754661014.0538993 1754661015.0904381 1754661016.855073 1754661021.683792 1754661031.7809405 1754661044.7760146 1754661095.190606 1754661130.862394 1754665151.962033 1754665156.751902 1754665157.7375376 1754665158.3834746 1754665289.112908 1754665293.585181 1754665294.382669 1754665297.2250502 1754665298.1869934 1754665299.79884 1754665312.295892 1754665321.8710375 1754665407.6290948 1754665429.5629325 1754718004.3929446 1754718008.645443 1754718009.6582825 1754718012.0243857 1754718014.016908 1754718033.9542181 1754718037.3497593 1754718049.4169745 1754718085.8459666 1754836471.9137306 1754836475.0375721 1754836476.062699 1754836486.104762 1754836487.8068762 1754836488.857057 1754836503.0423374 1754836508.6906729 1754836512.319106 1754836547.3170414 1754838744.581556 1754838745.8280544 1754838750.7695951 1754838754.3971465 1754838755.6916676 1754838762.0266268 1754838769.3110466 1754838775.5133567 1754838778.344381 1754838815.906733 1754915022.5220096 1754915028.4145112 1754915041.4452024 1754915058.7874146 1754915063.0782726 1754915064.996402 1754915074.0698926 1754915083.2008886 1754915091.6328013 1754922333.0725238 1754922339.0960412 1754922340.0241008 1754922341.0449069 1754922369.3095813 1754922375.015952 1754922388.706176 1754922397.81592 1754922423.6951694 1754923112.3074675 1754923118.1217208 1754923119.0933652 1754923123.9948857 1754923126.5217292 1754923132.298002 1754923139.7730455 1754923150.893455 1754923160.6324568 1754923223.8065531 1754929456.570865 1754929457.672234 1754929459.015023 1754929462.5595443 1754929490.6316092 1754929502.694461 1754929526.2692955 1754934106.7113538 1754934110.5575802 1754934114.0763226 1754934114.9115584 1754934115.913665 1754934118.5307214 1754934135.6748009 1754934136.9377642 1754934142.065675 1754934146.296465 1754989412.0507722 1754989415.5522845 1754989420.1753516 1754989424.8790295 1754989426.334825 1754989440.0370219 1754989453.069252 1754989456.1419594 1754989475.0667217 1754990713.266655 1754990721.2494721 1754990725.910558 1754990729.4249978 1754990744.5967226 1754990746.6091092 1754990774.8629506 1754990805.56848 1754998738.3181512 1754998741.2028167 1754998743.5358863 1754998748.5763028 1754998754.2024612 1754998769.7436988 1754998771.4340525 1754998792.499069 1754998810.9800005 1755091295.2237508 1755091297.6697185 1755091317.6695251 1755091359.6534734 1755091379.2650094 1755091389.5992413 1755091446.0126197 1755091451.158804 1755091452.5178423 1755092520.1772451 1755092522.9319377 1755092525.882438 1755092528.8732014 1755092535.9946783 1755092542.6943703 1755092551.4624476 1755092565.35118 1755092616.3713923 1755103831.1122003 1755103834.7719872 1755103837.5307035 1755103840.1106188 1755103843.8362675 1755103859.6927347 1755103866.9314835 1755103877.1440673 1755103931.2784662 1755155603.910527 1755155605.1707687 1755155609.4332795 1755155616.694992 1755155620.9042776 1755155640.531146 1755155646.57202 1755155685.840037 1755161637.7376566 1755161641.828701 1755161646.806685 1755161651.1506295 1755161652.0224833 1755161653.3682384 1755161669.3750222 1755161672.1709075 1755161717.191939 1755161725.931677 1755173000.5957315 1755173001.9000506 1755173008.8519778 1755173014.1254952 1755173014.787355 1755173030.2924156 1755173034.162322 1755173048.7866387 1755173086.536405 1755174292.8822558 1755174295.428002 1755174298.603928 1755174302.125032 1755174321.4670026 1755174378.398244 1755174503.4448552 1755185730.874194 1755185734.3135548 1755185741.2811418 1755185744.5252283 1755185760.6697218 1755185771.0018182 1755185792.5674508 1755185810.4147518 1755186662.427318 1755186666.3672824 1755186672.139668 1755186674.701527 1755186676.5207224 1755186682.5460482 1755186686.701402 1755186702.0690258 1755186732.0374315 1755186750.6634238 1755242389.8940303 1755242391.9020832 1755242419.277163 1755242504.6928837 1755242508.6852958 1755242675.5390825 1755242703.2035072 1755242710.6229627 1755242712.8987422 1755242716.3719594 1755519829.5844069 1755519833.5935352 1755519836.9904127 1755519838.9582396 1755519855.558081 1755519860.363573 1755519868.8485646 1755519920.6822896 1755519942.2387319 1755527975.6788986 1755527978.651766 1755527986.416013 1755527988.6062543 1755527991.0238554 1755528001.242443 1755528019.8285203 1755528023.381777 1755528035.2184818 1755528470.930902 1755528476.349847 1755528477.7076178 1755528481.463617 1755528487.8090794 1755528488.694744 1755528509.8624043 1755528518.2550066 1755528537.321938 1755528556.6828933 1755528766.6240294 1755528772.6573496 1755528774.334497 1755528775.8850696 1755528786.5289903 1755528793.721394 1755528806.0284948 1755528811.3382447 1755528822.3104265 1755528858.0835721 1755529302.2824957 1755529309.1301937 1755529309.8924468 1755529313.6042178 1755529314.6411026 1755529320.2343986 1755529329.5999422 1755529369.8951874 1755529397.511248 1755529409.5458014 1755529792.449044 1755529798.3453658 1755529799.4744263 1755529803.6671424 1755529807.9614284 1755529815.5547583 1755529824.5668454 1755529829.2762125 1755529851.870933 1755529893.2305694 1755530370.323989 1755530373.193505 1755530374.3619177 1755530379.4706616 1755530391.7684755 1755530393.832497 1755530398.6746159 1755530408.721917 1755530453.613735 1755542546.745977 1755542553.4601243 1755542557.5791974 1755542560.4875047 1755542562.3357222 1755542575.9021316 1755542587.4253993 1755542606.7538378 1755542620.2706878 1755542679.175511 1755581239.3919017 1755581242.9592192 1755581248.0982115 1755581250.362873 1755581251.9973235 1755581273.6017663 1755581278.112134 1755581279.7596714 1755683205.293422 1755683208.4407446 1755683215.296143 1755683216.3164744 1755683232.1347709 1755683237.1703007 1755683265.6661882 1755683564.564526 1755697365.6706383 1755697367.8462865 1755697368.8814843 1755697372.6754832 1755697374.0597286 1755697406.1362655 1755697408.9832134 1755697466.2167993 1755697471.2026734 1755767335.8241048 1755767337.7761495 1755767341.8543706 1755767346.6528404 1755767360.1526518 1755767365.7380254 1755767369.697219 1755767423.1748812 1755767430.7915325 1755771307.2372272 1755771310.1699429 1755771314.0174656 1755771317.4156752 1755771324.4522014 1755771343.920328 1755771348.0819685 1755771413.535651 1755771426.3374026 1755779051.9380424 1755779058.067354 1755779060.7318432 1755779065.6053112 1755779067.91052 1755779069.9747307 1755779122.3255653 1755779159.1961684 1755779190.2349162 1755781750.1219249 1755781750.584925 1755781753.7838068 1755781760.9929872 1755781775.3233852 1755781777.7456393 1755781790.3588195 1755781816.2886713 1755858351.8479357 1755858354.3661966 1755858355.4653335 1755858360.082173 1755858363.541813 1755858383.3070207 1755858392.2707088 1755858450.284916 1755858453.2151356 1755864810.5204973 1755864817.79521 1755864819.666758 1755864821.992026 1755864827.1484685 1755864830.7505047 1755864836.0561144 1755864904.5799057 1755864911.224088 1755871864.7463403 1755871865.700705 1755871874.3711174 1755871876.8395483 1755871881.203033 1755871888.7127476 1755871899.9997368 1755871916.2245448 1755871917.60044 1755871945.770296 1755872178.8943074 1755872186.983504 1755872191.7687752 1755872194.5346866 1755872196.1832926 1755872205.9670317 1755872214.1981487 1755872276.6107228 1755872284.6054552 1755944928.0758238 1755944929.0181148 1755944932.1404448 1755944934.0511243 1755944950.4044645 1755944961.2118134 1755945024.5262923 1755945120.3629444 1755963202.5901458 1755963203.293085 1755963205.8935375 1755963212.2584286 1755963212.8997407 1755963222.6679978 1755963230.8555262 1755963231.9183908 1755963241.3830926 1755963397.9453433 1755963400.998559 1755963402.6345365 1755963412.4104345 1755963417.763777 1755963422.6026397 1755963428.342291 1755963439.6799586 1755963476.2933767 1755965151.6507125 1755965154.912003 1755965156.7904503 1755965165.3828666 1755965179.8125389 1755965182.3996332 1755965189.1981287 1755965238.6140528 1755966626.6175234 1755966627.3063796 1755966628.7057528 1755966631.0783293 1755966634.8012874 1755966639.2691996 1755966659.2272258 1755966666.8914418 1755966670.3490558 1755966703.7870758 1755967612.8714328 1755967613.6729198 1755967623.4443798 1755967624.2040484 1755967626.7955487 1755967632.0557587 1755967643.0482206 1755967653.0765295 1755967695.3965862 1756033999.6928086 1756034001.3570006 1756034002.3976445 1756034004.5353584 1756034016.0064967 1756034045.3250484 1756034074.433641 1756034081.1165838 1756051679.111972 1756051689.949049 1756051693.1558483 1756051701.8674443 1756051722.2058275 1756051748.804777 1756051758.8889961 1756051774.9322295 1756051775.8245072 1756051782.817306 1756053674.8424118 1756053677.5552804 1756053678.968204 1756053684.7890909 1756053686.1426823 1756053700.0809133 1756053701.17049 1756053703.5803366 1756053714.9610004 1756053753.5441813 1756062146.2249432 1756062152.6544452 1756062152.4811814 1756062154.4658208 1756062156.493738 1756062173.4410543 1756062183.1047323 1756062217.604999 1756062224.9876451 1756063491.1078897 1756063496.6617112 1756063499.3353674 1756063500.3891282 1756063503.8977914 1756063525.9865055 1756063533.080167 1756063579.8505108 1756063582.6323035 1756072129.3400898 1756072135.2731066 1756072141.0665078 1756072153.2953558 1756072160.2601361 1756072169.0772078 1756072343.9998448 1756125211.4906695 1756125212.328387 1756125214.2974348 1756125221.2147803 1756125231.304783 1756125236.0785177 1756125246.1898239 1756125250.4114323 1756125255.384682 1756125338.3665445 1756310081.775399 1756310086.739538 1756310087.4151154 1756310089.4788582 1756310097.465379 1756310116.5951312 1756310123.0403903 1756310195.6180274 1756310307.5799718 1756324792.3303366 1756324793.7887714 1756324794.8563702 1756324803.2106173 1756324806.297542 1756324819.9633186 1756324839.670165 1756324920.9852116 1756324987.3191826 1756482090.2726345 1756482092.8315275 1756482094.2205503 1756482101.1669152 1756482106.640674 1756482107.3221672 1756482111.8609567 1756482118.665951 1756482137.8609233 1756482185.2321236 1756490572.1480975 1756490576.1325092 1756490577.4044735 1756490584.7298954 1756490593.7054727 1756490594.508246 1756490601.077775 1756490608.3319793 1756490613.894025 1756490662.5819 1756492240.1021197 1756492242.534109 1756492246.8966846 1756492248.4405742 1756492254.5134413 1756492264.3207994 1756492285.7777555 1756492308.5999398 1756492341.6097598 1756513583.9886444 1756513607.1972914 1756513623.5006287 1756513652.210149 1756513664.7416515 1756513669.4077144 1756513673.848115 1756513691.6451051 1756513704.0918295 1756513759.4461706 1756543686.9924748 1756543689.312835 1756543690.9100976 1756543692.1223993 1756543701.1993566 1756543701.9120893 1756543719.4618378 1756543755.2614884 1756543768.6995828 1756554646.1878424 1756554651.6421301 1756554652.9530745 1756554658.6524198 1756554661.4308546 1756554667.5288537 1756554669.1511383 1756554676.6495404 1756554680.4736974 1756554709.1258993 1756560284.335863 1756560285.933871 1756560287.908809 1756560291.6384768 1756560292.458672 1756560313.8946424 1756560321.8388882 1756560325.908103 1756560382.8148215 1756563696.9923987 1756563701.9017537 1756563702.811375 1756563703.8906672 1756563714.253635 1756563732.5171704 1756563734.767729 1756563770.182094 1756563775.9456685 1756567983.683949 1756567991.56894 1756567993.1907952 1756567994.3630297 1756567996.010478 1756567998.5305734 1756568016.7985425 1756568019.5493484 1756568024.0831244 1756568066.684337 1756623320.5544336 1756623322.472054 1756623330.1998444 1756623332.9352598 1756623336.381962 1756623337.7754755 1756623352.333162 1756623365.3432426 1756623398.6320612 1756623433.5529215 1756651806.794219 1756651809.4032423 1756651811.7553992 1756651813.037486 1756651831.3541577 1756651840.1121118 1756651875.5639043 1756651893.71908 1756657336.314789 1756657337.6781893 1756657344.0205686 1756657351.4188898 1756657363.845933 1756657365.71656 1756657377.6119764 1756657383.4340963 1756657448.2905917 1756657547.2515292 1756663699.0600624 1756663705.761575 1756663711.437942 1756663712.1873233 1756663716.33332 1756663730.0981581 1756663739.4198246 1756663744.7488353 1756663762.9796426 1756730636.526893 1756730638.7500653 1756730644.7717385 1756730645.640282 1756730647.9443047 1756730669.7771692 1756730680.0643866 1756730854.7317486 1756731005.6253655 1756812461.4234276 1756812463.1158438 1756812466.4828668 1756812467.756903 1756812468.7449336 1756812489.6910367 1756812492.6029148 1756812525.5468075 1756812569.3577304 1756816339.3495305 1756816341.164291 1756816347.0396016 1756816348.348776 1756816352.214036 1756816356.467143 1756816361.6113038 1756816383.0108232 1756816410.4677415 1756816432.5799692 1757250550.4773295 1757250551.1298668 1757250551.9734964 1757250552.757958 1757250555.4748414 1757250560.3880448 1757250581.049149 1757250588.4147136 1757250627.1143572 1757250674.2455492 1757254212.7658505 1757254218.7390375 1757254227.5592763 1757254230.1855805 1757254240.5517533 1757254244.1242387 1757254252.3621862 1757254338.1887016 1757315702.2559307 1757315703.8898485 1757315705.3952873 1757315707.076994 1757315712.250251 1757315726.671891 1757315731.4795449 1757315805.4317906 1757315899.0124006 1757406652.7380905 1757406655.4549916 1757406656.652004 1757406662.530522 1757406685.7777593 1757406689.457919 1757406721.7381837 1757406766.3391576 1757522851.9774354 1757522855.1329193 1757522858.2322128 1757522859.0345004 1757522862.450237 1757522895.4297178 1757522899.6509047 1757522902.0956619 1757522974.9892027 1757593470.624918 1757593473.7091618 1757593479.5218978 1757593500.0183465 1757593502.5605037 1757593545.0526714 1757593634.8489718 1757593642.9991968 1757593801.1162865 1757593855.9368112 1757759851.9401703 1757759854.1618981 1757759857.3359904 1757759861.5839758 1757759862.5584164 1757759869.2156584 1757759896.1262476 1757759898.967808 1757759919.0617156 1757767575.7318823 1757767577.3116324 1757767578.164892 1757767579.7084188 1757767582.4452462 1757767591.6664143 1757767606.1796238 1757767621.7165635 1757767642.8931715 1757767696.8098483 1757860785.381375 1757860785.9220712 1757860789.7567668 1757860791.9484856 1757860793.619363 1757860800.634484 1757860821.7560308 1757860969.2124605 1757860971.2501225 1757860974.089601 1757860983.6230283 1757860995.4606473 1757861005.9285455 1757861115.845992 1757869253.9140117 1757869256.4396024 1757869258.5740275 1757869263.9215944 1757869267.8763661 1757869268.7663534 1757869274.0691543 1757869300.9069545 1757869322.3778484 1757869410.4702916 1757870798.2686443 1757870804.1248548 1757870806.7007651 1757870809.032035 1757870812.0584605 1757870813.2881002 1757870829.2664254 1757870838.5672476 1757870869.525567 1757870905.564141 1758094886.0981183 1758094889.9322498 1758094891.2626927 1758094898.718456 1758094900.569667 1758094915.4495225 1758094922.0363855 1758094952.5641358 1758095013.700299 1758198488.148094 1758198489.796498 1758198490.5393128 1758198495.096042 1758198501.3216105 1758198516.7062492 1758198519.4233909 1758198546.4314828 1758198640.9332113 1758272137.4220994 1758272139.738268 1758272143.227976 1758272156.597657 1758272190.698047 1758272196.0740888 1758272208.9434507 1758272238.1286738 1758272260.6139212 1758272449.394718 1758376904.6455922 1758376932.3074038 1758376948.930031 1758376971.2760975 1758376988.0856025 1758377009.1713164 1758377013.5835123 1758377048.9492967 1758377161.0676274 1758379289.6113198 1758379290.2530682 1758379290.8906834 1758379294.675036 1758379300.961393 1758379317.8066623 1758379323.2454424 1758379382.9791315 1758379436.5179815 1758383797.1264625 1758383803.1973991 1758383804.7967987 1758383807.4729981 1758383816.634885 1758383821.6915572 1758383835.7692916 1758383847.0809147 1758383858.7766733 1758383959.9250615 1758436806.4146972 1758436807.1329958 1758436809.3260841 1758436811.4417937 1758436827.3085277 1758436833.948449 1758436841.838951 1758436892.3199496 1758437202.6245308 1758443980.2173722 1758443983.3484104 1758443984.4110887 1758443990.683742 1758443991.5369225 1758443992.2086768 1758444010.2000234 1758444026.1857007 1758444124.608413 1758444134.7710118 1758465760.986729 1758465762.3181996 1758465764.0645068 1758465765.3632345 1758465787.950925 1758465790.680185 1758465801.6848671 1758465819.947332 1758465892.7116282 1758469620.1688812 1758469622.2927094 1758469623.5728564 1758469626.4591117 1758469627.0488255 1758469658.6069713 1758469665.5531895 1758469694.4000585 1758469756.5381064 1758470108.986735 1758470124.057676 1758470125.9493299 1758470131.5719683 1758470132.0934024 1758470137.9475138 1758470152.9088888 1758470156.1865952 1758470237.0114837 1758470254.5041 1758473686.2613904 1758473687.3080168 1758473689.074438 1758473693.3072124 1758473702.961244 1758473713.9129097 1758473726.2750452 1758473728.0962465 1758473842.3047895 1758789324.575525 1758789326.8829281 1758789331.1484952 1758789336.1290336 1758789346.26325 1758789353.666283 1758789358.8292425 1758789391.3956625 1758789394.393225 1758789579.999567 1758790671.02605 1758790672.8537107 1758790679.772759 1758790689.91073 1758790691.5338035 1758790692.7503328 1758790694.4285848 1758790707.107544 1758790732.2181475 1758790744.552918 1758803421.38217 1758803422.191356 1758803426.5482674 1758803427.662299 1758803428.821401 1758803455.564844 1758803459.5975406 1758803468.6731277 1758803572.6319895 1758987995.8475184 1758987996.6889234 1758988001.7106867 1758988011.6054077 1758988012.5404832 1758988030.3667586 1758988033.3406215 1758988115.726078 1758988277.8816535 1758991548.528388 1758991549.5032086 1758991557.7442715 1758991563.3105981 1758991572.8650045 1758991574.2282062 1758991582.1383522 1758991660.158998 1758991685.4292345 1759149060.2126746 1759149061.0146425 1759149064.611687 1759149067.7415888 1759149073.5355003 1759149094.2505076 1759149129.422489 1759149210.0339108 1759678901.9160364 1759678907.6715856 1759678932.9189944 1759679009.2559366 1759679011.4334173 1759679017.9236014 1759679022.8569818 1759679057.7054338 1759679059.8628235 1759679088.7659316 1759680202.6930416 1759680211.6861782 1759680213.267575 1759680221.0871046 1759680234.2229006 1759680244.7382803 1759680250.0741076 1759680311.640205 1759682581.4376502 1759682582.058753 1759682583.4463851 1759682584.8480828 1759682589.7484057 1759682591.9313192 1759682598.784222 1759682615.6336246 1759682685.3061302 1759682727.9810057 1759997168.5617237 1759997172.2804568 1759997174.3058667 1759997176.6075652 1759997183.6703053 1759997190.440064 1759997200.358024 1759997225.7491734 1759997368.1660178 1760065861.3042967 1760065868.189436 1760065869.2846282 1760065871.4562247 1760065893.879352 1760065900.3684113 1760065918.0518327 1760065963.6096683 1760069079.7001333 1760109020.464128 1760109022.5795572 1760109044.0690029 1760109052.5592253 1760109053.2782536 1760109062.9402142 1760109077.3545287 1760109094.5194438 1760109119.3457763 1760109131.098082 1760110188.1789145 1760110195.7505786 1760110197.687359 1760110199.661814 1760110202.7336934 1760110209.8629327 1760110223.4093578 1760110262.6597283 1760176958.6276183 1760176961.2292545 1760176965.6712897 1760176969.2640572 1760176980.9633286 1760176982.6216314 1760176983.3697286 1760176986.4191535 1760177000.5208561 1760177046.5203931 1760181743.7265334 1760181744.3741639 1760181748.5661814 1760181754.3712742 1760181765.4268498 1760181771.427125 1760181781.9578679 1760181907.003855 1760186961.2749624 1760186963.2880752 1760186972.4420753 1760186977.2224278 1760186977.9336514 1760186982.7370312 1760186983.9564476 1760186986.7875197 1760186989.8342474 1760187116.5768108 1760192063.4595168 1760192069.9260569 1760192071.0044608 1760192075.7647357 1760192078.064715 1760192079.395327 1760192096.9100592 1760192106.8860312 1760192220.910232 1760197171.8456156 1760197176.329728 1760197184.2266924 1760197188.62888 1760197194.3378708 1760197205.5518498 1760197220.2591972 1760197234.3463988 1760197246.756236 1760201835.284966 1760201836.5706768 1760201844.7961292 1760201845.2753227 1760201846.253655 1760201860.5191386 1760201861.6324472 1760201891.4585385 1760201934.3117514 1760203521.6871166 1760203524.4583154 1760203526.1673923 1760203527.7793536 1760203528.6421568 1760203533.0249124 1760203540.580649 1760203558.7832 1760203565.6265962 1760203704.2483034 1760208400.6732097 1760208402.0070264 1760208404.8436205 1760208408.2806673 1760208413.4959168 1760208416.4589143 1760208423.4273822 1760208434.2644088 1760208646.3928986 1760260672.7115512 1760260673.3789666 1760260674.1465495 1760260686.8978753 1760260701.1833951 1760260767.301787 1760260784.846258 1760260786.6696696 1760260797.917884 1760262121.7993038 1760269891.4179525 1760269892.1435916 1760269893.2471051 1760269895.8574095 1760269902.5837235 1760269903.350184 1760269911.580905 1760269926.0960793 1760269976.1379318 1760285301.0387683 1760285304.6327496 1760285306.5802863 1760285311.277028 1760285313.8499649 1760285326.521916 1760285331.085437 1760285333.3500106 1760285484.9395401 1760302085.5402446 1760302086.7340791 1760302092.4930632 1760302093.1862915 1760302097.047335 1760302113.5237918 1760302114.7217674 1760302129.6338432 1760302204.5704675 1760328946.4815428 1760328947.71341 1760328952.97125 1760328953.5222723 1760328956.548482 1760328973.4973283 1760328974.073793 1760328996.5082657 1760329090.1493146 1760347710.922032 1760347720.1702354 1760347724.736095 1760347727.9769988 1760347729.5172718 1760347730.3231437 1760347733.3761768 1760347743.8931594 1760347745.6416194 1760347915.0102088 1760358647.9662585 1760358648.6792915 1760358649.2804878 1760358654.0842292 1760358671.0118513 1760358677.122437 1760358683.546623 1760358718.8457167 1760370390.2076175 1760370391.397971 1760370394.622414 1760370396.471747 1760370407.4859722 1760370425.7107582 1760370426.7731693 1760370541.6130474 1760424893.1850412 1760424894.1859853 1760424895.6856303 1760424898.6068366 1760424902.0461578 1760424913.1799345 1760424917.4821265 1760424921.1070764 1760425021.3093822 1760743146.793899 1760743150.532634 1760743152.9184196 1760743156.833466 1760743157.5592577 1760743161.1552167 1760743171.198314 1760743175.1721282 1760743217.3190475 1760786575.1475165 1760786580.451427 1760786585.9220862 1760786592.0383992 1760786597.66885 1760786599.3244073 1760786612.9410458 1760786685.614658 1760786711.8526483 1760788122.718024 1760788130.2036352 1760788131.7925465 1760788133.8885221 1760788138.6973095 1760788141.6066995 1760788165.2763598 1760788262.0012178 1760793264.967267 1760793271.4599068 1760793272.682385 1760793279.1230643 1760793284.9563894 1760793289.1663685 1760793292.1584153 1760793320.8553169 1760793519.0003898 1760793524.6424658 1760793526.575326 1760793529.069538 1760793532.6066246 1760793537.5595367 1760793544.3480856 1760793560.866959 1760793674.0022 1760860124.4421682 1760860126.1444528 1760860133.036754 1760860145.1253457 1760860150.0040295 1760860157.6127007 1760860213.5287194 1760860254.2642376 1760860261.6253562 1760860413.0565133 1760869223.0697606 1760869226.7882934 1760869231.149606 1760869240.8386393 1760869244.1520154 1760869246.3574295 1760869254.6131852 1760869268.0096996 1760869301.3809862 1760869573.2066333 1760869576.4536045 1760869581.78191 1760869584.255531 1760869588.763384 1760869589.75701 1760869598.6541889 1760869601.4438689 1760869610.7774029 1760869698.1974425 1760938815.440873 1760938815.8425229 1760938822.7376003 1760938831.250733 1760938833.930654 1760938835.1285305 1760938835.796545 1760938843.6164384 1760938860.5747712 1760972532.9978673 1760972534.3429718 1760972540.7126017 1760972545.0473254 1760972554.6597133 1760972555.7788084 1760972557.0478446 1760972580.0633926 1760972657.9048338 1761060369.5720823 1761060374.0631437 1761060380.4744687 1761060381.3302562 1761060383.1159825 1761060385.4865553 1761060395.3019264 1761060581.2982967 1761060585.6111755 1761060590.0977602 1761060591.2101505 1761060593.1073785 1761060598.4627094 1761060618.359523 1761060624.4569325 1761060729.5115902 1761144853.0819714 1761144856.689801 1761144857.4272952 1761144857.989736 1761144859.7585185 1761144861.2797425 1761144880.3253202 1761144889.7398975 1761144947.037287 1761148048.739978 1761148050.631192 1761148052.721287 1761148054.8056633 1761148059.5820656 1761148063.3975248 1761148087.5545166 1761148090.5621092 1761148131.0594964 1761148229.1727126 1761212441.3152373 1761212442.0500846 1761212448.6663396 1761212456.9727566 1761212465.1971743 1761212471.6861997 1761212512.632466 1761212517.142052 1761212536.051563 1761212571.3813605 1761217281.3986537 1761217306.1535387 1761217313.6426508 1761217320.8573422 1761217330.3046353 1761217334.2626648 1761217357.7038624 1761217376.540221 1761217381.1343498 1761217475.373226 1761219269.170714 1761219276.183937 1761219278.1303427 1761219281.116449 1761219283.073473 1761219287.7204525 1761219309.497512 1761219312.9766653 1761219332.7687204 1761222439.838213 1761222442.6421044 1761222451.2844505 1761222453.0715046 1761222456.7843916 1761222458.6897311 1761222471.0094128 1761222480.8025346 1761222485.4113288 1761222529.244105 1761295100.522707 1761295102.4320357 1761295103.7916367 1761295111.0924425 1761295112.4658391 1761295118.298571 1761295128.6002736 1761295138.7218268 1761295176.1645088 1761311464.8069572 1761311466.517216 1761311469.0799317 1761311469.693539 1761311471.3626993 1761311472.9784894 1761311481.0966003 1761311498.1026597 1761311500.2232938 1761311525.0575533 1761383754.5454621 1761383757.3220978 1761383761.223058 1761383761.8817794 1761383769.4942296 1761383771.735202 1761383775.1095457 1761383780.9610267 1761383821.0147321 1761383893.7472773 1761408662.3846736 1761408664.6186817 1761408666.5762887 1761408667.3478622 1761408675.0225043 1761408677.9694781 1761408680.248723 1761408699.4657342 1761408707.8276389 1761408834.6558533 1761470753.6233206 1761470755.1946387 1761470760.2358305 1761470765.7691329 1761470774.8850012 1761470778.1507916 1761470784.4810855 1761470787.0317824 1761470798.0484314 1761470913.4951358 1761501822.1993885 1761501828.0765977 1761501834.5608828 1761501837.3458037 1761501842.1671865 1761501842.6012266 1761501849.8652487 1761501854.5500402 1761501944.6396515 1761568585.206552 1761568594.6564615 1761568597.3226542 1761568598.3210044 1761568600.2232356 1761568618.5227046 1761568630.444256 1761568663.0719657 1761568779.782653 1761568887.4298677 1761579967.571521 1761579969.10766 1761579970.350306 1761579975.7025917 1761579985.395596 1761579988.7035441 1761580001.1484468 1761580005.97187 1761580032.0797098 1761732621.0596154 1761732622.4862742 1761732624.583479 1761732641.1949139 1761732643.8280423 1761732667.5962641 1761732678.8320563 1761732708.341875 1761732739.0964832 1761732741.0047672 1761733333.6166253 1761733340.287924 1761733344.3041735 1761733349.9582686 1761733355.0360234 1761733363.931928 1761733369.92241 1761733497.7672007 1761733499.7289472 1761733502.6771982 1761733505.561072 1761733522.8919158 1761733524.7920578 1761733526.7814734 1761733536.03033 1761733559.1054711 1761733973.2625349 1761733974.8804538 1761733975.8670855 1761733983.4152267 1761733984.5874498 1761733985.617361 1761734000.0249293 1761734016.5178993 1761734058.1966867 1761739154.979861 1761739160.741309 1761739163.0372496 1761739165.1003692 1761739176.9402776 1761739183.5748458 1761739190.8559542 1761739198.0391276 1761739224.2763262 1761739651.787256 1761739659.5065682 1761739661.7434552 1761739662.7944498 1761739672.0530784 1761739674.6446283 1761739681.3101513 1761739881.4297092 1761753515.4783666 1761753519.595589 1761753528.9743803 1761753531.3077066 1761753532.3792512 1761753543.5615988 1761753555.2167263 1761753821.0167503 1761756820.567883 1761756822.7604883 1761756824.7155573 1761756829.902521 1761756831.3815246 1761756839.1349351 1761756844.7806425 1761756851.6347315 1761756864.8949487 1761757084.5832186 1761783971.8902345 1761783975.955501 1761783979.7629645 1761783982.5048652 1761783984.0125172 1761783994.9253206 1761784007.3848386 1761784007.9892821 1761784116.5959563 1761812842.0582845 1761812842.858573 1761812850.7051184 1761812853.665147 1761812856.4933705 1761812862.5699618 1761812863.5919237 1761812871.8366818 1761812980.4047241 1761813109.5922022 1761813119.0922732 1761813120.0996842 1761813125.9788857 1761813136.455482 1761813137.3587613 1761813144.156814 1761813404.6076884 1761815250.9121108 1761815253.333122 1761815261.2016864 1761815266.7144861 1761815274.8910897 1761815283.2405734 1761815285.803323 1761815313.78364 1761815315.6396675 1761816551.8261442 1761816556.620063 1761816560.7388778 1761816561.7038183 1761816563.653961 1761816571.7262235 1761816598.5983844 1761816603.679053 1761816616.107075 1761816982.505621 1761816983.3680015 1761816992.1575406 1761816995.186787 1761816996.6600037 1761816998.3273346 1761817012.2697558 1761817021.7558877 1761817048.4622328 1761818678.486974 1761818680.3207557 1761818683.0676215 1761818683.7666762 1761818696.0210476 1761818706.5787892 1761818717.8600068 1761818723.6918113 1761819171.0990624 1761828198.7066338 1761828202.5303748 1761828210.6003237 1761828231.9966207 1761828235.4440167 1761828238.9658937 1761828285.0829797 1761828339.8987975 1761828348.659788 1761828407.4981537 1761838695.6500044 1761838696.3330994 1761838699.4536595 1761838700.7025476 1761838710.6912897 1761838719.1276152 1761838856.688787 1761838862.4126012 1761838866.7453022 1761838872.676898 1761838876.31469 1761838881.1648023 1761838882.255903 1761838886.8290792 1761839034.2050247 1761839036.4394672 1761839041.3663592 1761839045.8587894 1761839046.9232655 1761839058.9090395 1761839063.191618 1761839064.4754827 1761839100.7322073 1761903364.8073344 1761903366.282132 1761903369.2671845 1761903373.6632118 1761903396.633601 1761903401.9476395 1761903425.4567928 1761907794.4028182 1761907798.267677 1761907802.7829356 1761907806.6542995 1761907808.755848 1761907810.6964827 1761907819.1398387 1761907819.9082677 1761907831.778921 1761907861.5249884 1761916175.7201128 1761916181.8167076 1761916183.6725361 1761916186.4976492 1761916188.5812843 1761916206.4783504 1761916210.9515936 1761916239.7759252 1761916244.5611362 1761916256.3694642 1761918708.0654619 1761918709.2721436 1761918710.4901214 1761918711.0832524 1761918717.9547687 1761918725.1858885 1761918729.5807498 1761918732.4273076 1761918748.7229514 1761918784.7492945 1761924853.904902 1761924930.7075958 1761924931.704748 1761924936.018988 1761924936.6370103 1761924950.064064 1761924951.2240555 1761924952.1859083 1761924964.102679 1761925061.6673362 1761931328.381721 1761931362.0425394 1761931366.6559973 1761931387.689871 1761931395.9854743 1761931443.699999 1761931449.67774 1761931483.457332 1761931525.4132876 1761932426.3424194 1761932438.22436 1761932440.9574938 1761932444.2187312 1761932445.4122531 1761932446.3095675 1761932449.411533 1761932450.8779695 1761932458.8442442 1761932554.581199 1761943206.0485408 1761943208.721901 1761943209.7145672 1761943231.8070157 1761943250.5338347 1761943258.9555643 1761943286.6451633 1761943316.8918748 1761943325.365103 1761943902.1533275 1761943904.2363207 1761943911.0530365 1761943911.9343462 1761943916.8543684 1761943929.6059718 1761943932.7973747 1761944032.3762949 1761972625.1348531 1761972631.2784424 1761972634.7716472 1761972636.1866002 1761972650.59014 1761972658.7792203 1761972697.2746897 1761998643.266348 1761998644.9597728 1761998651.870806 1761998655.6946402 1761998657.3297527 1761998675.5200093 1761998686.3667939 1761998782.1904857 1762002372.3393233 1762002383.5091453 1762002456.6738017 1762002463.6045744 1762002478.2381296 1762002483.4908178 1762002496.9344296 1762002503.075543 1762002641.5141308 1762003784.2051804 1762003786.6937287 1762003787.9662147 1762003804.7873077 1762003807.2316003 1762003818.263784 1762003867.0438159 1762004551.510921 1762004553.6924763 1762004560.7829566 1762004563.0963054 1762004565.8813064 1762004570.809282 1762004582.4673772 1762004704.970945 1762010469.8733897 1762010474.2603297 1762010480.9687178 1762010485.2649827 1762010489.78939 1762010505.1184232 1762010569.005523 1762011149.9099917 1762011151.630804 1762011153.7875993 1762011157.8205986 1762011159.814798 1762011164.3464637 1762011175.4887507 1762011192.3388321 1762011314.9134667 1762016545.3331056 1762016553.595649 1762016558.990784 1762016562.646232 1762016564.002207 1762016579.8990319 1762016585.4553425 1762016599.7099645 1762016717.1077857 1762016882.2061126 1762016885.560252 1762018726.31528 1762018727.0032678 1762018734.9585347 1762018738.825398 1762018743.6514335 1762018754.7986135 1762018765.327472 1762018870.7137697 1762020052.1141596 1762020057.0351884 1762020059.9044833 1762020065.3989885 1762020067.811667 1762020076.477097 1762020079.396898 1762020091.510058 1762020115.2351296 1762071057.9529824 1762071063.6751099 1762071066.499017 1762071067.3919523 1762071073.8159995 1762071091.9804113 1762071107.408353 1762071263.8868177 1762101819.8454258 1762101824.7539666 1762101829.8303137 1762101831.1636562 1762101838.2514503 1762101841.9861197 1762101853.6021614 1762101861.0454462 1762101911.296313 1762105806.2418687 1762105843.1352499 1762105848.6053684 1762105849.3388176 1762105857.7725208 1762105890.6376925 1762105928.2757473 1762105944.803276 1762105971.790727 1762108123.201678 1762108128.0310478 1762108135.0505812 1762108146.1856859 1762108155.7639487 1762108157.3915591 1762108167.899605 1762172555.87825 1762172564.126668 1762172577.4182642 1762172591.5535257 1762172618.802497 1762172627.0197368 1762172671.4228137 1762172710.2156913 1762172716.7204862 1762182285.9299097 1762182288.5652134 1762182291.2938004 1762182293.269225 1762182294.2326968 1762182303.8357842 1762182306.2251508 1762182321.2300313 1762182430.8417692 1762184529.1819077 1762184536.512359 1762184537.1591082 1762184537.760621 1762184539.0728261 1762184554.332873 1762184568.5305755 1762184589.301031 1762184609.7697651 1762200904.005787 1762200907.18115 1762200913.502514 1762200914.23389 1762200917.573258 1762200921.9871643 1762200928.988474 1762200931.0818367 1762200967.8282592 1762209280.490971 1762253101.193741 1762253107.0873806 1762253110.1899955 1762253115.4174728 1762253129.0361514 1762253133.7874737 1762253162.8910217 1762253182.9230866 1762253184.2797866 1762260330.9593165 1762260333.0245092 1762260339.4750998 1762260341.6916134 1762260343.3884668 1762260348.187566 1762260355.5107586 1762260363.932035 1762260505.9395063 1762287891.7447214 1762287897.3504825 1762287900.7250962 1762287906.7337685 1762287908.2938457 1762287909.971187 1762287927.4461327 1762287984.259216 1762422474.7089126 1762422475.465572 1762422482.2303576 1762422486.473266 1762422488.7677093 1762422489.7465184 1762422497.7767348 1762422511.8179455 1762422593.4148452 1762436140.7360206 1762436146.750907 1762436148.420587 1762436149.0124712 1762436151.6360707 1762436164.3627691 1762436166.0090265 1762436216.9200459 1762522496.3923283 1762522499.0286534 1762522500.3733065 1762522500.8749893 1762522502.2203865 1762522503.506489 1762522524.1964445 1762522526.187269 1762522572.350876 1762604641.8171883 1762604642.384963 1762604643.5394833 1762604652.4941573 1762604663.9734704 1762604681.0171967 1762604706.881941 1762604717.9407048 1762604738.9008565 1762616292.5187433 1762616350.6337602 1762616377.5028427 1762616440.264139 1762616453.3365035 1762616457.5079691 1762616461.5424132 1762616478.7812738 1762616616.4936285 1762621980.1461287 1762621980.8402362 1762621985.1854296 1762621987.6974733 1762621989.4274623 1762621992.8795457 1762621995.4352868 1762622132.197382 1762622133.042379 1762622142.6368914 1762622143.8745382 1762622146.6899445 1762622156.4792702 1762622157.5314913 1762622204.3318274 1762622591.3178737 1762622593.5971794 1762622596.546724 1762622598.5373664 1762622614.1202447 1762622617.400571 1762622636.2234461 1762622636.7881298 1762622682.3763316 1762623186.3071823 1762623189.6776576 1762623193.4851882 1762623195.928299 1762623199.3596818 1762623201.9214406 1762623205.9429522 1762623215.2832174 1762623330.8150814 1762685883.0941963 1762685903.8723197 1762685927.283401 1762685936.761773 1762685958.2256646 1762685984.6082613 1762685999.784007 1762686016.7443185 1762686040.941506 1762686604.1537943 1762686605.0731802 1762686607.4993882 1762686618.869133 1762686620.846673 1762686632.4037566 1762686636.965218 1762686660.1538556 1762687486.9320269 1762687504.2483954 1762687507.263849 1762687513.4480598 1762687513.9274237 1762687521.5279539 1762687523.2285419 1762687632.7838094 1762687713.467016 1762689993.6343405 1762689998.1456513 1762690000.826434 1762690006.796545 1762690010.5455694 1762690014.0553174 1762690023.0149443 1762690026.3884199 1762690050.6457598 1762690601.9759095 1762690603.5830753 1762690604.9104593 1762690617.4960287 1762690618.9582949 1762690621.2141972 1762690624.0565562 1762690635.8852017 1762695377.9534924 1762695379.8920557 1762695387.0601099 1762695389.252808 1762695390.468865 1762695402.8316972 1762695499.562626 1762695529.2544737 1762709105.3129528 1762709108.0436068 1762709117.5377827 1762709118.5359573 1762709127.5769272 1762709128.4510138 1762709132.7309337 1762709163.794322 1763297062.6462157 1763297063.718993 1763297064.156321 1763297066.0391867 1763297069.557291 1763297080.286124 1763297086.3967721 1763297087.650356 1763299191.865496 1763299192.9348702 1763299198.4212236 1763299199.801592 1763299204.5713706 1763299209.050733 1763299219.0118797 1763299227.9297895 1763302380.1910982 1763302382.197532 1763302383.6581008 1763302392.1376574 1763302398.1155136 1763302403.0585613 1763302407.618657 1763302416.5956852 1763302419.1865063 1763302793.966636 1763302795.4213364 1763302797.1293983 1763302797.9772894 1763302801.348963 1763302803.8687665 1763302810.6713228 1763302816.0434008 1763302819.5563455 1763303612.8964972 1763303614.4866087 1763303617.5355716 1763303620.0610914 1763303622.02864 1763303626.9398384 1763303630.710819 1763303638.1577716 1763303643.232244 1763308113.9014347 1763308122.4819312 1763308140.4671648 1763308145.2055862 1763308146.7704184 1763308168.3040445 1763308181.1838708 1763308182.6945477 1763308218.14928 1763382992.5026288 1763382994.5812373 1763383067.165341 1763383082.5999503 1763383088.843485 1763383110.3557034 1763383170.7782712 1763383210.6378741 1763383246.8616576 1763386839.210291 1763386839.9151208 1763386844.3694417 1763386848.766369 1763386849.4183211 1763386850.6483958 1763386855.4940298 1763386862.358006 1763386867.5119295 1763389241.0266955 1763389285.7207963 1763389309.7197878 1763389314.1105762 1763389321.9944794 1763389335.3969219 1763389381.59872 1763389386.467899 1763389390.7888556 1763546239.090256 1763546239.7797186 1763546252.0421507 1763546253.0514424 1763546255.3455715 1763546265.2387855 1763546269.9594424 1763546272.4304173 1763642042.9531288 1763642044.3326356 1763642048.0169668 1763642049.6969402 1763642057.2456183 1763642064.7353468 1763642065.2131665 1763642073.5537636 1763642080.0179844 1763659926.9954894 1763659930.3687325 1763659935.5686922 1763659937.5839558 1763659958.96232 1763659963.6969051 1763660103.7222788 1763660120.1527593 1763660133.9003205 1763789923.6157908 1763789934.517366 1763789942.4983094 1763789954.7262015 1763790034.771286 1763790041.4361985 1763790045.903533 1763790079.5756056 1763795168.8845222 1763795172.1928253 1763795173.0381145 1763795180.4388633 1763795182.2695243 1763795185.2208147 1763795201.8603241 1763795207.6413875 1763919853.1434977 1763919863.9553008 1763919864.5607672 1763919866.6655488 1763919871.3080835 1763919880.8117497 1763919882.552756 1763920697.2940915 1763952872.7848387 1763952876.492404 1763952879.5763636 1763952881.379629 1763952884.1267953 1763952890.6836202 1763952892.4930377 1763952893.4756386 1763987125.6737487 1763987126.725239 1763987144.1404214 1763987154.748037 1763987199.961115 1763987216.088118 1763987231.719802 1763987310.7274327 1763987366.2468972 1764011072.3707397 1764011072.9961948 1764011077.8855467 1764011079.9896512 1764011083.0571504 1764011090.3551934 1764011100.6690629 1764011915.3394165 1764218186.5586534 1764218189.3324022 1764218190.2522562 1764218204.7683747 1764218208.701724 1764218210.0649126 1764218218.7979891 1764340315.2158823 1764340321.8420427 1764340324.050802 1764340327.1663163 1764340329.2468398 1764340332.0343747 1764340335.1212754 1764360876.3445911 1764360884.9453511 1764360899.9534636 1764360901.9353132 1764360905.4604099 1764360906.0657322 1764360950.4120343 1764361027.9019718 1764361037.5838752 1764363073.981725 1764363075.6741886 1764363079.0219173 1764363095.41827 1764363098.2861693 1764363124.3888063 1764363142.6363301 1764363219.1545677 1764363241.7134886 1765187032.8380136 1765187035.453364 1765187042.338773 1765187044.5671895 1765187045.9196754 1765187047.8885398 1765187051.2035475 1765187058.7123928 1765187060.6759374 1765355427.1373546 1765355428.2110195 1765355429.8868406 1765355444.2209935 1765355448.3313894 1765355449.6444044 1765355463.7727923 1765355509.568022 1765360614.6304975 1765360627.278244 1765360699.6176698 1765360700.3069332 1765360702.7569158 1765360727.5694447 1765360734.068348 1765360738.853782 1765360751.4475017 1765365473.0148964 1765365476.4291492 1765365477.6918364 1765365485.5428207 1765365488.3033526 1765365496.4341197 1765365499.204723 1765365501.9174285 1765365509.546715 1765557509.2392964 1765557517.8780813 1765557523.434449 1765557525.9953475 1765557530.5092058 1765557550.3774416 1765557576.56148 1765557638.3009307 1765634922.4164693 1765640546.4406013 1765640555.8154743 1765640569.9443984 1765640571.8285775 1765640589.8454623 1765640597.2192576 1765640600.685116 1765640601.791428 1765643204.8700292 1765643206.6251795 1765643210.194346 1765643213.5972345 1765643216.0359607 1765643223.1245673 1765643235.8558447 1765643236.6084464 1765643237.377273 1765643461.6558518 1765643465.6197562 1765643468.7124977 1765643470.595265 1765643471.002281 1765643474.730295 1765643477.3206208 1765643484.8833282 1765644898.6106436 1765644899.5319552 1765644904.2567694 1765644907.0171332 1765644907.4870572 1765644909.9574072 1765644922.176685 1765644923.162431 1765644925.752624 1765650682.681714 1765650807.9693182 1765650812.0510752 1765650814.6558144 1765650815.0367496 1765650815.822579 1765650817.1819093 1765650840.9738505 1765650841.5835085 1765723890.041584 1765723901.878552 1765723913.9920568 1765723940.7441728 1765723953.6822717 1765723965.2455328 1765723975.6101594 1765723981.7978325 1765723998.121029 1765801572.220802 1765801586.4000347 1765801589.783504 1765801601.659667 1765801611.0200794 1765801676.5740016 1765801689.931427 1765879653.3422017 1765879654.6520367 1765879655.818434 1765879665.157804 1765879674.2655952 1765879727.529927 1765879740.0749133 1765879756.2488542 1765879767.9327204 1765880050.2235658 1765881066.7586555 1765881071.0245862 1765881071.5761216 1765881074.3021216 1765881077.7869434 1765881082.084883 1765881098.7095683 1765881099.5209198 1765890220.8121464 1765890223.076022 1765890229.5600839 1765890230.3226686 1765890234.1518707 1765890234.8996077 1765890240.9570239 1765890254.1053715 1765904461.6480265 1765904469.4855177 1765904473.118679 1765904476.6461954 1765904481.4827998 1765904482.7578373 1765904571.3059204 1765904580.1127 1765904624.410078 1766060957.0203218 1766060959.152164 1766060969.126864 1766060969.7474778 1766060987.2880044 1766060989.7890246 1766061003.9739647 1766061014.4612226 1766125832.056241 1766125835.0174904 1766125842.5458252 1766125847.860071 1766125850.0030906 1766125862.1761515 1766125863.6121485 1766125866.3684192 1766175187.6213129 1766175189.7560964 1766175192.2463057 1766175198.3198903 1766175203.6143293 1766175217.1426938 1766175278.720896 1766175281.0863192 1766925258.8068514 1766925261.8128085 1766925263.4731135 1766925264.5417693 1766925273.9132488 1766925280.2520475 1766925286.0638998 1766925295.908001 1766996858.593534 1766996859.3148115 1766996862.3900332 1766996863.9632237 1766996866.002261 1766996937.9445057 1766996946.8544555 1766996953.7118356 1766996998.3924599 1767005750.2315245 1767005752.713343 1767005753.7751043 1767005757.1741123 1767005760.8929029 1767005762.1786122 1767005765.7549138 1767005778.0547214 1767008189.6399276 1767008192.654333 1767008193.6334174 1767008194.1320896 1767008208.67269 1767008238.5539753 1767008258.371955 1767008359.6306872 1767008476.939767 1767008478.8546765 1767008479.2277246 1767008487.6395764 1767008494.452409 1767008496.4467835 1767008503.1518207 1767008505.3925378 1767008664.5282934 1767008670.6300914 1767008679.8526978 1767008681.2375803 1767008682.3679552 1767008686.4423952 1767008695.2620165 1767008696.4385452 1767008704.9496138 1767009731.1481624 1767009736.6050348 1767009738.860095 1767009741.8063154 1767009743.983117 1767009746.3949685 1767009758.005734 1767009765.2569134 1767010364.389463 1767010368.3234975 1767010376.3448942 1767010377.593191 1767010504.9921572 1767010505.7261412 1767010510.4794931 1767010512.9828248 1767010527.2291083 1767010529.7752872 1767010535.682247 1767013234.505958 1767013236.1389487 1767013238.1251016 1767013241.8454356 1767013242.544342 1767013247.3394504 1767013252.5731487 1767013256.2700813 1767013268.1770554 1767014261.9281383 1767014266.5664349 1767014267.77517 1767014285.8610258 1767014294.4500647 1767014298.7737455 1767014357.5287437 1767014364.8542192 1767014365.1898136 1767015032.0413318 1767015036.6794896 1767015037.0758255 1767015038.859089 1767015043.0507755 1767015043.795858 1767015058.7398818 1767015095.810186 1767015154.788291 1767016332.7769127 1767016341.7485373 1767016342.9278643 1767016343.4213676 1767016348.1831532 1767016356.9269874 1767016359.0096195 1767086066.2820609 1767086068.4097233 1767086104.5986426 1767086129.9135897 1767086146.020534 1767086154.2456412 1767086191.4983408 1767086194.8544183 1767086207.8455625 1767091900.6769624 1767091903.20487 1767091907.0771337 1767091911.2956107 1767091912.657855 1767091913.5171046 1767091917.2010088 1767091917.9127343 1767091923.4502337 1767092144.3763077 1767092144.6971657 1767092149.4341872 1767092150.4952488 1767092152.413446 1767092154.7418704 1767092167.4040303 1767092176.555279 1767092757.8919811 1767092759.227804 1767092761.611345 1767092765.8312247 1767092766.121263 1767092767.1874857 1767092779.6019578 1767092785.9529996 1767092787.807154 1767093406.5766206 1767093411.6432137 1767093416.292331 1767093416.841238 1767093420.1784983 1767093428.7357821 1767093430.451345 1767093437.9603465 1767270196.5264738 1767270198.6590161 1767270199.2853298 1767270202.7026517 1767270205.0109453 1767270212.2577412 1767270213.599389 1767270219.447361 1767270237.6540856 1767408777.352056 1767408779.8253002 1767408783.4031243 1767408786.606049 1767408792.9385245 1767408806.0961204 1767408808.6286788 1767450463.487253 1767450468.0185769 1767450469.3266888 1767450477.658307 1767450479.7213383 1767450487.8546865 1767450494.1723776 1767450504.1038587 1767523570.7468324 1767523573.4585876 1767523575.5568817 1767523578.0597918 1767523579.9227304 1767523580.686402 1767523584.8810203 1767523598.5700417 1767523599.3585181 1767524360.418623 1767524367.86007 1767524370.6017756 1767524371.3623307 1767524373.1854727 1767524377.3173368 1767524383.0169208 1767524387.166389 1767526612.655363 1767526620.893646 1767526666.0753863 1767526741.7127984 1767526760.5003262 1767526761.18435 1767526781.8502042 1767526808.215066 1767526846.9572792 1767540381.7925 1767540385.6660693 1767540389.1432114 1767540390.0299299 1767540391.0120437 1767540392.6561732 1767540396.2349198 1767540400.0953155 1767540407.0494602 1767603125.4719348 1767603129.6360354 1767603132.9295096 1767603136.400303 1767603139.1755438 1767603142.2036078 1767603146.9356022 1767603158.5485249 1767608453.8039553 1767608457.8362336 1767608473.1001418 1767608488.1931834 1767608525.184708 1767608547.776067 1767608574.4276385 1767608589.07131 1767608625.029423 1767609758.056628 1767609766.2764363 1767609770.6267624 1767609774.770277 1767609783.1370986 1767609784.4607327 1767609785.6430619 1767779970.3057816 1767779971.8273609 1767779974.343106 1767779975.9782546 1767779977.4753609 1767779978.2106094 1767779987.0569248 1767779988.502298 1767779992.3459094 1767781824.669599 1767781826.8218884 1767781830.172712 1767781832.6331336 1767781833.5870175 1767781838.157459 1767781849.438812 1767781855.110409 1767781856.0296986 1767783173.776942 1767783174.918709 1767783178.598568 1767783183.0167508 1767783185.1235716 1767783187.9137797 1767783190.6841505 1767783192.9388943 1767783194.3727446 1767789950.2846448 1767789950.780807 1767789951.7242458 1767789952.1188505 1767789954.9040453 1767789958.2523339 1767789964.9183238 1767789971.6630306 1767789988.1764913 1767794790.8767462 1767794797.9905484 1767794799.6897795 1767794800.677061 1767794803.3192046 1767794804.7557886 1767794810.129956 1767794817.6165998 1767794881.6264374 1767797113.9344013 1767797117.1024604 1767797119.4598038 1767797124.4368665 1767797125.005286 1767797125.6584253 1767797129.4499178 1767797142.6675413 1767804596.0774035 1767804597.0101094 1767804601.0117264 1767804601.8242528 1767804608.4628296 1767804615.409722 1767804626.2616994 1767804628.0655315 1767805286.2890604 1767805290.1657245 1767805294.8932576 1767805298.5421705 1767805300.1252146 1767805310.2346702 1767805311.8608637 1767806446.308764 1767806447.263031 1767806448.0307293 1767806449.6280806 1767806453.1115158 1767806455.2822442 1767806464.841296 1767806470.414619 1767806472.2149243 1767862534.1300757 1767862537.0822213 1767862538.015854 1767862540.5166407 1767862541.1621358 1767862543.53903 1767862548.4412358 1767862552.0026646 1767862559.5569992 1767875049.769152 1767875056.1616 1767875057.091702 1767875057.7781708 1767875063.8182845 1767875067.8484592 1767875072.015592 1767875084.231258 1767876200.634965 1767876205.9777443 1767876210.1790633 1767876211.1054254 1767876216.819659 1767876222.141576 1767876406.389355 1767876441.8357987 1767876482.82653 1767876492.9608855 1767876495.5181966 1767876505.5005298 1767876518.0242822 1767876543.5972047 1767876623.2839305 1767878590.5782363 1767878597.0823655 1767878600.7762733 1767878602.9763505 1767878607.4425566 1767878610.740943 1767880829.6364706 1767880836.354983 1767880837.814495 1767880838.7678552 1767880844.222659 1767880847.8437169 1767880853.18519 1767880861.3127449 1767880864.864189 1767886085.2988107 1767886100.009519 1767886110.4870822 1767886157.126238 1767886211.455036 1767886227.9047942 1767886239.5314128 1767886248.4401996 1767886269.623906 1767887877.780074 1767887879.653932 1767887883.437103 1767887884.8039067 1767887888.9499557 1767887890.333735 1767887897.9374743 1767887900.5198562 1767887902.473257 1767888586.8256478 1767888590.6860585 1767888592.5849898 1767888594.1425657 1767888596.96389 1767888598.0899355 1767888610.4946456 1767888611.4842644 1767888621.0345175 1767894668.1983907 1767894670.6740375 1767894672.3232863 1767894676.8063247 1767894680.8864522 1767894687.7080142 1767894691.1440587 1767894693.037532 1767894706.8682427 1767896385.028477 1767896385.6117723 1767896393.1601806 1767896394.332155 1767896396.101103 1767896400.9222782 1767896402.012056 1767896409.3551488 1767896414.0472367 1767954456.721825 1767954463.118075 1767954466.2569473 1767954467.282363 1767954471.615229 1767954472.5900018 1767954479.6348743 1767954481.8718064 1767954485.2681139 1767965138.1393619 1767965143.4655793 1767965147.434867 1767965148.9427965 1767965156.3537724 1767965167.2213993 1767965169.49993 1767970290.6593683 1767970292.970802 1767970298.57375 1767970299.585969 1767970337.0942743 1767970372.4892268 1767976666.6998365 1767976673.101222 1767976675.6020813 1767976679.096784 1767976683.9167645 1767976687.3609555 1767976713.1541333 1767976719.0766773 1767976725.1059823 1767978117.2996187 1767978120.0221531 1767978122.7937603 1767978123.5929458 1767978129.2806196 1767978141.6026158 1767978142.2001743 1767978146.1618307 1767979940.4418714 1767979943.6162307 1767979945.0338674 1767979946.6955743 1767979949.2711825 1767979955.3020587 1767979962.6219144 1767979967.7086596 1767982298.8471909 1767982300.1005816 1767982303.920526 1767982307.4450893 1767982311.7769759 1767982313.248131 1767982316.173381 1767982324.9440858 1767982325.6764736 1768045869.2330077 1768045870.236356 1768045872.2891514 1768045874.5468063 1768045881.3387985 1768045884.8452904 1768045889.1161494 1768045897.4951403 1768045902.8267422 1768048025.6877735 1768048027.7286327 1768048029.5608556 1768048032.5990238 1768048044.1846335 1768048050.7798657 1768048062.4111714 1768048065.024833 1768053088.504781 1768053113.4159126 1768053117.7720275 1768053144.3447492 1768053146.5680668 1768053147.6142244 1768053159.8059928 1768053169.9699647 1768053172.8624737 1768053292.9160326 1768053294.911726 1768053296.1000555 1768053299.749482 1768053300.7807405 1768053302.7820969 1768053313.845262 1768053317.4048727 1768053330.3916922 1768053588.9192967 1768053589.8108206 1768053595.3978446 1768053614.1973078 1768053615.303289 1768053615.9164264 1768053627.2831788 1768053639.0435984 1768056937.9889069 1768056943.7953987 1768056976.7951229 1768057046.8843918 1768057085.6750104 1768057101.4190998 1768057109.3534727 1768057119.7842429 1768057136.5627928 1768079666.113722 1768079668.6683514 1768079673.4090157 1768079675.4893627 1768079685.4717195 1768079685.8670487 1768079690.291896 1768079692.9432077 1768079697.3771555 1768086168.1487443 1768086176.3513515 1768086177.216495 1768086177.898571 1768086179.6137946 1768086182.7242186 1768086192.3760135 1768086192.740066 1768086212.396135 1768134697.2728767 1768134704.8010283 1768134707.7121792 1768134708.0560768 1768134711.1750917 1768134713.4217865 1768134713.7260768 1768134715.5332298 1768134728.5465925 1768294912.787784 1768294915.6571844 1768294916.5206225 1768294917.7396455 1768294920.193792 1768294928.9164357 1768294930.5203264 1768294931.5069704 1768294943.4769967 1768308426.7526467 1768308431.2754452 1768308432.647019 1768308435.5231614 1768308439.2533436 1768308441.8660333 1768308447.0069115 1768308460.593248 1768324698.3590894 1768324700.4846914 1768324751.4691803 1768324765.183994 1768324772.6904168 1768324782.8927166 1768324798.4914553 1768324839.4870424 1768324874.4531574 1768384225.4799273 1768384229.7895231 1768384230.484599 1768384233.816662 1768384238.3189883 1768384248.4386628 1768384252.7716544 1768384261.2794209 1768384806.177688 1768384809.5460305 1768384811.4714494 1768384816.6815825 1768384819.9323728 1768384828.6584098 1768384830.7775512 1768384831.721024 1768384838.19614 1768393401.9596107 1768393405.5755694 1768393406.0980704 1768393406.9103317 1768393414.240275 1768393420.344335 1768393423.9467418 1768393424.9939027 1768393946.0471222 1768393947.9344432 1768393948.3867533 1768393956.1279247 1768393956.8507793 1768393957.677266 1768393964.51897 1768393969.2088404 1768393979.8658965 1768406697.5229118 1768406700.0978663 1768406708.7858956 1768406710.7479894 1768406711.659276 1768406714.616408 1768406717.5029907 1768406718.8020518 1768407432.1623812 1768407433.9276476 1768407438.4175367 1768407446.9722466 1768407451.619536 1768407452.932411 1768407455.5550284 1768407461.7541678 1768407470.464264 1768466929.7111862 1768466930.7620823 1768466939.288962 1768466949.7309234 1768466955.0143619 1768466958.2070162 1768466967.4488463 1768551779.1706276 1768562169.41472 1768562181.1047812 1768562189.7693236 1768562190.8138013 1768562197.070462 1768562200.7975888 1768562202.7073588 1768562205.321664 1768562208.3421023 1768610272.5089388 1768610273.9870481 1768610274.6940825 1768610277.9353135 1768610285.045674 1768610290.080227 1768610296.824196 1768610306.0538583 1768648520.2463694 1768648524.3537803 1768648526.0771394 1768648529.4067469 1768648534.5302858 1768750756.6713378 1768750760.8883185 1768750762.2632756 1768750763.0123136 1768750763.9212747 1768750769.8994906 1768750772.5732853 1768750777.4850461 1768752413.340801 1768752420.6023462 1768752422.6215243 1768752425.7867491 1768752427.6385326 1768752429.650268 1768752431.0732105 1768752441.6148021 1768752447.8566244 1768754200.131358 1768754211.6892462 1768754212.3077621 1768754216.445737 1768754220.9125214 1768754225.1230843 1768754225.6267507 1768754245.372674 1768796002.133248 1768796010.3023002 1768796011.5949295 1768796015.0323164 1768796015.8145432 1768796019.2814276 1768796026.593093 1768796031.6583393 1768796033.0877004 1769188837.0375812 1769188837.786761 1769188847.6208885 1769188851.0616503 1769188854.4203012 1769188859.236143 1769188871.306891 1769356115.074438 1769356117.2475653 1769356138.9818916 1769356139.6534898 1769356182.5385997 1769356183.954588 1769356185.6475754 1769356198.3801432 1769431198.390828 1769431201.5240662 1769431206.2080142 1769431206.6666946 1769431207.3521287 1769431209.8815796 1769431211.4100068 1769431213.8480275 1769431217.1288738 1769520574.57131 1769520580.9615748 1769520583.5518386 1769520584.6905546 1769520585.5634441 1769520599.9041538 1769520600.6451283 1769520627.5367892 1769520670.975549 1769599648.6679952 1769599655.1322901 1769599664.7568235 1769599666.4479232 1769599667.6139998 1769599682.9860744 1769599684.0950832 1769601234.0402722 1769601238.249395 1769601244.869996 1769601245.8162582 1769601257.4308686 1769601257.9740627 1769601260.8389282 1769601263.5695539 1769601271.478781 1769602947.2968462 1769602955.2546017 1769602959.1448636 1769602963.4101026 1769602970.7160242 1769602973.4823887 1769602981.6378336 1769602989.1562142 1769608598.3435633 1769608604.2349756 1769608604.601876 1769608605.4494705 1769608611.9154606 1769608617.0367196 1769608624.0631845 1769608627.4674208 1769608640.567906 1769610568.8423088 1769610570.6535783 1769610572.2760155 1769610574.9860072 1769610586.6524737 1769610584.3325677 1769610585.0414965 1769610603.931985 1769610612.5651 1769613447.7525485 1769613452.023495 1769613455.6614032 1769613474.061038 1769613477.762277 1769613522.2723105 1769613574.9480097 1769613575.9668584 1769613618.426645 1769726028.804288 1769726032.290003 1769726034.8757539 1769726041.8972003 1769726044.0577905 1769726045.1911438 1769726055.1641352 1769754949.819708 1769754950.1370707 1769754954.8530273 1769754958.0237353 1769754960.5883057 1769754966.0287259 1769754972.351571 1769754974.738888 1769754977.4281905 1769788282.907655 1769788288.5253084 1769788289.849481 1769788293.4059806 1769788295.6611738 1769788308.423529 1769788312.2817266 1769858473.3065324 1769858484.3433414 1769858555.512316 1769858647.5416012 1769858704.5140238 1769858713.3436747 1769858778.3269293 1769858802.0247488 1769858808.7230027 1769941971.4940948 1769941972.732963 1769941977.5641046 1769941982.1623034 1769941982.645791 1769941987.1513543 1769941988.775115 1769941990.5303235 1769950644.8137155 1769950646.2848487 1769950650.8295712 1769950652.0341804 1769950653.6078181 1769950660.5014696 1769950663.2128892 1769950670.5772336 1769950681.001842 1770017224.4015572 1770017226.0972135 1770017227.5026927 1770017231.749207 1770017242.5412765 1770017252.5441816 1770017271.3818393 1770029567.1518002 1770029570.340307 1770029573.6867454 1770029564.3587599 1770029577.2411828 1770029579.9578333 1770029583.1690521 1770029584.482004 1770029593.8162978 1770035028.269459 1770035041.1115882 1770035049.301453 1770035056.7874146 1770035063.4050725 1770035065.1114447 1770035065.5057907 1770035066.744156 1770035070.5860257 1770051243.1616974 1770051250.1983073 1770051251.8492804 1770051252.817322 1770051253.8113017 1770051261.6732495 1770051263.4817977 1770051287.4125712 1770051294.594631 1770054466.1206534 1770054467.1777632 1770054473.0102155 1770054474.1452157 1770054475.1106331 1770054477.808786 1770054483.3615644 1770054489.1622334 1770054493.8870437 1770155681.8264794 1770155688.659341 1770155691.0762267 1770155691.5853927 1770155693.353376 1770155701.8069544 1770155776.465049 1770155813.0368989 1770155847.1930277 1770156004.0932982 1770156009.3996131 1770156012.5004926 1770156014.5202863 1770156019.0435586 1770156023.4328444 1770156024.366795 1770156029.4199026 1770156036.9079852 1770198504.7005956 1770198505.974699 1770198510.613558 1770198516.2578535 1770198519.501817 1770198520.6840563 1770198522.328126 1770198523.844168 1770216381.141068 1770216384.9809282 1770216386.078784 1770216388.4733496 1770216397.7242239 1770216398.7499428 1770216405.7132208 1770216407.6655917 1770216464.6069107 1770285838.4310648 1770285839.4047208 1770285845.1482618 1770285847.8905082 1770285841.2767158 1770285852.6968825 1770285861.5700352 1770285864.8976052 1770285866.8076255 1770286841.6262429 1770292963.8278131 1770292966.564227 1770292977.1111255 1770292978.987983 1770292983.425502 1770292985.7778904 1770292992.654737 1770293005.2807176 1770293727.1439166 1770293736.492512 1770293742.9712944 1770293748.1470556 1770293750.9539392 1770293753.1042962 1770293754.1672068 1770293755.9334252 1770293762.1849937 1770294177.6031017 1770294179.2221286 1770294182.409861 1770294185.4034204 1770294189.954195 1770294192.2262456 1770294195.2364454 1770294209.3209252 1770294216.7605686 1770296074.3093114 1770296079.5112505 1770296085.0671687 1770296089.0901968 1770296091.5357335 1770296093.746994 1770296103.4383368 1770296115.1115165 1770296116.7188926 1770299387.0234706 1770299393.734676 1770299396.5552564 1770299397.9449227 1770299398.405942 1770299406.1220129 1770299411.0808227 1770299418.005087 1770304628.2581263 1770304632.1874857 1770304635.5848792 1770304637.4246569 1770304645.8792233 1770304652.500186 1770304796.5059683 1770304805.3266668 1770304805.9559672 1770306998.81128 1770352891.2765408 1770352956.2453735 1770352986.6446555 1770353015.8254614 1770353024.4290829 1770353034.2017062 1770353118.7308602 1770353204.512918 1770353218.492321 1770367607.3939998 1770367610.0111365 1770367614.45688 1770367615.195527 1770367615.6579452 1770367618.4807427 1770367627.2286937 1770367641.6742887 1770367688.8227878 1770375402.595021 1770375403.2182865 1770375406.9050174 1770375407.8124533 1770375411.0714655 1770375418.803763 1770375419.6336913 1770375426.5908537 1770375438.3355699 1770377679.8791206 1770377685.893547 1770377691.212522 1770377694.2193422 1770377700.6231124 1770377707.430232 1770388325.7926264 1770388332.1394527 1770388335.5754883 1770388338.1641219 1770388485.2298472 1770388486.7889037 1770388498.7128625 1770388510.505477 1770388524.7809443 1770448313.438776 1770448313.9616911 1770448318.2289886 1770448319.6247897 1770448320.5280318 1770448321.4971566 1770448326.5257752 1770448328.488793 1770448349.434152 1770474541.5718706 1770474662.913524 1770474669.9453278 1770474672.0780892 1770474675.1842391 1770474678.9146457 1770474687.7994618 1770474688.8756824 1770474691.3726463 1770474692.9100966 1770481605.699769 1770481608.6086423 1770481611.768069 1770481613.7110043 1770481624.7046242 1770481630.5988204 1770481631.8143861 1770481637.0272915 1770482484.29333 1770482491.0655518 1770482497.2632189 1770482497.7695203 1770482498.5569618 1770482502.8524082 1770482505.567013 1770482508.9287205 1770482525.3033104 1770488366.9155667 1770488370.9018245 1770488372.2807295 1770488380.6067863 1770488380.9800029 1770488384.2862618 1770488384.7730534 1770488387.3612244 1770547755.0958505 1770547759.2344968 1770547760.8083112 1770547764.0160139 1770547767.344153 1770547769.2391427 1770547775.804789 1770547787.0251117 1770552981.288764 1770553003.9997299 1770553069.368204 1770553083.7589478 1770553087.3663883 1770553088.7641938 1770553093.710568 1770553094.2635589 1770553127.7866013 1770630887.801219 1770630892.8695138 1770630895.7021675 1770630897.280305 1770630898.801555 1770630909.526364 1770630962.881308 1770630966.585008 1770630973.0093026 1770639812.003858 1770639817.971794 1770639830.878849 1770639886.5446465 1770639892.9692142 1770639894.882578 1770639896.724656 1770639904.0340664 1770639918.555993 1770666463.2497134 1770666489.4294336 1770666494.062041 1770666543.0114794 1770666596.8524406 1770666637.062504 1770666660.894903 1770678196.9051228 1770678200.1169786 1770678203.065707 1770678293.564291 1770678296.2945912 1770678299.3110435 1770678306.325338 1770678318.2274911 1770678330.3257508 1770713495.7730114 1770713496.5848763 1770713497.807587 1770713498.528954 1770713507.7146904 1770713515.1544588 1770713517.8683257 1770713540.7203977 1770808063.4899719 1770808066.430682 1770808070.9095547 1770808073.9356825 1770808075.619688 1770808077.9274998 1770808093.0801852 1770808095.7556472 1770808891.1125565 1770808892.6134186 1770808898.3738124 1770808900.2658844 1770808901.484776 1770808909.4623446 1770808912.6182282 1770808916.8051906 1770808917.5748165 1770809447.4234073 1770809452.9602368 1770809453.6279988 1770809454.0772502 1770809455.1354978 1770809455.6678789 1770809456.6628273 1770809465.8118029 1770809469.5300505 1770810357.3477256 1770810359.343377 1770810362.88448 1770810363.456319 1770810371.1891587 1770810377.7186735 1770810392.244661 1770810406.1654177 1770899096.5793927 1770899098.3827033 1770899101.0838323 1770899102.4842598 1770899104.6827645 1770899111.809342 1770899112.9919648 1770899128.6597016 1770899248.5425107 1771076341.0126917 1771076343.506212 1771076350.479432 1771076351.6451955 1771076356.9553094 1771076366.3930233 1771076377.9620905 1771153613.0499876 1771153615.8472834 1771153620.339606 1771153633.8619168 1771153650.6205938 1771153687.2132227 1771153708.54045 1771153716.4352381 1771164876.0520263 1771164879.5962496 1771164880.594281 1771164884.0660386 1771164886.7604036 1771164904.1516867 1771164906.802209 1771164908.281534 1771165042.0703905 1771165045.7845407 1771165046.2814014 1771165047.8980622 1771165061.7444115 1771165066.7939172 1771174013.7134352 1771174015.9087002 1771174018.5526137 1771174020.0801136 1771174022.5137017 1771174027.8996327 1771174030.041202 1771174031.6948006 1771174038.2379742 1771175143.8134773 1771175149.462427 1771175151.9771097 1771175153.8716705 1771175157.0586224 1771175159.955862 1771175161.3851736 1771175295.0077727 1771175296.0930247 1771175300.7326233 1771175301.8456702 1771175303.9392393 1771175306.2821484 1771175309.090323 1771175318.9579391 1771175322.8382182 1771176996.9813175 1771177000.1674964 1771177002.6654875 1771177004.0820394 1771177011.4292345 1771177014.6017056 1771177017.5282974 1771177021.4518795 1771177024.6343913 1771185405.2020059 1771185407.9832363 1771185451.4425006 1771185466.3495464 1771185500.8092175 1771185539.0877485 1771185591.724145 1771185598.1286225 1771185614.1913784 1771244458.7711375 1771244660.7247722 1771244684.6490598 1771244694.3202388 1771244735.967286 1771244842.5954037 1771245183.3800526 1771245497.0590835 1771245644.0315454 1771600012.0328515 1771600018.626791 1771600020.4096375 1771600021.169344 1771600023.745423 1771600028.3680377 1771600028.8611665 1771600038.381504 1771600042.4843132 1771684030.1196742 1771684031.4314518 1771684033.397595 1771684034.3962631 1771684036.2810757 1771684045.215912 1771684053.1180193 1771684054.5356603 1771757003.813362 1771757005.1222928 1771757006.111422 1771757007.1642048 1771757017.1231 1771757021.1513972 1771757028.3927412 1771757030.9026449 1771764363.7003086 1771764364.442254 1771764365.4441075 1771764370.843027 1771764382.209699 1771764468.0461407 1771764493.6582198 1771780294.343606 1771780296.5097165 1771780298.4102716 1771780299.0157566 1771780308.3770611 1771780309.7407043 1771780314.8731542 1771780321.8025336 1771780324.5329354 1771837751.3228168 1771837756.767008 1771837760.2879758 1771837769.8369215 1771837770.2048807 1771837772.8549726 1771837788.6489344 1771839299.4875984 1771839305.4016466 1771839307.9862158 1771839308.9755557 1771839310.5828793 1771839322.6886103 1771839323.2381954 1771839325.3454525 1771865784.6298401 1771865786.3726418 1771865787.318743 1771865803.3110325 1771865811.3406887 1771972820.8536546 1771972821.5067422 1771972840.4580994 1771972846.1839893 1771972884.3953075 1771972886.8935175 1771972892.4252405 1771972902.1194937 1772004121.2945533 1772004122.7917647 1772004124.9790232 1772004129.7317517 1772004134.1553736 1772004140.8575795 1772004142.5861886 1772004147.0769281 1772039635.139008 1772039636.0414748 1772039639.855896 1772039648.0528839 1772039651.6689503 1772039654.9362936 1772039660.0298471 1772039667.3506672 1772097086.5031183 1772097098.1678927 1772097111.1263285 1772097117.7405796 1772109463.553514 1772109466.3407483 1772109480.4852076 1772109481.6438973 1772109484.0316198 1772109485.8141325 1772109494.0484235 1772125617.511287 1772125620.4649448 1772125620.9415054 1772125625.5994627 1772125633.153215 1772125651.902158 1772125654.4224913 1772125794.3522947 1772125796.7602608 1772125799.6996412 1772125812.3675652 1772125813.0661526 1772125813.6645544 1772125816.1068468 1772183828.892642 1772183832.5869255 1772183835.152446 1772183843.5205145 1772183852.0932834 1772183859.433871 1772183868.0199094 1772280404.2078578 1772280404.69581 1772280407.464592 1772280409.17338 1772280410.9133086 1772280413.3649797 1772280421.0677361 1772280423.5847754 1772295578.4514158 1772295580.894601 1772295581.7305021 1772295582.7096155 1772295583.8931496 1772295588.8290505 1772295589.741979 1772295599.709021 1772295602.4200597 1772297271.8931916 1772297272.796662 1772297276.1779351 1772297281.0048177 1772297287.5373304 1772297289.1350865 1772297290.1080134 1772297296.3202076 1772297945.7492647 1772297949.3261893 1772297951.851947 1772297953.4251385 1772297961.0872998 1772297962.237692 1772297968.548078 1772297976.193011 1772298793.4816813 1772298801.7994263 1772298804.3413033 1772298816.8963897 1772298819.4326506 1772298821.0167608 1772298821.461571 1772299046.3897016 1772299050.552813 1772299058.2212174 1772299059.2914927 1772299066.873316 1772299073.6742685 1772299786.0516667 1772299787.7142491 1772299788.997042 1772299795.5276682 1772299806.997665 1772299816.2948682 1772300068.4680173 1772300074.1381872 1772300075.076055 1772300080.9735785 1772300090.6366215 1772300094.4405732 1772300530.293983 1772300534.5245671 1772300544.3982706 1772300548.0080998 1772300552.9624085 1772300570.5476682 1772300932.9506423 1772300936.419418 1772300941.5620844 1772300943.8668664 1772300964.111361 1772328442.6384232 1772328443.3122764 1772328444.0383964 1772328454.9741364 1772328455.7685978 1772328456.676097 1772328464.6393201 1772328468.4323661 1772328473.5744238 1772351413.8249013 1772383323.1008327 1772383329.9349842 1772383331.386728 1772383332.146261 1772383333.3551807 1772383335.9397588 1772383337.1753385 1772383342.6916847 1772383348.262124 1772383821.0542176 1772383823.6034913 1772383825.878503 1772383826.176101 1772383827.88893 1772383832.7978203 1772383842.736432 1772383847.1015575 1772383850.6285467 1772454124.9551854 1772454151.6994405 1772454233.6164246 1772454250.9810789 1772454289.6593218 1772454310.1916735 1772454394.1553872 1772454398.7474406 1772454562.4118385 1772713528.9459274 1772713544.885845 1772713545.9493737 1772713650.5365589 1772713668.5272853 1772713706.8689525 1772713719.4318998 1772714313.3804982 1772714634.441328 1772764959.4377325 1772764964.7828572 1772764967.7785013 1772764970.1141407 1772764973.2195883 1772764984.4319944 1772765126.5007186 1772787175.2837644 1772787179.9415834 1772787186.6077988 1772787186.8416843 1772787187.15247 1772787198.6093411 1772787204.9290109 1772787209.0141208 1772809991.9257238 1772809992.8731363 1772809997.4999394 1772810001.7896464 1772810005.7003007 1772810006.7824953 1772810008.0087657 1772810021.9598997 1772810085.6787655 1772905492.0566986 1772905498.5148373 1772905501.3888893 1772905503.641356 1772905509.1755662 1772905511.2718103 1772905521.3545146 1772905530.8175929 1772967830.8897622 1772967834.800573 1772967835.3464074 1772967838.857526 1772967842.5253148 1772967849.667246 1772967857.5036254 1772967858.8364737 1772967861.6873882 1772984316.610907 1772984318.0384367 1772984361.0834682 1772984389.3850882 1772984403.9999688 1772984440.3767893 1772984445.8218489 1772984475.5563498 1772984492.1683066 1772986406.4741344 1772986410.3417528 1772986411.5768716 1772986412.093717 1772986415.0171423 1772986419.9504926 1772986423.3365016 1772986428.4155931 1773059898.1412277 1773059935.98033 1773060041.6970541 1773060054.2331545 1773061011.8323395 1773061314.2291052 1773061380.437499 1773061414.112351 1773061436.1397038 1773145071.5631673 1773145145.0533056 1773145299.1570978 1773145317.0917435 1773145361.1160474 1773145431.9178998 1773145447.205267 1773145574.0338075 1773145864.4072688 1773145867.958283 1773145870.8676126 1773145873.084005 1773145874.1125846 1773145883.6725326 1773145885.4807596 1773145903.0986722 1773158716.4506488 1773209697.8553648 1773209704.3154953 1773209707.7399786 1773209708.3590436 1773209712.3566198 1773209715.2477503 1773209716.6491067 1773209717.4205372 1773209727.397243 1773243569.3923771 1773243579.9017727 1773327509.4352446 1773327512.384058 1773327517.778177 1773327519.3600962 1773327525.9831553 1773327530.2042542 1773327531.6041195 1773327533.6185954 1773342044.3975337 1773342047.2800632 1773342047.7213204 1773342051.3167768 1773342070.793869 1773422305.7551844 1773422306.8472383 1773422307.260621 1773422307.861149 1773422309.2151213 1773433616.940507 1773433617.8015654 1773433618.1402817 1773433618.8915472 1773433620.1571712 1773433636.6559062 1773433685.9827228 1773433769.0329056 1773433793.9351418 1773436822.279561 1773496529.2417994 1773496531.6484542 1773496534.2970135 1773496540.2494192 1773496542.5848348 1773496556.6658444 1773496557.646253 1773508559.8649719 1773508564.2156093 1773508565.6863298 1773508566.2063718 1773508567.2482834 1773508576.2386317 1773508579.5570102 1773508588.7930615 1773526091.7305086 1773526094.7576952 1773526099.7316136 1773526101.0460598 1773526102.468852 1773526107.369785 1773526110.1862388 1773526115.115235 1773526116.7317014 1773531665.82529 1773531666.3771586 1773531666.8047104 1773531667.4920819 1773531668.6569617 1773533178.7996001 1773533179.23835 1773533180.4051468 1773533180.702309 1773533326.7572465 1773533328.9965563 1773533329.9414577 1773533330.16112 1773533330.968805 1773533332.2384558 1773533342.702904 1773533347.4469643 1773533359.1699326 1773663912.872022 1773663917.414473 1773663920.1189451 1773663923.0031617 1773663929.1929984 1773663934.9318051 1773663938.2461636 1773663945.447361 1773663948.7060542 1773923127.7739248 1773923140.1724749 1773923171.917618 1773923216.2591379 1773923290.2481165 1773923351.7546723 1773923387.236511 1773924177.1936789 1773924247.1279826 1774116622.3116958 1774116626.685884 1774116631.36191 1774116634.4917035 1774116636.007466 1774116646.396959 1774116649.9595244 1774122611.4872355 1774122612.0778387 1774122617.113013 1774122623.748957 1774122624.2195117 1774122627.254311 1774122631.9285514 1774122633.3222346 1774122643.6527953 1774123449.8178384 1774123455.4579494 1774123456.9654434 1774123460.0542014 1774123468.123217 1774123470.894454 1774123473.1936722 1774123615.9096093 1774123617.057869 1774123618.2236078 1774123620.8008826 1774123627.442505 1774123629.493724 1774123630.8533177 1774123636.9826944 1774123643.869337 1774125064.8095303 1774125068.9721835 1774125072.345307 1774125073.838626 1774125078.0622084 1774125078.9767094 1774125084.6969202 1774125096.4611142 1774165455.8215635 1774165456.3814306 1774165458.2990782 1774165464.2143352 1774165468.043054 1774165468.4514842 1774165473.8426971 1774165484.6675928 1774165490.0981755 1774173607.1004112 1774173625.73087 1774173709.2447455 1774173744.2978158 1774173764.3022842 1774173786.8334386 1774173805.8676367 1774173809.644974 1774173889.2116613 1774179069.3753922 1774179134.4216766 1774179147.1273863 1774179151.712217 1774179172.1551447 1774179178.1981494 1774179230.1370556 1774179231.5304184 1774179279.552431 1774183796.2095468 1774183796.7006834 1774183797.983253 1774183801.156979 1774183802.2355645 1774183811.2893264 1774183822.0530934 1774183824.9673326 1774191717.4712055 1774191718.3463879 1774191721.421663 1774191725.149967 1774191727.2233143 1774191732.0443897 1774191735.698229 1774191737.403349 1774268525.0307348 1774268526.373377 1774268527.2372344 1774268537.347842 1774268572.9748507 1774268604.4843407 1774268639.346915 1774268687.8962731 1774268712.863652 1774527755.3994756 1774527759.1027331 1774527759.7701855 1774527766.0900435 1774527768.3282084 1774527775.64296 1774527847.611203 1774527868.9990609 1774527892.2252436 1774873655.527003 1774873666.6517813 1774873668.6499827 1774873672.1687975 1774873674.125012 1774873676.3726752 1774873680.1577253 1774873685.824583 1774875895.7435656 1774875899.2784672 1774875902.3986785 1774875905.0208993 1774875905.594042 1774875909.4528077 1774875914.4021006 1774875918.060093 1774876701.5632007 1774876702.4201756 1774876704.384826 1774876706.8571978 1774876710.02423 1774876719.672133 1774876732.959303 1774876733.9153466 1774876736.3431017 1774880824.6487224 1774880825.8109229 1774880832.7772617 1774880833.8427367 1774880836.6255288 1774880839.2399762 1774880841.9262152 1774880851.3003206 1774881363.6655617 1774881367.4241898 1774881372.1439908 1774881374.0549834 1774881385.053962 1774881389.3328514 1774881393.963817 1774881394.7380836 1774881400.2569187 1775231066.5313282 1775231119.1918912 1775231129.4662294 1775231177.3856704 1775231196.8174288 1775231214.4311275 1775231297.0647576 1775231334.9891703 1775231338.6613705 1775232630.3965228 1775232640.9850821 1775232648.2935927 1775232767.7549682 1775232769.345424 1775232773.8040285 1775232779.7044146 1775232795.4553795 1775232797.4147656 1775234999.7864647 1775235006.9964473 1775235009.0573256 1775235017.2879946 1775235271.5614855 1775235283.7214663 1775235285.2803273 1775235306.43616 1775241999.4150372 1775242123.5503404 1775242126.3104184 1775242143.7351582 1775242210.8824239 1775242221.0156906 1775242396.821857 1775242449.6782231 1775242917.341283 1775312885.8533607 1775312892.5294592 1775312916.0363607 1775312923.368411 1775312928.9784486 1775312930.7954159 1775312939.4274864 1775318471.3398528 1775318474.8361926 1775318479.0674982 1775318483.5954714 1775318484.0378363 1775318488.6386657 1775318489.0825813 1775319309.9300623 1775319312.934079 1775319315.2263668 1775319319.3970985 1775319376.0797794 1775319379.438265 1775319387.2380319 1775319400.7464328 1775319407.4777956 1775322237.4052963 1775322237.8814938 1775322241.1159406 1775322242.6739452 1775322247.1877317 1775322250.2518969 1775322251.8086483 1775322254.6575804 1775322268.3851843 1775381179.7835803 1775381180.9311726 1775381187.0079129 1775381187.4863334 1775381190.7522886 1775381197.9658923 1775381202.1844847 1775381202.9599855 1775402318.8826947 1775402321.8426278 1775402322.2964063 1775402323.9786787 1775402325.1313353 1775402325.7507243 1775402334.9895287 1775402342.0844438 1775402350.98194 1775462783.7941637 1775462786.3998082 1775462791.9899664 1775462797.2010918 1775462817.1794748 1775462854.5869381 1775462868.0183764 1775462878.52322 1775464091.0254564 1775464097.9112625 1775464102.6998096 1775464107.9394155 1775464109.435578 1775464111.759231 1775464115.5834837 1775464125.0957696 1775464128.2511601 1775466263.7154732 1775478270.6244485 1775478281.4753964 1775478288.554501 1775478310.7563734 1775478311.489444 1775478314.0560038 1775478327.5556254 1775478336.92283 1775478403.020345 1775492855.630969 1775492865.677199 1775492871.0985777 1775492913.0388153 1775492914.2092292 1775492916.9741492 1775492924.6610458 1775492936.5097935 1775494313.6594186 1775494318.0464292 1775494319.3477843 1775494320.2532756 1775494321.7131712 1775494327.6839483 1775494328.640422 1775494331.6578414 1775494365.9452775 1775551071.1644187 1775551074.4337926 1775551079.0472832 1775551083.2774842 1775551085.7583468 1775551090.7644863 1775737435.2773647 1775737438.7938755 1775737439.635319 1775737447.1997576 1775737453.2451897 1775737457.3720942 1775737460.0834644 1775737479.3835547 1776083164.7412949 1776083166.0760298 1776083172.9341552 1776083173.2533977 1776083177.1253726 1776083177.7411783 1776083180.209172 1776083263.7892222 1776083286.7843368 1776342281.6236448 1776342324.3168411 1776342367.6482716 1776342394.2922654 1776342405.7413058 1776342434.293768 1776342520.3987992 1776343739.3542569 1776343741.3466635 1776343749.4476836 1776343754.4298182 1776343755.0325396 1776343769.2924407 1776343775.1753948 1776343828.6562598 1776343854.564765 1776344633.014359 1776344637.3803189 1776344644.7009134 1776344655.25513 1776344660.5385182 1776344822.1057956 1776344856.866423 1776344870.981311 1776344900.9728403 1776344911.9065537 1776344991.6632652 1776345011.4701812 1776345020.397637 1776345020.6287603 1776494589.0378575 1776494589.6638293 1776494594.2250469 1776494594.5081048 1776494594.7770948 1776494598.6157148 1776494600.1698377 1776494607.1387196 1776494618.9425201 1776496070.773081 1776496074.2403238 1776496082.1198342 1776500548.6272972 1776500550.8541093 1776500552.396871 1776500561.6513975 1776500561.9745164 1776500563.704424 1776500564.6515799 1776500569.7395694 1776500573.3939784 1776513541.9652882 1776513542.9883733 1776513543.6343865 1776513544.158197 1776513553.7539227 1776513556.4451942 1776513559.8873482 1776513565.521203 1776513566.9828477 1776515776.2957382 1776515778.0470045 1776515783.6812472 1776515788.2738 1776515788.6813345 1776515789.7096481 1776515791.667823 1776515799.8251324 1776515806.7688403 1776521436.0148668 1776521440.1395595 1776521442.0799096 1776521444.7308571 1776521446.7341077 1776521450.7588751 1776521456.820204 1776521457.2570791 1776521462.973624 1776525730.7254903 1776525731.5157208 1776525732.2143252 1776525735.2291906 1776525739.6271024 1776525745.47407 1776525747.4315937 1776525748.1166008 1776530796.9598818 1776530834.8976426 1776530864.183933 1776530904.1523414 1776530906.5831788 1776530917.970012 1776530957.2714953 1776530958.9008594 1776530975.3914669 1776602223.330836 1776602243.389179 1776602275.7255769 1776602286.458232 1776602300.1333187 1776602300.6690238 1776602301.1831164 1776602314.4517279 1776602954.1821818 1776602955.5293558 1776602959.3396807 1776602962.849875 1776602970.9934807 1776602971.7103772 1776602974.2212696 1776602980.194477 1776688037.9927702 1776688046.959831 1776688056.5510614 1776688061.4678383 1776688066.5871947 1776688113.6823382 1776688153.5094948 1776688265.2301989 1776688298.7890384 1776732662.0460057 1776732665.8318326 1776732666.489607 1776732670.0498426 1776732671.863852 1776732676.685261 1776732678.7114165 1776732685.426199 1776732686.6590118 1777121007.3493567 1777121011.3679473 1777121015.6233008 1777121017.4013567 1777121021.4683287 1777121025.4130871 1777121033.1263654 1777121034.594803 1777121036.4797184 1777124043.4091897 1777124045.9143817 1777124049.68581 1777124050.627295 1777124050.8497925 1777124063.542509 1777124065.626547 1777124068.4933844 1777125999.781397 1777126000.7849672 1777126001.1903439 1777126003.6446674 1777126009.2178264 1777126014.702515 1777126015.3995945 1777126026.6103077 1777126027.3554199 1777134789.5697863 1777134794.8848414 1777134798.203008 1777134802.584216 1777134805.801339 1777134810.2188227 1777134810.6067982 1777134815.5159879 1777287340.259427 1777287342.5806 1777287394.4660351 1777287403.198653 1777287414.5551069 1777287429.0213566 1777287435.7822795 1777287438.907569 1777287443.075804 1777293571.550748 1777293575.1182587 1777293575.6059732 1777293579.0007524 1777293579.7482665 1777293582.7539198 1777293588.9424148 1777293591.4147072 1777363065.5634713 1777363068.047331 1777363068.8651152 1777363069.2966669 1777363073.8316216 1777363082.3102756 1777363084.8887331 1777363085.6754465 1777808351.4681172 1777808352.1735678 1777808688.5471714 1777808694.4424684 qohnyemuhedketgax2tgjmba0kqmih0 User:Sam Sailor/test.js 2 98186 740260 740048 2026-05-03T08:47:47Z Sam Sailor 26820 Test 740260 javascript text/javascript //<nowiki> /* global ComradeLib, mw, $ */ (async function() { try { await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-options.js&action=raw&ctype=text/javascript'); } catch (e) { console.warn("Comrade: Could not load /comrade-options.js, using fallback defaults.", e); } window.ComradeOptions = Object.assign({ version: "0.5.0", excludedTemplates: [], nudgeTimeout: 10000, debugMode: false }, window.ComradeOptions || {}); await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-lib.js&action=raw&ctype=text/javascript'); async function getTargetPage(api, name, type) { const titles = type === 'surname' ? [`List of people with the English surname ${name}`, `List of people with surname ${name}`, `${name} (surname)`, `${name} (name)`, name] : [`List of people with given name ${name}`, `List of people named ${name}`, `${name} (given name)`, `${name} (name)`, name]; const res = await api.get({ action: 'query', titles: titles.join('|'), formatversion: 2 }); if (!res.query || !res.query.pages) return null; return titles.find(t => { const pg = res.query.pages.find(p => p.title === t); return pg && !pg.missing; }); } async function processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean) { const { givens, surnames } = await fetchWikidataNameLabels(entity); const nameParts = tClean.split(' '); const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const primarySurname = hasFamilyNameHatnote ? nameParts[0] : (getSmartSortKey(tClean, entity).split(',')[0] || nameParts[nameParts.length - 1]); for (const name of givens) { if (name.toLowerCase() === primarySurname.toLowerCase()) continue; const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'given'); if (target) await verifyAndNudge(api, name, 'given name', currentTitle, hasShortDesc, isOrphan, target); } const finalSurnames = surnames.length > 0 ? surnames : (nameParts.length >= 2 ? [nameParts[nameParts.length - 1]] : []); for (const name of finalSurnames) { const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'surname'); if (target) await verifyAndNudge(api, name, 'surname', currentTitle, hasShortDesc, isOrphan, target); } } async function verifyAndNudge(api, name, type, currentTitle, hasShortDesc, isOrphan, foundTitle) { const res = await api.get({ action: 'query', prop: 'revisions', titles: foundTitle, rvprop: 'content', formatversion: 2 }); const page = res.query.pages[0]; if (!page || page.missing || !page.revisions) return; const text = page.revisions[0].content; const isNameMatch = /\{\{(Surname|Hndis|Given[ _]name|Forename|Givenname)/i.test(text); const isNameDab = /\{\{(Disambiguation|Dab|Disambig)(?:[^}]*\|(surname|surnames|given[ _]name|given[ _]names)|(?:\s*\}\}))/i.test(text); const isNamePageTitle = foundTitle.includes('List of people with'); if (!isNameMatch && !isNameDab && !isNamePageTitle) return; const escapedTitle = currentTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/ /g, '[ _]'); const alreadyListed = new RegExp('(\\[\\[|\\{\\{anbl\\|[ _]*|\\|)' + escapedTitle, 'i').test(text); if (alreadyListed) return; const $container = $('<div>').addClass('comrade-container').addClass(isOrphan ? 'comrade-nudge' : 'comrade-info'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text(isOrphan ? 'Comrade nudge:' : 'Informative:')); const $content = $('<div>').addClass('comrade-content'); $content.append($('<span>').append(`${type.charAt(0).toUpperCase() + type.slice(1)} not listed at `, $('<a>').attr({ href: mw.util.getUrl(foundTitle), target: '_blank' }).text(foundTitle), "; should it be?")); const snippet = '* {{anbl|' + currentTitle + '}}'; const $snippetWrapper = $('<div>').css({ 'display': 'flex', 'align-items': 'center', 'gap': '10px', 'margin-top': '4px' }); const $instructionSpan = $('<span>').append('Consider adding ', $('<code>').text(snippet)); const $copyBtn = $('<button>').text('Copy & insert').on('click', function() { navigator.clipboard.writeText('\n' + snippet).then(() => { $(this).text('Copied!').prop('disabled', true); const editUrl = mw.util.getUrl(foundTitle, { action: 'edit', summary: 'Adding * {{[[Template:Annotated biography link|anbl]]|[[' + currentTitle + ']]}}' }); window.open(editUrl, '_blank'); }); }); $snippetWrapper.append($instructionSpan, $copyBtn); $content.append($snippetWrapper); if (!hasShortDesc) { $content.append($('<span>').css({ 'color': '#d33', 'font-weight': 'bold', 'margin-top': '5px' }).text('⚠️ Missing short description: Please add a concise one before listing.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } async function checkNamingPrecision(currentTitle, isHuman) { const disambigMatch = currentTitle.match(/^(.+?)(?:, | \()/); if (isHuman || !disambigMatch) return; const baseTitle = disambigMatch[1].trim(); const api = new mw.Api(); try { const baseRes = await api.get({ action: 'query', titles: baseTitle, redirects: 1, formatversion: 2 }); const page = baseRes.query.pages[0]; const baseExists = !page.missing; let baseRedirectsToSelf = false; if (baseRes.query.redirects) { baseRedirectsToSelf = baseRes.query.redirects.some(r => r.to === currentTitle); } const searchRes = await api.get({ action: 'query', list: 'allpages', apprefix: baseTitle, aplimit: 50, formatversion: 2 }); const competitors = searchRes.query.allpages.filter(p => { const t = p.title; return t !== currentTitle && t !== baseTitle && (t.startsWith(baseTitle + ', ') || t.startsWith(baseTitle + ' (')); }); if (!baseExists || baseRedirectsToSelf) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $content = $('<div>').addClass('comrade-content'); if (competitors.length === 0) { $header.append($('<strong>').text('Precision:')); const reason = baseRedirectsToSelf ? "already redirects here" : "is free"; $content.append($('<span>').append(`The base name `, $('<code>').text(baseTitle), ` ${reason}. Consider moving this article.`)); const moveUrl = mw.util.getUrl('Special:MovePage/' + currentTitle, { wpNewTitle: baseTitle, wpReason: 'Unnecessary disambiguation; base name is free/redirects here per [[WP:PRECISION]]' }); $content.append($('<button>').text(`Move to ${baseTitle}`).on('click', () => window.open(moveUrl, '_blank'))); } else { $header.append($('<strong>').text('Observation:')); const state = baseRedirectsToSelf ? 'redirect to this page' : 'redlink'; $content.append($('<span>').append(`Base name `, $('<code>').text(baseTitle), ` has ${competitors.length} competitors, but it is currently a ${state}.`)); $content.append($('<span>').text('Consider if a disambiguation page is needed.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } } catch (e) { console.warn("Comrade: Precision check failed", e); } } async function checkHumanSort(wikitext, entity, currentTitle, tClean, refName) { const dsMatch = wikitext.match(/\{\{(?:DEFAULTSORT|Defaultsort):([^}]+)\}\}/i); const { givens } = await fetchWikidataNameLabels(entity); if (dsMatch) { const currentDS = dsMatch[1].trim(); if (currentDS.includes(',')) { let [lastPart, firstPart] = currentDS.split(',').map(s => s.trim()); if (firstPart.toLowerCase().endsWith(lastPart.toLowerCase())) { let fixedFirst = firstPart.substring(0, firstPart.length - lastPart.length).trim(); let suggestion = `${fixNameCasing(lastPart, refName)}, ${fixNameCasing(fixedFirst, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, "Redundant surname in given name field."); } else if (givens.length > 0 && lastPart.split(' ').length > 1) { const parts = lastPart.split(' '); const misplacedGiven = parts.find(part => givens.some(gn => gn.toLowerCase() === part.toLowerCase())); if (misplacedGiven) { const newSurname = parts.filter(p => p !== misplacedGiven).join(' '); let suggestion = `${fixNameCasing(newSurname, refName)}, ${fixNameCasing(misplacedGiven + ' ' + firstPart, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, `Wikidata suggests "${misplacedGiven}" is a given name.`); } } } } else { const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const nameParts = tClean.split(' '); const targetSortName = hasFamilyNameHatnote ? `${nameParts[0]}, ${nameParts.slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { const $dsMissing = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Add: {{DEFAULTSORT:${targetSortName}}}`).on('click', () => performSortCorrection(targetSortName, "add")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` Tag is missing. `, $btn)); $dsMissing.append($header); ComradeLib.appendDismiss($dsMissing); } } } async function fetchWikidataEntity(qid) { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetentities', ids: qid, props: 'claims|labels', languages: 'en', format: 'json', origin: '*' }); try { const wikiData = await fetch(url).then(r => r.json()); return wikiData.entities[qid]; } catch (e) { return null; } } function getSmartSortKey(fullName, entity) { const countryIds = entity.claims?.P27?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const locationIds = entity.claims?.P17?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const placeIds = [...(entity.claims?.P19 || []), ...(entity.claims?.P119 || [])].map(c => c.mainsnak?.datavalue?.value?.id).filter(Boolean); const allRelevantIds = [...countryIds, ...locationIds, ...placeIds]; const birthYear = parseInt(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value?.time?.match(/[+-](\d{4})/)?.[1]) || null; if (fullName.startsWith("Saint ")) return fullName.replace("Saint ", ""); const arabicParticles = /\b(Abu|Abd|Abdel|Abdul|ben|bin|bint)\b/i; if (fullName.match(arabicParticles)) { if (birthYear && birthYear > 1900) { const parts = fullName.split(' '); const binIndex = parts.findIndex(p => p.toLowerCase() === 'bin' || p.toLowerCase() === 'ben'); if (binIndex > 0) return parts.slice(binIndex).join(' ') + ', ' + parts.slice(0, binIndex).join(' '); } else { return fullName; } } const eastAsianQids = ["Q148", "Q865", "Q884", "Q424", "Q17", "Q881"]; if (allRelevantIds.some(id => eastAsianQids.includes(id))) { if (allRelevantIds.includes("Q17") && birthYear && birthYear > 1885) return westernSort(fullName); const parts = fullName.split(' '); if (parts.length > 1) return `${parts[0]}, ${parts.slice(1).join(' ')}`; } return westernSort(fullName); } function westernSort(name) { let cleanName = name; if (name.startsWith("O'")) cleanName = name.replace("O'", "O"); const parts = cleanName.split(' '); if (parts.length < 2) return cleanName; const surname = parts.pop(); if (["Jr.", "Jr", "III", "II", "Sr.", "Sr"].includes(surname)) { const actualSurname = parts.pop(); return `${actualSurname}, ${parts.join(' ')} ${surname}`; } return `${surname}, ${parts.join(' ')}`; } async function performSortCorrection(newName, type) { const api = new mw.Api(); const title = mw.config.get("wgPageName"); try { const data = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = data.query.pages[0].revisions[0].content; const dsRegex = /\{\{\s*(?:DEFAULTSORT|Defaultsort)\s*:[^}]+\}\}/i; const newTag = `{{DEFAULTSORT:${newName}}}`; if (dsRegex.test(content)) { content = content.replace(dsRegex, newTag); } else { const catRegex = /\[\[Category:/i; content = catRegex.test(content) ? content.replace(catRegex, `${newTag}\n[[Category:`) : content.trim() + `\n\n${newTag}`; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Setting DEFAULTSORT to ${newName}`, nocreate: true }); mw.notify(`DEFAULTSORT ${type === "add" ? "added" : "corrected"} to ${newName}!`, { title: 'Comrade Success', type: 'success' }); setTimeout(() => location.reload(), 700); } catch (err) { mw.notify('Failed to save DEFAULTSORT.', { type: 'error' }); } } function renderSortNudge(target, reason) { const $dsNudge = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Correct to: ${target}`).on('click', () => performSortCorrection(target, "format")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` ${reason} `, $btn)); $dsNudge.append($header); ComradeLib.appendDismiss($dsNudge); } async function fetchWikidataNameLabels(entity) { const familyIds = entity.claims?.P734?.map(c => c.mainsnak.datavalue.value.id) || []; const givenIds = entity.claims?.P735?.map(c => c.mainsnak.datavalue.value.id) || []; const allNameIds = [...new Set([...familyIds, ...givenIds])]; if (allNameIds.length === 0) return { givens: [], surnames: [] }; const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetentities', ids: allNameIds.join('|'), props: 'labels', languages: 'en', format: 'json', origin: '*' }); const nameData = await fetch(url).then(r => r.json()); return { givens: givenIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean), surnames: familyIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean) }; } function fixNameCasing(part, referenceName) { return part.split(' ').map(word => { const match = referenceName.match(new RegExp(`\\b${word}\\b`, 'i')); if (match) return match[0]; return referenceName.split(' ').find(tWord => word.toLowerCase().startsWith(tWord.toLowerCase()) || tWord.toLowerCase().startsWith(word.toLowerCase())) || word; }).join(' '); } async function init() { const api = new mw.Api(); const ns = mw.config.get("wgNamespaceNumber"); const action = mw.config.get("wgAction"); if (mw.config.get("wgDBname") !== "enwiki" || action !== "view") return; if (ns === 14) { const $btn = $('<button>').attr('id', 'comrade-audit-btn').text('Audit category quality').css({ 'margin-bottom': '10px', 'padding': '5px 10px', 'cursor': 'pointer' }).on('click', ComradeLib.performCategoryAudit); $('.mw-category-generated').prepend($btn); return; } if (ns !== 0) return; const qid = mw.config.get("wgWikibaseItemId"); const currentTitle = mw.config.get("wgTitle"); try { const [pageData, backlinkData] = await Promise.all([ api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }), api.get({ action: 'query', list: 'backlinks', blfilterredir: 'nonredirects', bllimit: 50, blnamespace: 0, bltitle: mw.config.get("wgPageName"), formatversion: 2 }) ]); const page = pageData.query.pages[0]; if (!page || page.missing || !page.revisions) return; const wikitext = page.revisions[0].content; ComradeLib.checkLeadCapitalization(currentTitle); // Ligature/ASCII-only/diacritic and domain const norms = ComradeLib.getNormalizedTitles(currentTitle); if (norms.ascii) { let label = "ASCII-only"; let category = "R from ASCII-only"; if (/[æÆœŒijIJßẞ]/.test(currentTitle)) { label = "Ligature"; category = "R to ligature"; } else if (currentTitle.normalize("NFD").match(/[\u0300-\u036f]/)) { label = "Diacritic"; category = "R to diacritic"; } await ComradeLib.checkAndRenderRedirect(norms.ascii, currentTitle, category, label); } await ComradeLib.checkDomainRedirect(qid, currentTitle); // Orphan logic const isOrphanTagged = /\{\{\s*(Orphan|Do-attempt|Lonely|Orp|Orphaned article)/i.test(wikitext) || /\| *orphan *=/i.test(wikitext); const backLinkCount = backlinkData.query.backlinks.length; if (isOrphanTagged && backLinkCount >= 1) { const $container = $('<div>').addClass('comrade-container comrade-status'); const $btn = $('<button>').text('Remove orphan tag').on('click', async () => await ComradeLib.performDeorphan()); const $statusText = $('<span>').append($('<strong>').text('Status:'), ` Article has ${backLinkCount} backlink(s).`, $btn); $container.append($('<div>').addClass('comrade-header').append($statusText)); ComradeLib.appendDismiss($container); } // Wikidata/human logic let entity = qid ? await fetchWikidataEntity(qid) : null; let isHuman = entity?.claims?.P31?.some(c => c.mainsnak?.datavalue?.value?.id === "Q5"); await checkNamingPrecision(currentTitle, isHuman); if (isHuman && entity) { const tClean = currentTitle.replace(/\s*\(.*?\)\s*/g, '').trim(); const refName = entity.labels?.en?.value || currentTitle; const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const hasShortDesc = /\{\{\s*[Ss]hort description/i.test(wikitext); const isOrphan = isOrphanTagged && backLinkCount < 1; await ComradeLib.checkShortDescDates(wikitext, entity); await ComradeLib.checkNoShortDesc(wikitext, entity); // Check DEFAULTSORT await checkHumanSort(wikitext, entity, currentTitle, tClean, refName); const longName = ComradeLib.getLongNameFromWikitext(wikitext); if (longName && longName.length > tClean.length) { let sortKey = hasFamilyNameHatnote ? `${longName.split(' ')[0]}, ${longName.split(' ').slice(1).join(' ')}` : getSmartSortKey(longName, entity); const rLongWikitext = `#REDIRECT [[${currentTitle}]]\n\n{{Redirect category shell|\n{{R from long name}}\n}}\n{{DEFAULTSORT:${sortKey}}}`; await ComradeLib.checkAndRenderRedirect(longName, currentTitle, null, "Long name", rLongWikitext); } // Sort name R const targetSortName = hasFamilyNameHatnote ? `${tClean.split(' ')[0]}, ${tClean.split(' ').slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName && targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { let targetPage = currentTitle.includes(' (') ? currentTitle.split(' (')[0] : currentTitle; let rCat = targetPage !== currentTitle ? "R from ambiguous sort name" : "R from sort name"; if (targetSortName.includes(',')) { const p = targetSortName.split(','); rCat += `|${p[0].trim().charAt(0).toUpperCase()}|${p[1].trim().charAt(0).toUpperCase()}`; } await ComradeLib.checkAndRenderRedirect(targetSortName, targetPage, rCat, "Sort name"); } // Name lists await processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean); } // Quality/ORES const isRedirect = !!mw.config.get("wgIsRedirect"); const userExclusions = window.comradeQualityExclusions || []; const allExclusions = [...window.ComradeOptions.excludedTemplates, ...userExclusions]; const exclusionRegexString = allExclusions.map(t => t.replace("Template:", "").replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'); const exclusionRegex = new RegExp(exclusionRegexString, 'i'); if (isRedirect || exclusionRegex.test(wikitext)) { console.log("Comrade check skipped: Page is a redirect or excluded via options."); return; } ComradeLib.checkQualityConsistency(); } catch (err) { console.error("Comrade error:", err); } } init(); })(); (function() { if (window.Headmaster) return; const VERSION = "0.9.2.1"; const defaultNS = [0, 118]; const userNS = window.headmaster_ns || []; const config = { menu: window.headmaster_menu || 'p-cactions', enableSummary: window.headmaster_do_summary !== false, customSummary: window.headmaster_summary || "", allowedNamespaces: Array.from(new Set([...defaultNS, ...userNS])), autoScan: window.headmaster_auto_scan !== false, autoRun: window.headmaster_auto_run === false }; const Headmaster = { VERSION: VERSION, DefaultSummary: "Converting [[MOS:PSEUDOHEAD|pseudo-headings]] {details}using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]. Semicolon markup is reserved for [[MOS:DLIST|description lists]].", styleInjected: false, css: ` #hm-panel { clear: both; border: 1px solid #a2a9b1; padding: 15px; background: #f8f9fa; margin-bottom: 1.5em; border-radius: 2px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } #hm-table { width: 100%; border-collapse: collapse; background: white; margin-top: 10px; } #hm-table th { background: #f2f2f2; border: 1px solid #a2a9b1; padding: 8px; text-align: left; } #hm-table td { border: 1px solid #a2a9b1; padding: 8px; vertical-align: middle; } .hm-context { font-family: 'Courier New', monospace; font-size: 0.9em; color: #54595d; background: #fdfdfd; } #hm-controls { display: flex; justify-content: space-between; align-items: center; margin-top: 15px; } #hm-controls button { margin-left: 10px; padding: 6px 16px; cursor: pointer; border-radius: 2px; } .hm-btn-apply { background: #36c; color: white; border: 1px solid #36c; font-weight: bold; } .hm-btn-apply:hover { background: #447ff5; } .hm-global-selector { font-size: 0.9em; color: #202122; background: #eaecf0; padding: 8px; border-radius: 2px; border: 1px solid #a2a9b1; } .hm-global-selector a { font-weight: bold; text-decoration: none; color: #36c; } .hm-global-selector a:hover { text-decoration: underline; } .hm-locate-btn { cursor: pointer; color: #36c; border: 1px solid #a2a9b1; background: #f8f9fa; padding: 2px 6px; font-size: 0.85em; border-radius: 2px; } .hm-locate-btn:hover { background: #fff; border-color: #36c; } `, setup() { if (!config.allowedNamespaces.includes(mw.config.get("wgNamespaceNumber"))) return; const action = mw.config.get("wgAction"); this.addPortlet(action); if (action === 'view' && (config.autoScan || config.autoRun)) { this.silentScan(); } if (mw.util.getParamValue('headmaster') === '1' && ['edit', 'submit'].includes(action)) { const params = new URLSearchParams(window.location.search); params.delete('headmaster'); const searchString = params.toString(); const newUrl = window.location.pathname + (searchString ? '?' + searchString : ''); window.history.replaceState(null, '', newUrl); this.init(); } }, addPortlet(action) { const link = mw.util.addPortletLink(config.menu, '#', 'Headmaster', 'ca-hm', 'Interactively convert pseudo-headings'); if (link) { $(link).on('click', (e) => { e.preventDefault(); if (action === 'view') { this.redirectToEdit(); } else if (['edit', 'submit'].includes(action)) { this.init(); } }); } }, redirectToEdit() { window.location.href = mw.util.getUrl(mw.config.get("wgPageName"), { action: 'edit', headmaster: '1' }); }, silentScan() { new mw.Api().get({ action: 'query', prop: 'revisions', titles: mw.config.get('wgPageName'), rvprop: 'content', rvlimit: 1, formatversion: 2 }).done((data) => { const page = data.query.pages[0]; if (!page || !page.revisions) return; const wikitext = page.revisions[0].content; const tasks = this.analyzeText(wikitext); if (tasks.length > 0) { if (config.autoRun) { this.redirectToEdit(); } else { this.notifyDiscovery(tasks.length); } } }).fail((err) => { mw.log.warn("Headmaster: silentScan failed", err); }); }, notifyDiscovery(count) { const $msg = $('<span>').text(`Headmaster: Found ${count} issues. `).append($('<a>').text('Run conversion').css({ fontWeight: 'bold', cursor: 'pointer' }).on('click', () => this.redirectToEdit())); mw.notify($msg, { tag: 'hm-discovery', autoHide: false }); }, init() { if (!this.styleInjected) { mw.loader.addStyleTag(this.css); this.styleInjected = true; } const $textbox = $('#wpTextbox1'); const wikitext = $textbox.textSelection('getContents'); if (!wikitext) { mw.notify("Textbox is empty or not found.", { type: 'error' }); return; } const tasks = this.analyzeText(wikitext); if (tasks.length === 0) { mw.notify("No issues found."); return; } this.showUI(tasks, wikitext); }, analyzeText(wikitext) { const lines = wikitext.split("\n"); const tasks = []; let currentDepth = 1; for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); const headingMatch = line.match(/^(={2,6})\s*(.+?)\s*\1\s*$/); if (headingMatch) { currentDepth = headingMatch[1].length; const prevLine = i > 0 ? lines[i - 1].trim() : null; const isSmashed = prevLine !== null && prevLine !== ""; const isExtraSpace = i > 1 && lines[i - 1].trim() === "" && lines[i - 2].trim() === ""; if (isSmashed || isExtraSpace) { tasks.push({ index: i, type: 'WHITESPACE', original: lines[i], isSmashed: isSmashed, isExtraSpace: isExtraSpace }); } } else if (line.startsWith(';') && !line.startsWith(';;')) { const nextLine = lines[i + 1] || ""; if (!nextLine.trim().startsWith(':')) { const cleanText = line.substring(1).replace(/\s*:.*$/, "").trim(); const suggestedLevel = "=".repeat(Math.min(currentDepth + 1, 6)); tasks.push({ index: i, type: 'PSEUDO', original: line, cleanText: cleanText, context: nextLine.substring(0, 60).trim() + (nextLine.length > 60 ? "..." : ""), suggestedLevel: suggestedLevel }); } } } return tasks; }, showUI(tasks, originalWikitext) { $('#hm-panel').remove(); $('#editform').hide(); const visibleTasks = tasks.filter(t => t.type === 'PSEUDO'); const pseudoCount = visibleTasks.length; const whitespaceCount = tasks.filter(t => t.type === 'WHITESPACE').length; let statusMsg = ""; const s = (n) => n !== 1 ? 's' : ''; if (pseudoCount > 0) { statusMsg = `Found <strong>${pseudoCount}</strong> possible pseudo-heading${s(pseudoCount)}.`; if (whitespaceCount > 0) { statusMsg += ` Also fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } } else { statusMsg = `Did not find any pseudo-headings, but fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } const tableRows = pseudoCount > 0 ? visibleTasks.map((task, i) => ` <tr data-task-index="${task.index}"> <td><button class="hm-locate-btn" data-hm-i="${tasks.indexOf(task)}" title="Show in editor">Locate</button></td> <td class="hm-context"><code>${mw.html.escape(task.original)}</code></td> <td><label><input type="radio" name="hm-opt-${i}" value="keep"> Keep</label></td> <td><label><input type="radio" name="hm-opt-${i}" value="bold" checked> <b>Bold</b></label></td> <td><label><input type="radio" name="hm-opt-${i}" value="head"> Heading (${task.suggestedLevel.length})</label></td> <td class="hm-context">${mw.html.escape(task.context || "(end of page)")}</td> </tr> `).join("") : `<tr><td colspan="6" style="text-align:center; padding: 2em; color: #54595d; background: #f8f9fa;"> No interactive heading changes detected. Only background spacing normalization will be applied. </td></tr>`; const $panel = $(` <div id="hm-panel"> <h3 style="margin-top:0">Headmaster v${this.VERSION}: Review pseudo-headings</h3> <div class="hm-global-selector" ${pseudoCount === 0 ? 'style="display:none"' : ''}> <strong>Bulk action:</strong> <a href="#" id="hm-all-keep">Set all to Keep</a> | <a href="#" id="hm-all-bold">Set all to Bold</a> | <a href="#" id="hm-all-head">Set all to Heading</a> </div> <table id="hm-table"> <thead> <tr> <th>Find</th> <th>Source</th> <th colspan="3">Action</th> <th>Next line context</th> </tr> </thead> <tbody>${tableRows}</tbody> </table> <div id="hm-controls"> <span>${statusMsg}</span> <div> <button id="hm-cancel" class="mw-ui-button">Cancel</button> <button id="hm-apply" class="hm-btn-apply">Show changes (diff)</button> </div> </div> </div> `); $('#content').prepend($panel); window.scrollTo(0, 0); $('.hm-locate-btn').on('click', function() { $(document).off('mousedown.hmlocate'); const idx = $(this).data('hm-i'); const task = tasks[idx]; const lines = originalWikitext.split('\n'); let charOffset = 0; for (let j = 0; j < task.index; j++) { charOffset += lines[j].length + 1; } $('#hm-panel').hide(); $('#editform').show(); const $textbox = $('#wpTextbox1'); $textbox.textSelection('setSelection', { start: charOffset, end: charOffset + lines[task.index].length }); $textbox.textSelection('scrollToCaretPosition'); const locateNotify = mw.notify("Locating line " + (task.index + 1) + ". Click outside the editor to return.", { tag: 'hm-locate', type: 'success', autoHide: false }); setTimeout(() => { $(document).on('mousedown.hmlocate', function(e) { if (!$(e.target).closest('#editform, .mw-notification-area').length) { $(document).off('mousedown.hmlocate'); Promise.resolve(locateNotify).then(n => n.close()); $('#editform').hide(); $('#hm-panel').show(); } }); }, 200); }); $('#hm-all-keep').on('click', (e) => { e.preventDefault(); $('input[value="keep"]').prop('checked', true); }); $('#hm-all-bold').on('click', (e) => { e.preventDefault(); $('input[value="bold"]').prop('checked', true); }); $('#hm-all-head').on('click', (e) => { e.preventDefault(); $('input[value="head"]').prop('checked', true); }); $('#hm-cancel').on('click', () => { $('#hm-panel').remove(); $('#editform').show(); }); $('#hm-apply').on('click', () => this.applyChanges(tasks, originalWikitext)); }, getProcessedSummary(existingSummary, bolds, heads, spaces) { if (!config.enableSummary) return existingSummary; let mySummary = ""; let isDefault = false; if (config.customSummary) { mySummary = config.customSummary; } else { isDefault = true; if (bolds > 0 || heads > 0) { const detailsArr = []; if (bolds > 0) detailsArr.push(`${bolds} to bold`); if (heads > 0) detailsArr.push(`${heads} to heading`); const detailsStr = detailsArr.length > 0 ? `(${detailsArr.join(', ')}) ` : ""; mySummary = this.DefaultSummary.replace("{details}", detailsStr); if (spaces > 0) { mySummary += " Also handled [[MOS:BLANKLINE]]."; } } else if (spaces > 0) { mySummary = "Handling [[MOS:BLANKLINE]] using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]"; } } if (!mySummary) return existingSummary; const trimmedOld = existingSummary.trim(); if (!trimmedOld) return mySummary; if (/[.!?]$/.test(trimmedOld)) { return trimmedOld + " " + mySummary; } else { const finalSummary = isDefault ? mySummary.charAt(0).toLowerCase() + mySummary.slice(1) : mySummary; return trimmedOld + "; " + finalSummary; } }, applyChanges(tasks, wikitext) { try { let lines = wikitext.split("\n"); let bCount = 0, hCount = 0, wCount = 0; const pseudoTasks = tasks.filter(t => t.type === 'PSEUDO'); for (let i = pseudoTasks.length - 1; i >= 0; i--) { const task = pseudoTasks[i]; const idx = task.index; const action = $('#hm-table tbody tr').filter(`[data-task-index="${idx}"]`).find('input:checked').val(); if (action === 'bold') { let newValue = `'''${task.cleanText}'''`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; bCount++; } else if (action === 'head') { const h = task.suggestedLevel; let newValue = `${h} ${task.cleanText} ${h}`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; hCount++; } } const spaceTasks = tasks.filter(t => t.type === 'WHITESPACE'); for (let i = spaceTasks.length - 1; i >= 0; i--) { const task = spaceTasks[i]; const idx = task.index; if (task.isSmashed) { lines.splice(idx, 0, ""); } else if (task.isExtraSpace) { let backIdx = idx - 1; while (backIdx > 0 && lines[backIdx].trim() === "" && lines[backIdx - 1].trim() === "") { lines.splice(backIdx, 1); backIdx--; } } wCount++; } if (bCount + hCount + wCount === 0) { mw.notify("No changes selected."); $('#hm-panel').remove(); $('#editform').show(); return; } $('#wpTextbox1').textSelection('setContents', lines.join("\n")); const $summary = $('#wpSummary'); $summary.val(this.getProcessedSummary($summary.val(), bCount, hCount, wCount)); $('#hm-panel').remove(); $('#editform').show(); mw.notify(`Headmaster: Fixed ${wCount} spacing issue(s) and converted ${bCount + hCount} heading(s).`); $('html, body').animate({ scrollTop: 0 }, 'fast'); $('#wpDiff').click(); } catch (err) { $('#editform').show(); mw.notify("Headmaster error: " + err.message, { type: 'error' }); } } }; window.Headmaster = Headmaster; mw.loader.using(['mediawiki.util', 'mediawiki.api', 'jquery.textSelection'], () => { $(() => Headmaster.setup()); }); })(); //</nowiki> 42q9j7xe4w0neq64swv22hfz09haqwq 740299 740260 2026-05-03T10:25:26Z Sam Sailor 26820 Test 740299 javascript text/javascript //<nowiki> /* global ComradeLib, mw, $ */ (async function() { try { await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-options.js&action=raw&ctype=text/javascript'); } catch (e) { console.warn("Comrade: Could not load /comrade-options.js, using fallback defaults.", e); } window.ComradeOptions = Object.assign({ version: "0.5.0", excludedTemplates: [], nudgeTimeout: 10000, debugMode: false }, window.ComradeOptions || {}); await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-lib.js&action=raw&ctype=text/javascript'); async function getTargetPage(api, name, type) { const titles = type === 'surname' ? [`List of people with the English surname ${name}`, `List of people with surname ${name}`, `${name} (surname)`, `${name} (name)`, name] : [`List of people with given name ${name}`, `List of people named ${name}`, `${name} (given name)`, `${name} (name)`, name]; const res = await api.get({ action: 'query', titles: titles.join('|'), formatversion: 2 }); if (!res.query || !res.query.pages) return null; return titles.find(t => { const pg = res.query.pages.find(p => p.title === t); return pg && !pg.missing; }); } async function processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean) { const { givens, surnames } = await fetchWikidataNameLabels(entity); const nameParts = tClean.split(' '); const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const primarySurname = hasFamilyNameHatnote ? nameParts[0] : (getSmartSortKey(tClean, entity).split(',')[0] || nameParts[nameParts.length - 1]); for (const name of givens) { if (name.toLowerCase() === primarySurname.toLowerCase()) continue; const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'given'); if (target) await verifyAndNudge(api, name, 'given name', currentTitle, hasShortDesc, isOrphan, target); } const finalSurnames = surnames.length > 0 ? surnames : (nameParts.length >= 2 ? [nameParts[nameParts.length - 1]] : []); for (const name of finalSurnames) { const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'surname'); if (target) await verifyAndNudge(api, name, 'surname', currentTitle, hasShortDesc, isOrphan, target); } } async function verifyAndNudge(api, name, type, currentTitle, hasShortDesc, isOrphan, foundTitle) { const res = await api.get({ action: 'query', prop: 'revisions', titles: foundTitle, rvprop: 'content', formatversion: 2 }); const page = res.query.pages[0]; if (!page || page.missing || !page.revisions) return; const text = page.revisions[0].content; const isNameMatch = /\{\{(Surname|Hndis|Given[ _]name|Forename|Givenname)/i.test(text); const isNameDab = /\{\{(Disambiguation|Dab|Disambig)(?:[^}]*\|(surname|surnames|given[ _]name|given[ _]names)|(?:\s*\}\}))/i.test(text); const isNamePageTitle = foundTitle.includes('List of people with'); if (!isNameMatch && !isNameDab && !isNamePageTitle) return; const escapedTitle = currentTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/ /g, '[ _]'); const alreadyListed = new RegExp('(\\[\\[|\\{\\{anbl\\|[ _]*|\\|)' + escapedTitle, 'i').test(text); if (alreadyListed) return; const $container = $('<div>').addClass('comrade-container').addClass(isOrphan ? 'comrade-nudge' : 'comrade-info'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text(isOrphan ? 'Comrade nudge:' : 'Informative:')); const $content = $('<div>').addClass('comrade-content'); $content.append($('<span>').append(`${type.charAt(0).toUpperCase() + type.slice(1)} not listed at `, $('<a>').attr({ href: mw.util.getUrl(foundTitle), target: '_blank' }).text(foundTitle), "; should it be?")); const snippet = '* {{anbl|' + currentTitle + '}}'; const $snippetWrapper = $('<div>').css({ 'display': 'flex', 'align-items': 'center', 'gap': '10px', 'margin-top': '4px' }); const $instructionSpan = $('<span>').append('Consider adding ', $('<code>').text(snippet)); const $copyBtn = $('<button>').text('Copy & insert').on('click', function() { navigator.clipboard.writeText('\n' + snippet).then(() => { $(this).text('Copied!').prop('disabled', true); const editUrl = mw.util.getUrl(foundTitle, { action: 'edit', summary: 'Adding * {{[[Template:Annotated biography link|anbl]]|[[' + currentTitle + ']]}}' }); window.open(editUrl, '_blank'); }); }); $snippetWrapper.append($instructionSpan, $copyBtn); $content.append($snippetWrapper); if (!hasShortDesc) { $content.append($('<span>').css({ 'color': '#d33', 'font-weight': 'bold', 'margin-top': '5px' }).text('⚠️ Missing short description: Please add a concise one before listing.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } async function checkNamingPrecision(currentTitle, isHuman) { const disambigMatch = currentTitle.match(/^(.+?)(?:, | \()/); if (isHuman || !disambigMatch) return; const baseTitle = disambigMatch[1].trim(); const api = new mw.Api(); try { const baseRes = await api.get({ action: 'query', titles: baseTitle, redirects: 1, formatversion: 2 }); const page = baseRes.query.pages[0]; const baseExists = !page.missing; let baseRedirectsToSelf = false; if (baseRes.query.redirects) { baseRedirectsToSelf = baseRes.query.redirects.some(r => r.to === currentTitle); } const searchRes = await api.get({ action: 'query', list: 'allpages', apprefix: baseTitle, aplimit: 50, formatversion: 2 }); const competitors = searchRes.query.allpages.filter(p => { const t = p.title; return t !== currentTitle && t !== baseTitle && (t.startsWith(baseTitle + ', ') || t.startsWith(baseTitle + ' (')); }); if (!baseExists || baseRedirectsToSelf) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $content = $('<div>').addClass('comrade-content'); if (competitors.length === 0) { $header.append($('<strong>').text('Precision:')); const reason = baseRedirectsToSelf ? "already redirects here" : "is free"; $content.append($('<span>').append(`The base name `, $('<code>').text(baseTitle), ` ${reason}. Consider moving this article.`)); const moveUrl = mw.util.getUrl('Special:MovePage/' + currentTitle, { wpNewTitle: baseTitle, wpReason: 'Unnecessary disambiguation; base name is free/redirects here per [[WP:PRECISION]]' }); $content.append($('<button>').text(`Move to ${baseTitle}`).on('click', () => window.open(moveUrl, '_blank'))); } else { $header.append($('<strong>').text('Observation:')); const state = baseRedirectsToSelf ? 'redirect to this page' : 'redlink'; $content.append($('<span>').append(`Base name `, $('<code>').text(baseTitle), ` has ${competitors.length} competitors, but it is currently a ${state}.`)); $content.append($('<span>').text('Consider if a disambiguation page is needed.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } } catch (e) { console.warn("Comrade: Precision check failed", e); } } async function checkHumanSort(wikitext, entity, currentTitle, tClean, refName) { const dsMatch = wikitext.match(/\{\{(?:DEFAULTSORT|Defaultsort):([^}]+)\}\}/i); const { givens } = await fetchWikidataNameLabels(entity); if (dsMatch) { const currentDS = dsMatch[1].trim(); if (currentDS.includes(',')) { let [lastPart, firstPart] = currentDS.split(',').map(s => s.trim()); if (firstPart.toLowerCase().endsWith(lastPart.toLowerCase())) { let fixedFirst = firstPart.substring(0, firstPart.length - lastPart.length).trim(); let suggestion = `${fixNameCasing(lastPart, refName)}, ${fixNameCasing(fixedFirst, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, "Redundant surname in given name field."); } else if (givens.length > 0 && lastPart.split(' ').length > 1) { const parts = lastPart.split(' '); const misplacedGiven = parts.find(part => givens.some(gn => gn.toLowerCase() === part.toLowerCase())); if (misplacedGiven) { const newSurname = parts.filter(p => p !== misplacedGiven).join(' '); let suggestion = `${fixNameCasing(newSurname, refName)}, ${fixNameCasing(misplacedGiven + ' ' + firstPart, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, `Wikidata suggests "${misplacedGiven}" is a given name.`); } } } } else { const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const nameParts = tClean.split(' '); const targetSortName = hasFamilyNameHatnote ? `${nameParts[0]}, ${nameParts.slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { const $dsMissing = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Add: {{DEFAULTSORT:${targetSortName}}}`).on('click', () => performSortCorrection(targetSortName, "add")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` Tag is missing. `, $btn)); $dsMissing.append($header); ComradeLib.appendDismiss($dsMissing); } } } async function fetchWikidataEntity(qid) { const res = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${qid}&props=claims|descriptions|labels&languages=en&format=json&origin=*`).then(r => r.json()); return res.entities[qid]; } function getSmartSortKey(fullName, entity) { const countryIds = entity.claims?.P27?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const locationIds = entity.claims?.P17?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const placeIds = [...(entity.claims?.P19 || []), ...(entity.claims?.P119 || [])].map(c => c.mainsnak?.datavalue?.value?.id).filter(Boolean); const allRelevantIds = [...countryIds, ...locationIds, ...placeIds]; const birthYear = parseInt(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value?.time?.match(/[+-](\d{4})/)?.[1]) || null; if (fullName.startsWith("Saint ")) return fullName.replace("Saint ", ""); const arabicParticles = /\b(Abu|Abd|Abdel|Abdul|ben|bin|bint)\b/i; if (fullName.match(arabicParticles)) { if (birthYear && birthYear > 1900) { const parts = fullName.split(' '); const binIndex = parts.findIndex(p => p.toLowerCase() === 'bin' || p.toLowerCase() === 'ben'); if (binIndex > 0) return parts.slice(binIndex).join(' ') + ', ' + parts.slice(0, binIndex).join(' '); } else { return fullName; } } const eastAsianQids = ["Q148", "Q865", "Q884", "Q424", "Q17", "Q881"]; if (allRelevantIds.some(id => eastAsianQids.includes(id))) { if (allRelevantIds.includes("Q17") && birthYear && birthYear > 1885) return westernSort(fullName); const parts = fullName.split(' '); if (parts.length > 1) return `${parts[0]}, ${parts.slice(1).join(' ')}`; } return westernSort(fullName); } function westernSort(name) { let cleanName = name; if (name.startsWith("O'")) cleanName = name.replace("O'", "O"); const parts = cleanName.split(' '); if (parts.length < 2) return cleanName; const surname = parts.pop(); if (["Jr.", "Jr", "III", "II", "Sr.", "Sr"].includes(surname)) { const actualSurname = parts.pop(); return `${actualSurname}, ${parts.join(' ')} ${surname}`; } return `${surname}, ${parts.join(' ')}`; } async function performSortCorrection(newName, type) { const api = new mw.Api(); const title = mw.config.get("wgPageName"); try { const data = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = data.query.pages[0].revisions[0].content; const dsRegex = /\{\{\s*(?:DEFAULTSORT|Defaultsort)\s*:[^}]+\}\}/i; const newTag = `{{DEFAULTSORT:${newName}}}`; if (dsRegex.test(content)) { content = content.replace(dsRegex, newTag); } else { const catRegex = /\[\[Category:/i; content = catRegex.test(content) ? content.replace(catRegex, `${newTag}\n[[Category:`) : content.trim() + `\n\n${newTag}`; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Setting DEFAULTSORT to ${newName}`, nocreate: true }); mw.notify(`DEFAULTSORT ${type === "add" ? "added" : "corrected"} to ${newName}!`, { title: 'Comrade Success', type: 'success' }); setTimeout(() => location.reload(), 700); } catch (err) { mw.notify('Failed to save DEFAULTSORT.', { type: 'error' }); } } function renderSortNudge(target, reason) { const $dsNudge = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Correct to: ${target}`).on('click', () => performSortCorrection(target, "format")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` ${reason} `, $btn)); $dsNudge.append($header); ComradeLib.appendDismiss($dsNudge); } async function fetchWikidataNameLabels(entity) { const familyIds = entity.claims?.P734?.map(c => c.mainsnak.datavalue.value.id) || []; const givenIds = entity.claims?.P735?.map(c => c.mainsnak.datavalue.value.id) || []; const allNameIds = [...new Set([...familyIds, ...givenIds])]; if (allNameIds.length === 0) return { givens: [], surnames: [] }; const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetentities', ids: allNameIds.join('|'), props: 'labels', languages: 'en', format: 'json', origin: '*' }); const nameData = await fetch(url).then(r => r.json()); return { givens: givenIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean), surnames: familyIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean) }; } function fixNameCasing(part, referenceName) { return part.split(' ').map(word => { const match = referenceName.match(new RegExp(`\\b${word}\\b`, 'i')); if (match) return match[0]; return referenceName.split(' ').find(tWord => word.toLowerCase().startsWith(tWord.toLowerCase()) || tWord.toLowerCase().startsWith(word.toLowerCase())) || word; }).join(' '); } async function init() { const api = new mw.Api(); const ns = mw.config.get("wgNamespaceNumber"); const action = mw.config.get("wgAction"); if (mw.config.get("wgDBname") !== "enwiki" || action !== "view") return; if (ns === 14) { const $btn = $('<button>').attr('id', 'comrade-audit-btn').text('Audit category quality').css({ 'margin-bottom': '10px', 'padding': '5px 10px', 'cursor': 'pointer' }).on('click', ComradeLib.performCategoryAudit); $('.mw-category-generated').prepend($btn); return; } if (ns !== 0) return; const qid = mw.config.get("wgWikibaseItemId"); const currentTitle = mw.config.get("wgTitle"); try { const [pageData, backlinkData] = await Promise.all([ api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }), api.get({ action: 'query', list: 'backlinks', blfilterredir: 'nonredirects', bllimit: 50, blnamespace: 0, bltitle: mw.config.get("wgPageName"), formatversion: 2 }) ]); const page = pageData.query.pages[0]; if (!page || page.missing || !page.revisions) return; const wikitext = page.revisions[0].content; ComradeLib.checkLeadCapitalization(currentTitle); // Ligature/ASCII-only/diacritic and domain const norms = ComradeLib.getNormalizedTitles(currentTitle); if (norms.ascii) { let label = "ASCII-only"; let category = "R from ASCII-only"; if (/[æÆœŒijIJßẞ]/.test(currentTitle)) { label = "Ligature"; category = "R to ligature"; } else if (currentTitle.normalize("NFD").match(/[\u0300-\u036f]/)) { label = "Diacritic"; category = "R to diacritic"; } await ComradeLib.checkAndRenderRedirect(norms.ascii, currentTitle, category, label); } await ComradeLib.checkDomainRedirect(qid, currentTitle); // Orphan logic const isOrphanTagged = /\{\{\s*(Orphan|Do-attempt|Lonely|Orp|Orphaned article)/i.test(wikitext) || /\| *orphan *=/i.test(wikitext); const backLinkCount = backlinkData.query.backlinks.length; if (isOrphanTagged && backLinkCount >= 1) { const $container = $('<div>').addClass('comrade-container comrade-status'); const $btn = $('<button>').text('Remove orphan tag').on('click', async () => await ComradeLib.performDeorphan()); const $statusText = $('<span>').append($('<strong>').text('Status:'), ` Article has ${backLinkCount} backlink(s).`, $btn); $container.append($('<div>').addClass('comrade-header').append($statusText)); ComradeLib.appendDismiss($container); } // Wikidata/human logic let entity = qid ? await fetchWikidataEntity(qid) : null; let isHuman = entity?.claims?.P31?.some(c => c.mainsnak?.datavalue?.value?.id === "Q5"); await checkNamingPrecision(currentTitle, isHuman); if (isHuman && entity) { const tClean = currentTitle.replace(/\s*\(.*?\)\s*/g, '').trim(); const refName = entity.labels?.en?.value || currentTitle; const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const hasShortDesc = /\{\{\s*[Ss]hort description/i.test(wikitext); const isOrphan = isOrphanTagged && backLinkCount < 1; await ComradeLib.checkShortDescDates(wikitext, entity); await ComradeLib.checkNoShortDesc(wikitext, entity); // Check DEFAULTSORT await checkHumanSort(wikitext, entity, currentTitle, tClean, refName); const longName = ComradeLib.getLongNameFromWikitext(wikitext); if (longName && longName.length > tClean.length) { let sortKey = hasFamilyNameHatnote ? `${longName.split(' ')[0]}, ${longName.split(' ').slice(1).join(' ')}` : getSmartSortKey(longName, entity); const rLongWikitext = `#REDIRECT [[${currentTitle}]]\n\n{{Redirect category shell|\n{{R from long name}}\n}}\n{{DEFAULTSORT:${sortKey}}}`; await ComradeLib.checkAndRenderRedirect(longName, currentTitle, null, "Long name", rLongWikitext); } // Sort name R const targetSortName = hasFamilyNameHatnote ? `${tClean.split(' ')[0]}, ${tClean.split(' ').slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName && targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { let targetPage = currentTitle.includes(' (') ? currentTitle.split(' (')[0] : currentTitle; let rCat = targetPage !== currentTitle ? "R from ambiguous sort name" : "R from sort name"; if (targetSortName.includes(',')) { const p = targetSortName.split(','); rCat += `|${p[0].trim().charAt(0).toUpperCase()}|${p[1].trim().charAt(0).toUpperCase()}`; } await ComradeLib.checkAndRenderRedirect(targetSortName, targetPage, rCat, "Sort name"); } // Name lists await processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean); } // Quality/ORES const isRedirect = !!mw.config.get("wgIsRedirect"); const userExclusions = window.comradeQualityExclusions || []; const allExclusions = [...window.ComradeOptions.excludedTemplates, ...userExclusions]; const exclusionRegexString = allExclusions.map(t => t.replace("Template:", "").replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'); const exclusionRegex = new RegExp(exclusionRegexString, 'i'); if (isRedirect || exclusionRegex.test(wikitext)) { console.log("Comrade check skipped: Page is a redirect or excluded via options."); return; } ComradeLib.checkQualityConsistency(); } catch (err) { console.error("Comrade error:", err); } } init(); })(); (function() { if (window.Headmaster) return; const VERSION = "0.9.2.1"; const defaultNS = [0, 118]; const userNS = window.headmaster_ns || []; const config = { menu: window.headmaster_menu || 'p-cactions', enableSummary: window.headmaster_do_summary !== false, customSummary: window.headmaster_summary || "", allowedNamespaces: Array.from(new Set([...defaultNS, ...userNS])), autoScan: window.headmaster_auto_scan !== false, autoRun: window.headmaster_auto_run === false }; const Headmaster = { VERSION: VERSION, DefaultSummary: "Converting [[MOS:PSEUDOHEAD|pseudo-headings]] {details}using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]. Semicolon markup is reserved for [[MOS:DLIST|description lists]].", styleInjected: false, css: ` #hm-panel { clear: both; border: 1px solid #a2a9b1; padding: 15px; background: #f8f9fa; margin-bottom: 1.5em; border-radius: 2px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } #hm-table { width: 100%; border-collapse: collapse; background: white; margin-top: 10px; } #hm-table th { background: #f2f2f2; border: 1px solid #a2a9b1; padding: 8px; text-align: left; } #hm-table td { border: 1px solid #a2a9b1; padding: 8px; vertical-align: middle; } .hm-context { font-family: 'Courier New', monospace; font-size: 0.9em; color: #54595d; background: #fdfdfd; } #hm-controls { display: flex; justify-content: space-between; align-items: center; margin-top: 15px; } #hm-controls button { margin-left: 10px; padding: 6px 16px; cursor: pointer; border-radius: 2px; } .hm-btn-apply { background: #36c; color: white; border: 1px solid #36c; font-weight: bold; } .hm-btn-apply:hover { background: #447ff5; } .hm-global-selector { font-size: 0.9em; color: #202122; background: #eaecf0; padding: 8px; border-radius: 2px; border: 1px solid #a2a9b1; } .hm-global-selector a { font-weight: bold; text-decoration: none; color: #36c; } .hm-global-selector a:hover { text-decoration: underline; } .hm-locate-btn { cursor: pointer; color: #36c; border: 1px solid #a2a9b1; background: #f8f9fa; padding: 2px 6px; font-size: 0.85em; border-radius: 2px; } .hm-locate-btn:hover { background: #fff; border-color: #36c; } `, setup() { if (!config.allowedNamespaces.includes(mw.config.get("wgNamespaceNumber"))) return; const action = mw.config.get("wgAction"); this.addPortlet(action); if (action === 'view' && (config.autoScan || config.autoRun)) { this.silentScan(); } if (mw.util.getParamValue('headmaster') === '1' && ['edit', 'submit'].includes(action)) { const params = new URLSearchParams(window.location.search); params.delete('headmaster'); const searchString = params.toString(); const newUrl = window.location.pathname + (searchString ? '?' + searchString : ''); window.history.replaceState(null, '', newUrl); this.init(); } }, addPortlet(action) { const link = mw.util.addPortletLink(config.menu, '#', 'Headmaster', 'ca-hm', 'Interactively convert pseudo-headings'); if (link) { $(link).on('click', (e) => { e.preventDefault(); if (action === 'view') { this.redirectToEdit(); } else if (['edit', 'submit'].includes(action)) { this.init(); } }); } }, redirectToEdit() { window.location.href = mw.util.getUrl(mw.config.get("wgPageName"), { action: 'edit', headmaster: '1' }); }, silentScan() { new mw.Api().get({ action: 'query', prop: 'revisions', titles: mw.config.get('wgPageName'), rvprop: 'content', rvlimit: 1, formatversion: 2 }).done((data) => { const page = data.query.pages[0]; if (!page || !page.revisions) return; const wikitext = page.revisions[0].content; const tasks = this.analyzeText(wikitext); if (tasks.length > 0) { if (config.autoRun) { this.redirectToEdit(); } else { this.notifyDiscovery(tasks.length); } } }).fail((err) => { mw.log.warn("Headmaster: silentScan failed", err); }); }, notifyDiscovery(count) { const $msg = $('<span>').text(`Headmaster: Found ${count} issues. `).append($('<a>').text('Run conversion').css({ fontWeight: 'bold', cursor: 'pointer' }).on('click', () => this.redirectToEdit())); mw.notify($msg, { tag: 'hm-discovery', autoHide: false }); }, init() { if (!this.styleInjected) { mw.loader.addStyleTag(this.css); this.styleInjected = true; } const $textbox = $('#wpTextbox1'); const wikitext = $textbox.textSelection('getContents'); if (!wikitext) { mw.notify("Textbox is empty or not found.", { type: 'error' }); return; } const tasks = this.analyzeText(wikitext); if (tasks.length === 0) { mw.notify("No issues found."); return; } this.showUI(tasks, wikitext); }, analyzeText(wikitext) { const lines = wikitext.split("\n"); const tasks = []; let currentDepth = 1; for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); const headingMatch = line.match(/^(={2,6})\s*(.+?)\s*\1\s*$/); if (headingMatch) { currentDepth = headingMatch[1].length; const prevLine = i > 0 ? lines[i - 1].trim() : null; const isSmashed = prevLine !== null && prevLine !== ""; const isExtraSpace = i > 1 && lines[i - 1].trim() === "" && lines[i - 2].trim() === ""; if (isSmashed || isExtraSpace) { tasks.push({ index: i, type: 'WHITESPACE', original: lines[i], isSmashed: isSmashed, isExtraSpace: isExtraSpace }); } } else if (line.startsWith(';') && !line.startsWith(';;')) { const nextLine = lines[i + 1] || ""; if (!nextLine.trim().startsWith(':')) { const cleanText = line.substring(1).replace(/\s*:.*$/, "").trim(); const suggestedLevel = "=".repeat(Math.min(currentDepth + 1, 6)); tasks.push({ index: i, type: 'PSEUDO', original: line, cleanText: cleanText, context: nextLine.substring(0, 60).trim() + (nextLine.length > 60 ? "..." : ""), suggestedLevel: suggestedLevel }); } } } return tasks; }, showUI(tasks, originalWikitext) { $('#hm-panel').remove(); $('#editform').hide(); const visibleTasks = tasks.filter(t => t.type === 'PSEUDO'); const pseudoCount = visibleTasks.length; const whitespaceCount = tasks.filter(t => t.type === 'WHITESPACE').length; let statusMsg = ""; const s = (n) => n !== 1 ? 's' : ''; if (pseudoCount > 0) { statusMsg = `Found <strong>${pseudoCount}</strong> possible pseudo-heading${s(pseudoCount)}.`; if (whitespaceCount > 0) { statusMsg += ` Also fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } } else { statusMsg = `Did not find any pseudo-headings, but fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } const tableRows = pseudoCount > 0 ? visibleTasks.map((task, i) => ` <tr data-task-index="${task.index}"> <td><button class="hm-locate-btn" data-hm-i="${tasks.indexOf(task)}" title="Show in editor">Locate</button></td> <td class="hm-context"><code>${mw.html.escape(task.original)}</code></td> <td><label><input type="radio" name="hm-opt-${i}" value="keep"> Keep</label></td> <td><label><input type="radio" name="hm-opt-${i}" value="bold" checked> <b>Bold</b></label></td> <td><label><input type="radio" name="hm-opt-${i}" value="head"> Heading (${task.suggestedLevel.length})</label></td> <td class="hm-context">${mw.html.escape(task.context || "(end of page)")}</td> </tr> `).join("") : `<tr><td colspan="6" style="text-align:center; padding: 2em; color: #54595d; background: #f8f9fa;"> No interactive heading changes detected. Only background spacing normalization will be applied. </td></tr>`; const $panel = $(` <div id="hm-panel"> <h3 style="margin-top:0">Headmaster v${this.VERSION}: Review pseudo-headings</h3> <div class="hm-global-selector" ${pseudoCount === 0 ? 'style="display:none"' : ''}> <strong>Bulk action:</strong> <a href="#" id="hm-all-keep">Set all to Keep</a> | <a href="#" id="hm-all-bold">Set all to Bold</a> | <a href="#" id="hm-all-head">Set all to Heading</a> </div> <table id="hm-table"> <thead> <tr> <th>Find</th> <th>Source</th> <th colspan="3">Action</th> <th>Next line context</th> </tr> </thead> <tbody>${tableRows}</tbody> </table> <div id="hm-controls"> <span>${statusMsg}</span> <div> <button id="hm-cancel" class="mw-ui-button">Cancel</button> <button id="hm-apply" class="hm-btn-apply">Show changes (diff)</button> </div> </div> </div> `); $('#content').prepend($panel); window.scrollTo(0, 0); $('.hm-locate-btn').on('click', function() { $(document).off('mousedown.hmlocate'); const idx = $(this).data('hm-i'); const task = tasks[idx]; const lines = originalWikitext.split('\n'); let charOffset = 0; for (let j = 0; j < task.index; j++) { charOffset += lines[j].length + 1; } $('#hm-panel').hide(); $('#editform').show(); const $textbox = $('#wpTextbox1'); $textbox.textSelection('setSelection', { start: charOffset, end: charOffset + lines[task.index].length }); $textbox.textSelection('scrollToCaretPosition'); const locateNotify = mw.notify("Locating line " + (task.index + 1) + ". Click outside the editor to return.", { tag: 'hm-locate', type: 'success', autoHide: false }); setTimeout(() => { $(document).on('mousedown.hmlocate', function(e) { if (!$(e.target).closest('#editform, .mw-notification-area').length) { $(document).off('mousedown.hmlocate'); Promise.resolve(locateNotify).then(n => n.close()); $('#editform').hide(); $('#hm-panel').show(); } }); }, 200); }); $('#hm-all-keep').on('click', (e) => { e.preventDefault(); $('input[value="keep"]').prop('checked', true); }); $('#hm-all-bold').on('click', (e) => { e.preventDefault(); $('input[value="bold"]').prop('checked', true); }); $('#hm-all-head').on('click', (e) => { e.preventDefault(); $('input[value="head"]').prop('checked', true); }); $('#hm-cancel').on('click', () => { $('#hm-panel').remove(); $('#editform').show(); }); $('#hm-apply').on('click', () => this.applyChanges(tasks, originalWikitext)); }, getProcessedSummary(existingSummary, bolds, heads, spaces) { if (!config.enableSummary) return existingSummary; let mySummary = ""; let isDefault = false; if (config.customSummary) { mySummary = config.customSummary; } else { isDefault = true; if (bolds > 0 || heads > 0) { const detailsArr = []; if (bolds > 0) detailsArr.push(`${bolds} to bold`); if (heads > 0) detailsArr.push(`${heads} to heading`); const detailsStr = detailsArr.length > 0 ? `(${detailsArr.join(', ')}) ` : ""; mySummary = this.DefaultSummary.replace("{details}", detailsStr); if (spaces > 0) { mySummary += " Also handled [[MOS:BLANKLINE]]."; } } else if (spaces > 0) { mySummary = "Handling [[MOS:BLANKLINE]] using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]"; } } if (!mySummary) return existingSummary; const trimmedOld = existingSummary.trim(); if (!trimmedOld) return mySummary; if (/[.!?]$/.test(trimmedOld)) { return trimmedOld + " " + mySummary; } else { const finalSummary = isDefault ? mySummary.charAt(0).toLowerCase() + mySummary.slice(1) : mySummary; return trimmedOld + "; " + finalSummary; } }, applyChanges(tasks, wikitext) { try { let lines = wikitext.split("\n"); let bCount = 0, hCount = 0, wCount = 0; const pseudoTasks = tasks.filter(t => t.type === 'PSEUDO'); for (let i = pseudoTasks.length - 1; i >= 0; i--) { const task = pseudoTasks[i]; const idx = task.index; const action = $('#hm-table tbody tr').filter(`[data-task-index="${idx}"]`).find('input:checked').val(); if (action === 'bold') { let newValue = `'''${task.cleanText}'''`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; bCount++; } else if (action === 'head') { const h = task.suggestedLevel; let newValue = `${h} ${task.cleanText} ${h}`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; hCount++; } } const spaceTasks = tasks.filter(t => t.type === 'WHITESPACE'); for (let i = spaceTasks.length - 1; i >= 0; i--) { const task = spaceTasks[i]; const idx = task.index; if (task.isSmashed) { lines.splice(idx, 0, ""); } else if (task.isExtraSpace) { let backIdx = idx - 1; while (backIdx > 0 && lines[backIdx].trim() === "" && lines[backIdx - 1].trim() === "") { lines.splice(backIdx, 1); backIdx--; } } wCount++; } if (bCount + hCount + wCount === 0) { mw.notify("No changes selected."); $('#hm-panel').remove(); $('#editform').show(); return; } $('#wpTextbox1').textSelection('setContents', lines.join("\n")); const $summary = $('#wpSummary'); $summary.val(this.getProcessedSummary($summary.val(), bCount, hCount, wCount)); $('#hm-panel').remove(); $('#editform').show(); mw.notify(`Headmaster: Fixed ${wCount} spacing issue(s) and converted ${bCount + hCount} heading(s).`); $('html, body').animate({ scrollTop: 0 }, 'fast'); $('#wpDiff').click(); } catch (err) { $('#editform').show(); mw.notify("Headmaster error: " + err.message, { type: 'error' }); } } }; window.Headmaster = Headmaster; mw.loader.using(['mediawiki.util', 'mediawiki.api', 'jquery.textSelection'], () => { $(() => Headmaster.setup()); }); })(); //</nowiki> 16rj3eyihc2sqyhq1kdyjgf5aqb2gz5 740339 740299 2026-05-03T11:25:05Z Sam Sailor 26820 Test 740339 javascript text/javascript //<nowiki> /* global ComradeLib, mw, $ */ (async function() { try { await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-options.js&action=raw&ctype=text/javascript'); } catch (e) { console.warn("Comrade: Could not load /comrade-options.js, using fallback defaults.", e); } window.ComradeOptions = Object.assign({ version: "0.5.0", excludedTemplates: [], nudgeTimeout: 10000, debugMode: false }, window.ComradeOptions || {}); await mw.loader.getScript('https://test.wikipedia.org/w/index.php?title=User:Sam_Sailor/test.js/comrade-lib.js&action=raw&ctype=text/javascript'); async function getTargetPage(api, name, type) { const titles = type === 'surname' ? [`List of people with the English surname ${name}`, `List of people with surname ${name}`, `${name} (surname)`, `${name} (name)`, name] : [`List of people with given name ${name}`, `List of people named ${name}`, `${name} (given name)`, `${name} (name)`, name]; const res = await api.get({ action: 'query', titles: titles.join('|'), formatversion: 2 }); if (!res.query || !res.query.pages) return null; return titles.find(t => { const pg = res.query.pages.find(p => p.title === t); return pg && !pg.missing; }); } async function processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean) { const { givens, surnames } = await fetchWikidataNameLabels(entity); const nameParts = tClean.split(' '); const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const primarySurname = hasFamilyNameHatnote ? nameParts[0] : (getSmartSortKey(tClean, entity).split(',')[0] || nameParts[nameParts.length - 1]); for (const name of givens) { if (name.toLowerCase() === primarySurname.toLowerCase()) continue; const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'given'); if (target) await verifyAndNudge(api, name, 'given name', currentTitle, hasShortDesc, isOrphan, target); } const finalSurnames = surnames.length > 0 ? surnames : (nameParts.length >= 2 ? [nameParts[nameParts.length - 1]] : []); for (const name of finalSurnames) { const nameInTitle = new RegExp('\\b' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\b', 'i').test(tClean); if (!nameInTitle) continue; const target = await getTargetPage(api, name, 'surname'); if (target) await verifyAndNudge(api, name, 'surname', currentTitle, hasShortDesc, isOrphan, target); } } async function verifyAndNudge(api, name, type, currentTitle, hasShortDesc, isOrphan, foundTitle) { const res = await api.get({ action: 'query', prop: 'revisions', titles: foundTitle, rvprop: 'content', formatversion: 2 }); const page = res.query.pages[0]; if (!page || page.missing || !page.revisions) return; const text = page.revisions[0].content; const isNameMatch = /\{\{(Surname|Hndis|Given[ _]name|Forename|Givenname)/i.test(text); const isNameDab = /\{\{(Disambiguation|Dab|Disambig)(?:[^}]*\|(surname|surnames|given[ _]name|given[ _]names)|(?:\s*\}\}))/i.test(text); const isNamePageTitle = foundTitle.includes('List of people with'); if (!isNameMatch && !isNameDab && !isNamePageTitle) return; const escapedTitle = currentTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/ /g, '[ _]'); const alreadyListed = new RegExp('(\\[\\[|\\{\\{anbl\\|[ _]*|\\|)' + escapedTitle, 'i').test(text); if (alreadyListed) return; const $container = $('<div>').addClass('comrade-container').addClass(isOrphan ? 'comrade-nudge' : 'comrade-info'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text(isOrphan ? 'Comrade nudge:' : 'Informative:')); const $content = $('<div>').addClass('comrade-content'); $content.append($('<span>').append(`${type.charAt(0).toUpperCase() + type.slice(1)} not listed at `, $('<a>').attr({ href: mw.util.getUrl(foundTitle), target: '_blank' }).text(foundTitle), "; should it be?")); const snippet = '* {{anbl|' + currentTitle + '}}'; const $snippetWrapper = $('<div>').css({ 'display': 'flex', 'align-items': 'center', 'gap': '10px', 'margin-top': '4px' }); const $instructionSpan = $('<span>').append('Consider adding ', $('<code>').text(snippet)); const $copyBtn = $('<button>').text('Copy & insert').on('click', function() { navigator.clipboard.writeText('\n' + snippet).then(() => { $(this).text('Copied!').prop('disabled', true); const editUrl = mw.util.getUrl(foundTitle, { action: 'edit', summary: 'Adding * {{[[Template:Annotated biography link|anbl]]|[[' + currentTitle + ']]}}' }); window.open(editUrl, '_blank'); }); }); $snippetWrapper.append($instructionSpan, $copyBtn); $content.append($snippetWrapper); if (!hasShortDesc) { $content.append($('<span>').css({ 'color': '#d33', 'font-weight': 'bold', 'margin-top': '5px' }).text('⚠️ Missing short description: Please add a concise one before listing.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } async function checkNamingPrecision(currentTitle, isHuman) { const disambigMatch = currentTitle.match(/^(.+?)(?:, | \()/); if (isHuman || !disambigMatch) return; const baseTitle = disambigMatch[1].trim(); const api = new mw.Api(); try { const baseRes = await api.get({ action: 'query', titles: baseTitle, redirects: 1, formatversion: 2 }); const page = baseRes.query.pages[0]; const baseExists = !page.missing; let baseRedirectsToSelf = false; if (baseRes.query.redirects) { baseRedirectsToSelf = baseRes.query.redirects.some(r => r.to === currentTitle); } const searchRes = await api.get({ action: 'query', list: 'allpages', apprefix: baseTitle, aplimit: 50, formatversion: 2 }); const competitors = searchRes.query.allpages.filter(p => { const t = p.title; return t !== currentTitle && t !== baseTitle && (t.startsWith(baseTitle + ', ') || t.startsWith(baseTitle + ' (')); }); if (!baseExists || baseRedirectsToSelf) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $content = $('<div>').addClass('comrade-content'); if (competitors.length === 0) { $header.append($('<strong>').text('Precision:')); const reason = baseRedirectsToSelf ? "already redirects here" : "is free"; $content.append($('<span>').append(`The base name `, $('<code>').text(baseTitle), ` ${reason}. Consider moving this article.`)); const moveUrl = mw.util.getUrl('Special:MovePage/' + currentTitle, { wpNewTitle: baseTitle, wpReason: 'Unnecessary disambiguation; base name is free/redirects here per [[WP:PRECISION]]' }); $content.append($('<button>').text(`Move to ${baseTitle}`).on('click', () => window.open(moveUrl, '_blank'))); } else { $header.append($('<strong>').text('Observation:')); const state = baseRedirectsToSelf ? 'redirect to this page' : 'redlink'; $content.append($('<span>').append(`Base name `, $('<code>').text(baseTitle), ` has ${competitors.length} competitors, but it is currently a ${state}.`)); $content.append($('<span>').text('Consider if a disambiguation page is needed.')); } $container.append($header, $content); ComradeLib.appendDismiss($container); } } catch (e) { console.warn("Comrade: Precision check failed", e); } } async function checkHumanSort(wikitext, entity, currentTitle, tClean, refName) { const dsMatch = wikitext.match(/\{\{(?:DEFAULTSORT|Defaultsort):([^}]+)\}\}/i); const { givens } = await fetchWikidataNameLabels(entity); if (dsMatch) { const currentDS = dsMatch[1].trim(); if (currentDS.includes(',')) { let [lastPart, firstPart] = currentDS.split(',').map(s => s.trim()); if (firstPart.toLowerCase().endsWith(lastPart.toLowerCase())) { let fixedFirst = firstPart.substring(0, firstPart.length - lastPart.length).trim(); let suggestion = `${fixNameCasing(lastPart, refName)}, ${fixNameCasing(fixedFirst, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, "Redundant surname in given name field."); } else if (givens.length > 0 && lastPart.split(' ').length > 1) { const parts = lastPart.split(' '); const misplacedGiven = parts.find(part => givens.some(gn => gn.toLowerCase() === part.toLowerCase())); if (misplacedGiven) { const newSurname = parts.filter(p => p !== misplacedGiven).join(' '); let suggestion = `${fixNameCasing(newSurname, refName)}, ${fixNameCasing(misplacedGiven + ' ' + firstPart, refName)}`; if (suggestion !== currentDS) renderSortNudge(suggestion, `Wikidata suggests "${misplacedGiven}" is a given name.`); } } } } else { const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const nameParts = tClean.split(' '); const targetSortName = hasFamilyNameHatnote ? `${nameParts[0]}, ${nameParts.slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { const $dsMissing = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Add: {{DEFAULTSORT:${targetSortName}}}`).on('click', () => performSortCorrection(targetSortName, "add")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` Tag is missing. `, $btn)); $dsMissing.append($header); ComradeLib.appendDismiss($dsMissing); } } } async function fetchWikidataEntity(qid) { const res = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${qid}&props=claims|descriptions|labels&languages=en&format=json&origin=*`).then(r => r.json()); return res.entities[qid]; } function getSmartSortKey(fullName, entity) { const countryIds = entity.claims?.P27?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const locationIds = entity.claims?.P17?.map(c => c.mainsnak?.datavalue?.value?.id) || []; const placeIds = [...(entity.claims?.P19 || []), ...(entity.claims?.P119 || [])].map(c => c.mainsnak?.datavalue?.value?.id).filter(Boolean); const allRelevantIds = [...countryIds, ...locationIds, ...placeIds]; const birthYear = parseInt(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value?.time?.match(/[+-](\d{4})/)?.[1]) || null; if (fullName.startsWith("Saint ")) return fullName.replace("Saint ", ""); const arabicParticles = /\b(Abu|Abd|Abdel|Abdul|ben|bin|bint)\b/i; if (fullName.match(arabicParticles)) { if (birthYear && birthYear > 1900) { const parts = fullName.split(' '); const binIndex = parts.findIndex(p => p.toLowerCase() === 'bin' || p.toLowerCase() === 'ben'); if (binIndex > 0) return parts.slice(binIndex).join(' ') + ', ' + parts.slice(0, binIndex).join(' '); } else { return fullName; } } const eastAsianQids = ["Q148", "Q865", "Q884", "Q424", "Q17", "Q881"]; if (allRelevantIds.some(id => eastAsianQids.includes(id))) { if (allRelevantIds.includes("Q17") && birthYear && birthYear > 1885) return westernSort(fullName); const parts = fullName.split(' '); if (parts.length > 1) return `${parts[0]}, ${parts.slice(1).join(' ')}`; } return westernSort(fullName); } function westernSort(name) { let cleanName = name; if (name.startsWith("O'")) cleanName = name.replace("O'", "O"); const parts = cleanName.split(' '); if (parts.length < 2) return cleanName; const surname = parts.pop(); if (["Jr.", "Jr", "III", "II", "Sr.", "Sr"].includes(surname)) { const actualSurname = parts.pop(); return `${actualSurname}, ${parts.join(' ')} ${surname}`; } return `${surname}, ${parts.join(' ')}`; } async function performSortCorrection(newName, type) { const api = new mw.Api(); const title = mw.config.get("wgPageName"); try { const data = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = data.query.pages[0].revisions[0].content; const dsRegex = /\{\{\s*(?:DEFAULTSORT|Defaultsort)\s*:[^}]+\}\}/i; const newTag = `{{DEFAULTSORT:${newName}}}`; if (dsRegex.test(content)) { content = content.replace(dsRegex, newTag); } else { const catRegex = /\[\[Category:/i; content = catRegex.test(content) ? content.replace(catRegex, `${newTag}\n[[Category:`) : content.trim() + `\n\n${newTag}`; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Setting DEFAULTSORT to ${newName}`, nocreate: true }); mw.notify(`DEFAULTSORT ${type === "add" ? "added" : "corrected"} to ${newName}!`, { title: 'Comrade Success', type: 'success' }); setTimeout(() => location.reload(), 700); } catch (err) { mw.notify('Failed to save DEFAULTSORT.', { type: 'error' }); } } function renderSortNudge(target, reason) { const $dsNudge = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header'); const $btn = $('<button>').text(`Correct to: ${target}`).on('click', () => performSortCorrection(target, "format")); $header.append($('<div>').append($('<strong>').text('DEFAULTSORT:'), ` ${reason} `, $btn)); $dsNudge.append($header); ComradeLib.appendDismiss($dsNudge); } async function fetchWikidataNameLabels(entity) { const familyIds = entity.claims?.P734?.map(c => c.mainsnak.datavalue.value.id) || []; const givenIds = entity.claims?.P735?.map(c => c.mainsnak.datavalue.value.id) || []; const allNameIds = [...new Set([...familyIds, ...givenIds])]; if (allNameIds.length === 0) return { givens: [], surnames: [] }; const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetentities', ids: allNameIds.join('|'), props: 'labels', languages: 'en', format: 'json', origin: '*' }); const nameData = await fetch(url).then(r => r.json()); return { givens: givenIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean), surnames: familyIds.map(id => nameData.entities[id]?.labels?.en?.value).filter(Boolean) }; } function fixNameCasing(part, referenceName) { return part.split(' ').map(word => { const match = referenceName.match(new RegExp(`\\b${word}\\b`, 'i')); if (match) return match[0]; return referenceName.split(' ').find(tWord => word.toLowerCase().startsWith(tWord.toLowerCase()) || tWord.toLowerCase().startsWith(word.toLowerCase())) || word; }).join(' '); } async function init() { const api = new mw.Api(); const ns = mw.config.get("wgNamespaceNumber"); const action = mw.config.get("wgAction"); if (mw.config.get("wgDBname") !== "enwiki" || action !== "view") return; if (ns === 14) { const $btn = $('<button>').attr('id', 'comrade-audit-btn').text('Audit category quality').css({ 'margin-bottom': '10px', 'padding': '5px 10px', 'cursor': 'pointer' }).on('click', ComradeLib.performCategoryAudit); $('.mw-category-generated').prepend($btn); return; } if (ns !== 0) return; const qid = mw.config.get("wgWikibaseItemId"); const currentTitle = mw.config.get("wgTitle"); try { const [pageData, backlinkData] = await Promise.all([ api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }), api.get({ action: 'query', list: 'backlinks', blfilterredir: 'nonredirects', bllimit: 50, blnamespace: 0, bltitle: mw.config.get("wgPageName"), formatversion: 2 }) ]); const page = pageData.query.pages[0]; if (!page || page.missing || !page.revisions) return; const wikitext = page.revisions[0].content; ComradeLib.checkLeadCapitalization(currentTitle); // Ligature/ASCII-only/diacritic and domain const norms = ComradeLib.getNormalizedTitles(currentTitle); if (norms.ascii) { let label = "ASCII-only"; let category = "R from ASCII-only"; if (/[æÆœŒijIJßẞ]/.test(currentTitle)) { label = "Ligature"; category = "R to ligature"; } else if (currentTitle.normalize("NFD").match(/[\u0300-\u036f]/)) { label = "Diacritic"; category = "R to diacritic"; } await ComradeLib.checkAndRenderRedirect(norms.ascii, currentTitle, category, label); } await ComradeLib.checkDomainRedirect(qid, currentTitle); // Orphan logic const isOrphanTagged = /\{\{\s*(Orphan|Do-attempt|Lonely|Orp|Orphaned article)/i.test(wikitext) || /\| *orphan *=/i.test(wikitext); const backLinkCount = backlinkData.query.backlinks.length; if (isOrphanTagged && backLinkCount >= 1) { const $container = $('<div>').addClass('comrade-container comrade-status'); const $btn = $('<button>').text('Remove orphan tag').on('click', async () => await ComradeLib.performDeorphan()); const $statusText = $('<span>').append($('<strong>').text('Status:'), ` Article has ${backLinkCount} backlink(s).`, $btn); $container.append($('<div>').addClass('comrade-header').append($statusText)); ComradeLib.appendDismiss($container); } // Wikidata/human logic let entity = qid ? await fetchWikidataEntity(qid) : null; let isHuman = entity?.claims?.P31?.some(c => c.mainsnak?.datavalue?.value?.id === "Q5"); await checkNamingPrecision(currentTitle, isHuman); if (isHuman && entity) { const tClean = currentTitle.replace(/\s*\(.*?\)\s*/g, '').trim(); const refName = entity.labels?.en?.value || currentTitle; const hasFamilyNameHatnote = /\{\{family[ _]name[ _]hatnote/i.test(wikitext); const hasShortDesc = /\{\{\s*[Ss]hort description/i.test(wikitext); const isOrphan = isOrphanTagged && backLinkCount < 1; await ComradeLib.checkShortDescDates(wikitext, entity); await ComradeLib.checkNoShortDesc(wikitext, entity); // Check DEFAULTSORT await checkHumanSort(wikitext, entity, currentTitle, tClean, refName); const longName = ComradeLib.getLongNameFromWikitext(wikitext); if (longName && longName.length > tClean.length) { let sortKey = hasFamilyNameHatnote ? `${longName.split(' ')[0]}, ${longName.split(' ').slice(1).join(' ')}` : getSmartSortKey(longName, entity); const rLongWikitext = `#REDIRECT [[${currentTitle}]]\n\n{{Redirect category shell|\n{{R from long name}}\n}}\n{{DEFAULTSORT:${sortKey}}}`; await ComradeLib.checkAndRenderRedirect(longName, currentTitle, null, "Long name", rLongWikitext); } // Sort name R const targetSortName = hasFamilyNameHatnote ? `${tClean.split(' ')[0]}, ${tClean.split(' ').slice(1).join(' ')}` : getSmartSortKey(tClean, entity); if (targetSortName && targetSortName.toLowerCase() !== currentTitle.toLowerCase()) { let targetPage = currentTitle.includes(' (') ? currentTitle.split(' (')[0] : currentTitle; let rCat = targetPage !== currentTitle ? "R from ambiguous sort name" : "R from sort name"; if (targetSortName.includes(',')) { const p = targetSortName.split(','); rCat += `|${p[0].trim().charAt(0).toUpperCase()}|${p[1].trim().charAt(0).toUpperCase()}`; } await ComradeLib.checkAndRenderRedirect(targetSortName, targetPage, rCat, "Sort name"); } // Name lists await processHumanNameLists(api, entity, wikitext, currentTitle, hasShortDesc, isOrphan, tClean); } // Quality/ORES const isRedirect = !!mw.config.get("wgIsRedirect"); const userExclusions = window.comradeQualityExclusions || []; const allExclusions = [...window.ComradeOptions.excludedTemplates, ...userExclusions]; const exclusionRegexString = allExclusions.map(t => t.replace("Template:", "").replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'); const exclusionRegex = new RegExp(exclusionRegexString, 'i'); if (isRedirect || exclusionRegex.test(wikitext)) { console.log("Comrade check skipped: Page is a redirect or excluded via options."); return; } ComradeLib.checkQualityConsistency(); } catch (err) { console.error("Comrade error:", err); } } init(); })(); (function() { if (window.Headmaster) return; const VERSION = "0.9.2.1"; const defaultNS = [0, 118]; const userNS = window.headmaster_ns || []; const config = { menu: window.headmaster_menu || 'p-cactions', enableSummary: window.headmaster_do_summary !== false, customSummary: window.headmaster_summary || "", allowedNamespaces: Array.from(new Set([...defaultNS, ...userNS])), autoScan: window.headmaster_auto_scan !== false, autoRun: window.headmaster_auto_run === false }; const Headmaster = { VERSION: VERSION, DefaultSummary: "Converting [[MOS:PSEUDOHEAD|pseudo-headings]] {details}using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]. Semicolon markup is reserved for [[MOS:DLIST|description lists]]", styleInjected: false, css: ` #hm-panel { clear: both; border: 1px solid #a2a9b1; padding: 15px; background: #f8f9fa; margin-bottom: 1.5em; border-radius: 2px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } #hm-table { width: 100%; border-collapse: collapse; background: white; margin-top: 10px; } #hm-table th { background: #f2f2f2; border: 1px solid #a2a9b1; padding: 8px; text-align: left; } #hm-table td { border: 1px solid #a2a9b1; padding: 8px; vertical-align: middle; } .hm-context { font-family: 'Courier New', monospace; font-size: 0.9em; color: #54595d; background: #fdfdfd; } #hm-controls { display: flex; justify-content: space-between; align-items: center; margin-top: 15px; } #hm-controls button { margin-left: 10px; padding: 6px 16px; cursor: pointer; border-radius: 2px; } .hm-btn-apply { background: #36c; color: white; border: 1px solid #36c; font-weight: bold; } .hm-btn-apply:hover { background: #447ff5; } .hm-global-selector { font-size: 0.9em; color: #202122; background: #eaecf0; padding: 8px; border-radius: 2px; border: 1px solid #a2a9b1; } .hm-global-selector a { font-weight: bold; text-decoration: none; color: #36c; } .hm-global-selector a:hover { text-decoration: underline; } .hm-locate-btn { cursor: pointer; color: #36c; border: 1px solid #a2a9b1; background: #f8f9fa; padding: 2px 6px; font-size: 0.85em; border-radius: 2px; } .hm-locate-btn:hover { background: #fff; border-color: #36c; } `, setup() { if (!config.allowedNamespaces.includes(mw.config.get("wgNamespaceNumber"))) return; const action = mw.config.get("wgAction"); this.addPortlet(action); if (action === 'view' && (config.autoScan || config.autoRun)) { this.silentScan(); } if (mw.util.getParamValue('headmaster') === '1' && ['edit', 'submit'].includes(action)) { const params = new URLSearchParams(window.location.search); params.delete('headmaster'); const searchString = params.toString(); const newUrl = window.location.pathname + (searchString ? '?' + searchString : ''); window.history.replaceState(null, '', newUrl); this.init(); } }, addPortlet(action) { const link = mw.util.addPortletLink(config.menu, '#', 'Headmaster', 'ca-hm', 'Interactively convert pseudo-headings'); if (link) { $(link).on('click', (e) => { e.preventDefault(); if (action === 'view') { this.redirectToEdit(); } else if (['edit', 'submit'].includes(action)) { this.init(); } }); } }, redirectToEdit() { window.location.href = mw.util.getUrl(mw.config.get("wgPageName"), { action: 'edit', headmaster: '1' }); }, silentScan() { new mw.Api().get({ action: 'query', prop: 'revisions', titles: mw.config.get('wgPageName'), rvprop: 'content', rvlimit: 1, formatversion: 2 }).done((data) => { const page = data.query.pages[0]; if (!page || !page.revisions) return; const wikitext = page.revisions[0].content; const tasks = this.analyzeText(wikitext); if (tasks.length > 0) { if (config.autoRun) { this.redirectToEdit(); } else { this.notifyDiscovery(tasks.length); } } }).fail((err) => { mw.log.warn("Headmaster: silentScan failed", err); }); }, notifyDiscovery(count) { const $msg = $('<span>').text(`Headmaster: Found ${count} issues. `).append($('<a>').text('Run conversion').css({ fontWeight: 'bold', cursor: 'pointer' }).on('click', () => this.redirectToEdit())); mw.notify($msg, { tag: 'hm-discovery', autoHide: false }); }, init() { if (!this.styleInjected) { mw.loader.addStyleTag(this.css); this.styleInjected = true; } const $textbox = $('#wpTextbox1'); const wikitext = $textbox.textSelection('getContents'); if (!wikitext) { mw.notify("Textbox is empty or not found.", { type: 'error' }); return; } const tasks = this.analyzeText(wikitext); if (tasks.length === 0) { mw.notify("No issues found."); return; } this.showUI(tasks, wikitext); }, analyzeText(wikitext) { const lines = wikitext.split("\n"); const tasks = []; let currentDepth = 1; for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); const headingMatch = line.match(/^(={2,6})\s*(.+?)\s*\1\s*$/); if (headingMatch) { currentDepth = headingMatch[1].length; const prevLine = i > 0 ? lines[i - 1].trim() : null; const isSmashed = prevLine !== null && prevLine !== ""; const isExtraSpace = i > 1 && lines[i - 1].trim() === "" && lines[i - 2].trim() === ""; if (isSmashed || isExtraSpace) { tasks.push({ index: i, type: 'WHITESPACE', original: lines[i], isSmashed: isSmashed, isExtraSpace: isExtraSpace }); } } else if (line.startsWith(';') && !line.startsWith(';;')) { const nextLine = lines[i + 1] || ""; if (!nextLine.trim().startsWith(':')) { const cleanText = line.substring(1).replace(/\s*:.*$/, "").trim(); const suggestedLevel = "=".repeat(Math.min(currentDepth + 1, 6)); tasks.push({ index: i, type: 'PSEUDO', original: line, cleanText: cleanText, context: nextLine.substring(0, 60).trim() + (nextLine.length > 60 ? "..." : ""), suggestedLevel: suggestedLevel }); } } } return tasks; }, showUI(tasks, originalWikitext) { $('#hm-panel').remove(); $('#editform').hide(); const visibleTasks = tasks.filter(t => t.type === 'PSEUDO'); const pseudoCount = visibleTasks.length; const whitespaceCount = tasks.filter(t => t.type === 'WHITESPACE').length; let statusMsg = ""; const s = (n) => n !== 1 ? 's' : ''; if (pseudoCount > 0) { statusMsg = `Found <strong>${pseudoCount}</strong> possible pseudo-heading${s(pseudoCount)}.`; if (whitespaceCount > 0) { statusMsg += ` Also fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } } else { statusMsg = `Did not find any pseudo-headings, but fixing <strong>${whitespaceCount}</strong> spacing issue${s(whitespaceCount)} quietly.`; } const tableRows = pseudoCount > 0 ? visibleTasks.map((task, i) => ` <tr data-task-index="${task.index}"> <td><button class="hm-locate-btn" data-hm-i="${tasks.indexOf(task)}" title="Show in editor">Locate</button></td> <td class="hm-context"><code>${mw.html.escape(task.original)}</code></td> <td><label><input type="radio" name="hm-opt-${i}" value="keep"> Keep</label></td> <td><label><input type="radio" name="hm-opt-${i}" value="bold" checked> <b>Bold</b></label></td> <td><label><input type="radio" name="hm-opt-${i}" value="head"> Heading (${task.suggestedLevel.length})</label></td> <td class="hm-context">${mw.html.escape(task.context || "(end of page)")}</td> </tr> `).join("") : `<tr><td colspan="6" style="text-align:center; padding: 2em; color: #54595d; background: #f8f9fa;"> No interactive heading changes detected. Only background spacing normalization will be applied. </td></tr>`; const $panel = $(` <div id="hm-panel"> <h3 style="margin-top:0">Headmaster v${this.VERSION}: Review pseudo-headings</h3> <div class="hm-global-selector" ${pseudoCount === 0 ? 'style="display:none"' : ''}> <strong>Bulk action:</strong> <a href="#" id="hm-all-keep">Set all to Keep</a> | <a href="#" id="hm-all-bold">Set all to Bold</a> | <a href="#" id="hm-all-head">Set all to Heading</a> </div> <table id="hm-table"> <thead> <tr> <th>Find</th> <th>Source</th> <th colspan="3">Action</th> <th>Next line context</th> </tr> </thead> <tbody>${tableRows}</tbody> </table> <div id="hm-controls"> <span>${statusMsg}</span> <div> <button id="hm-cancel" class="mw-ui-button">Cancel</button> <button id="hm-apply" class="hm-btn-apply">Show changes (diff)</button> </div> </div> </div> `); $('#content').prepend($panel); window.scrollTo(0, 0); $('.hm-locate-btn').on('click', function() { $(document).off('mousedown.hmlocate'); const idx = $(this).data('hm-i'); const task = tasks[idx]; const lines = originalWikitext.split('\n'); let charOffset = 0; for (let j = 0; j < task.index; j++) { charOffset += lines[j].length + 1; } $('#hm-panel').hide(); $('#editform').show(); const $textbox = $('#wpTextbox1'); $textbox.textSelection('setSelection', { start: charOffset, end: charOffset + lines[task.index].length }); $textbox.textSelection('scrollToCaretPosition'); const locateNotify = mw.notify("Locating line " + (task.index + 1) + ". Click outside the editor to return.", { tag: 'hm-locate', type: 'success', autoHide: false }); setTimeout(() => { $(document).on('mousedown.hmlocate', function(e) { if (!$(e.target).closest('#editform, .mw-notification-area').length) { $(document).off('mousedown.hmlocate'); Promise.resolve(locateNotify).then(n => n.close()); $('#editform').hide(); $('#hm-panel').show(); } }); }, 200); }); $('#hm-all-keep').on('click', (e) => { e.preventDefault(); $('input[value="keep"]').prop('checked', true); }); $('#hm-all-bold').on('click', (e) => { e.preventDefault(); $('input[value="bold"]').prop('checked', true); }); $('#hm-all-head').on('click', (e) => { e.preventDefault(); $('input[value="head"]').prop('checked', true); }); $('#hm-cancel').on('click', () => { $('#hm-panel').remove(); $('#editform').show(); }); $('#hm-apply').on('click', () => this.applyChanges(tasks, originalWikitext)); }, getProcessedSummary(existingSummary, bolds, heads, spaces) { if (!config.enableSummary) return existingSummary; let mySummary = ""; let isDefault = false; if (config.customSummary) { mySummary = config.customSummary; } else { isDefault = true; if (bolds > 0 || heads > 0) { const detailsArr = []; if (bolds > 0) detailsArr.push(`${bolds} to bold`); if (heads > 0) detailsArr.push(`${heads} to heading`); const detailsStr = detailsArr.length > 0 ? `(${detailsArr.join(', ')}) ` : ""; mySummary = this.DefaultSummary.replace("{details}", detailsStr); if (spaces > 0) { mySummary += "; also handled [[MOS:BLANKLINE]]"; } } else if (spaces > 0) { mySummary = "Handling [[MOS:BLANKLINE]] using [[User:Sam_Sailor/Scripts/Headmaster.js|Headmaster]]"; } } if (!mySummary) return existingSummary; const trimmedOld = existingSummary.trim(); if (!trimmedOld) return mySummary; if (/[.!?]$/.test(trimmedOld)) { return trimmedOld + " " + mySummary; } else { const finalSummary = isDefault ? mySummary.charAt(0).toLowerCase() + mySummary.slice(1) : mySummary; return trimmedOld + "; " + finalSummary; } }, applyChanges(tasks, wikitext) { try { let lines = wikitext.split("\n"); let bCount = 0, hCount = 0, wCount = 0; const pseudoTasks = tasks.filter(t => t.type === 'PSEUDO'); for (let i = pseudoTasks.length - 1; i >= 0; i--) { const task = pseudoTasks[i]; const idx = task.index; const action = $('#hm-table tbody tr').filter(`[data-task-index="${idx}"]`).find('input:checked').val(); if (action === 'bold') { let newValue = `'''${task.cleanText}'''`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; bCount++; } else if (action === 'head') { const h = task.suggestedLevel; let newValue = `${h} ${task.cleanText} ${h}`; if (idx > 0 && lines[idx - 1].trim() !== "") { newValue = "\n" + newValue; } lines[idx] = newValue; hCount++; } } const spaceTasks = tasks.filter(t => t.type === 'WHITESPACE'); for (let i = spaceTasks.length - 1; i >= 0; i--) { const task = spaceTasks[i]; const idx = task.index; if (task.isSmashed) { lines.splice(idx, 0, ""); } else if (task.isExtraSpace) { let backIdx = idx - 1; while (backIdx > 0 && lines[backIdx].trim() === "" && lines[backIdx - 1].trim() === "") { lines.splice(backIdx, 1); backIdx--; } } wCount++; } if (bCount + hCount + wCount === 0) { mw.notify("No changes selected."); $('#hm-panel').remove(); $('#editform').show(); return; } $('#wpTextbox1').textSelection('setContents', lines.join("\n")); const $summary = $('#wpSummary'); $summary.val(this.getProcessedSummary($summary.val(), bCount, hCount, wCount)); $('#hm-panel').remove(); $('#editform').show(); mw.notify(`Headmaster: Fixed ${wCount} spacing issue(s) and converted ${bCount + hCount} heading(s).`); $('html, body').animate({ scrollTop: 0 }, 'fast'); $('#wpDiff').click(); } catch (err) { $('#editform').show(); mw.notify("Headmaster error: " + err.message, { type: 'error' }); } } }; window.Headmaster = Headmaster; mw.loader.using(['mediawiki.util', 'mediawiki.api', 'jquery.textSelection'], () => { $(() => Headmaster.setup()); }); })(); //</nowiki> mtqrgva7p1md8qgxgc9vq1q2rkvm72e Wikipedia:Sandbox 4 107092 740199 739907 2026-05-02T21:00:57Z Cewbot 33876 Clear the sandbox. If you want to keep it longer, please test it in [[Special:MyPage/Sandbox|personal sandbox]], you can also check the revision history of the sandbox. 740199 wikitext text/x-wiki <noinclude>{{Sandbox}}</noinclude> == Please start your testing below this line == 9v37rcaxoiwjar8n3q9n7dcsjdvcyin User:Tohaomg/test.js 2 115435 740327 444451 2026-05-03T11:02:39Z Tohaomg 35056 740327 javascript text/javascript (function($, mw) { return "Hello World"; }(jQuery, mediaWiki)); 121qkkf168qsxs6myn7ur91ibgl0no1 Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/Actual 4 115921 740283 685950 2026-05-03T09:28:09Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740283 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/AAAA |Días a mantener=7 }} {{Clear}} </noinclude> == Eduardo Zalamea Borda == ;Consulta *Buenas. Anteriormente Antur me sugirió abrir esta consulta o caso por acá, la misma fue rechazada por Jaluj. Hace un mes este artículo fue borrado en [https://es.wikipedia.org/wiki/Wikipedia:Consultas_de_borrado/Eduardo_Zalamea_Borda esta consulta] (tres argumentos en contra y uno a favor). Solicito a un bibliotecario mirar este caso e inicie una nueva consulta de borrado para que la comunidad decida si se debe pasar al espacio principal. Aclaro que este artículo lo trabajé en [https://es.wikipedia.org/wiki/Usuario:El%C3%ADas/Taller mi taller] desinteresadamente, fue borrado pero después restaurado. El día de hoy realicé algunas ediciones. ;Usuario que consulta *[[Usuario:Elías|Elías]] ([[Usuario Discusión:Elías|discusión]]) 16:11 4 may 2025 (UTC) ;Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:16, 26 November 2025 (UTC)|3=}} == Kidd Keo == ; Consulta * Taller: [[Usuario:MaestroDash/Taller]] * La anterior consulta de borrado (año 2018): [[Wikipedia:Consultas de borrado/Kidd Keo]] * Hace años cuando quizás no era tan relevante se borró la página de [[Kidd Keo]], desde entonces y por recomendación de un bibliotecario lo trabajé en el Taller. Hace tiempo lo dejé aparcado y ahora que tengo más experiencia en la Wikipedia he hecho unos cambios y añadido los premios y certificaciones que creo que hacen que sea una persona relevante para estar en la enciclopedia. Cualquier comentario para hacer el artículo mejor es bienvenido. Gracias ; Usuario que consulta * [[Usuario:MaestroDash|MaestroDash]] ([[Usuario Discusión:MaestroDash|discusión]]) 18:29 19 ago 2025 (UTC) ;Comentario: Mejora el formato, exceso de negritas y la sección "Enlaces externos" va después de "Referencias", no antes --[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 22:03 24 ago 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Diego Cabot == ; Consulta * El artículo fue borrado hace muchos años mediante consulta de borrado por falta de relevancia: [[Wikipedia:Consultas de borrado/Diego Cabot]]. Considero que con el tiempo este periodista adquirió la relevancia suficiente como para aparecer en Wikipedia. Tengo preparado un borrador en mi taller en [[Usuaria:Jaluj/Taller/Diego Cabot]]. ; Usuario que consulta * [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 21:29 10 nov 2025 (UTC) ; Respuesta {{admintab|{{ok}}. El artículo de 2022 solo constaba de una línea sin nada más. El artículo de 2021 era una redacción automática con la lista de premios cubriendo casi la mitad del contenido. Lo que hay en el taller es distinto. No sé si tendrá relevancia o no (no he entrado en el fondo del asunto), que la comunidad decida. Un saludo.|2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:26 11 nov 2025 (UTC) |3= @[[Usuario:Virum Mundi|νιяυм]] por favor pásame el enlace a la segunda consulta, gracias.--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:35 11 nov 2025 (UTC) :{{ping|Jaluj}} [[Wikipedia:Consultas de borrado/Diego Cabot (2.ª consulta)|Aquí lo tienes]], pensé que querías abrirlo tú. Un saludo. &nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 19:06 11 nov 2025 (UTC) }} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vendría el motivo por el cual queremos restaurar este nuevo artículo, sometiéndolo a una consulta de borrado. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:28, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) nehrscgcv5sghaxvpdam1qxe6sawbgj 740284 740283 2026-05-03T09:38:26Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740284 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/AAAA |Días a mantener=7 }} {{Clear}} </noinclude> == Eduardo Zalamea Borda == ;Consulta *Buenas. Anteriormente Antur me sugirió abrir esta consulta o caso por acá, la misma fue rechazada por Jaluj. Hace un mes este artículo fue borrado en [https://es.wikipedia.org/wiki/Wikipedia:Consultas_de_borrado/Eduardo_Zalamea_Borda esta consulta] (tres argumentos en contra y uno a favor). Solicito a un bibliotecario mirar este caso e inicie una nueva consulta de borrado para que la comunidad decida si se debe pasar al espacio principal. Aclaro que este artículo lo trabajé en [https://es.wikipedia.org/wiki/Usuario:El%C3%ADas/Taller mi taller] desinteresadamente, fue borrado pero después restaurado. El día de hoy realicé algunas ediciones. ;Usuario que consulta *[[Usuario:Elías|Elías]] ([[Usuario Discusión:Elías|discusión]]) 16:11 4 may 2025 (UTC) ;Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:16, 26 November 2025 (UTC)|3=}} == Kidd Keo == ; Consulta * Taller: [[Usuario:MaestroDash/Taller]] * La anterior consulta de borrado (año 2018): [[Wikipedia:Consultas de borrado/Kidd Keo]] * Hace años cuando quizás no era tan relevante se borró la página de [[Kidd Keo]], desde entonces y por recomendación de un bibliotecario lo trabajé en el Taller. Hace tiempo lo dejé aparcado y ahora que tengo más experiencia en la Wikipedia he hecho unos cambios y añadido los premios y certificaciones que creo que hacen que sea una persona relevante para estar en la enciclopedia. Cualquier comentario para hacer el artículo mejor es bienvenido. Gracias ; Usuario que consulta * [[Usuario:MaestroDash|MaestroDash]] ([[Usuario Discusión:MaestroDash|discusión]]) 18:29 19 ago 2025 (UTC) ;Comentario: Mejora el formato, exceso de negritas y la sección "Enlaces externos" va después de "Referencias", no antes --[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 22:03 24 ago 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Diego Cabot == ; Consulta * El artículo fue borrado hace muchos años mediante consulta de borrado por falta de relevancia: [[Wikipedia:Consultas de borrado/Diego Cabot]]. Considero que con el tiempo este periodista adquirió la relevancia suficiente como para aparecer en Wikipedia. Tengo preparado un borrador en mi taller en [[Usuaria:Jaluj/Taller/Diego Cabot]]. ; Usuario que consulta * [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 21:29 10 nov 2025 (UTC) ; Respuesta {{admintab|{{ok}}. El artículo de 2022 solo constaba de una línea sin nada más. El artículo de 2021 era una redacción automática con la lista de premios cubriendo casi la mitad del contenido. Lo que hay en el taller es distinto. No sé si tendrá relevancia o no (no he entrado en el fondo del asunto), que la comunidad decida. Un saludo.|2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:26 11 nov 2025 (UTC) |3= @[[Usuario:Virum Mundi|νιяυм]] por favor pásame el enlace a la segunda consulta, gracias.--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:35 11 nov 2025 (UTC) :{{ping|Jaluj}} [[Wikipedia:Consultas de borrado/Diego Cabot (2.ª consulta)|Aquí lo tienes]], pensé que querías abrirlo tú. Un saludo. &nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 19:06 11 nov 2025 (UTC) }} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vendría el motivo por el cual queremos restaurar este nuevo artículo, sometiéndolo a una consulta de borrado. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:28, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Ejemplito de motivo aquí. Pues sí. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) piy3fs6yrpatvfqjwi6n87v8djktv8h 740285 740284 2026-05-03T09:39:20Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740285 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/AAAA |Días a mantener=7 }} {{Clear}} </noinclude> == Eduardo Zalamea Borda == ;Consulta *Buenas. Anteriormente Antur me sugirió abrir esta consulta o caso por acá, la misma fue rechazada por Jaluj. Hace un mes este artículo fue borrado en [https://es.wikipedia.org/wiki/Wikipedia:Consultas_de_borrado/Eduardo_Zalamea_Borda esta consulta] (tres argumentos en contra y uno a favor). Solicito a un bibliotecario mirar este caso e inicie una nueva consulta de borrado para que la comunidad decida si se debe pasar al espacio principal. Aclaro que este artículo lo trabajé en [https://es.wikipedia.org/wiki/Usuario:El%C3%ADas/Taller mi taller] desinteresadamente, fue borrado pero después restaurado. El día de hoy realicé algunas ediciones. ;Usuario que consulta *[[Usuario:Elías|Elías]] ([[Usuario Discusión:Elías|discusión]]) 16:11 4 may 2025 (UTC) ;Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:16, 26 November 2025 (UTC)|3=}} == Kidd Keo == ; Consulta * Taller: [[Usuario:MaestroDash/Taller]] * La anterior consulta de borrado (año 2018): [[Wikipedia:Consultas de borrado/Kidd Keo]] * Hace años cuando quizás no era tan relevante se borró la página de [[Kidd Keo]], desde entonces y por recomendación de un bibliotecario lo trabajé en el Taller. Hace tiempo lo dejé aparcado y ahora que tengo más experiencia en la Wikipedia he hecho unos cambios y añadido los premios y certificaciones que creo que hacen que sea una persona relevante para estar en la enciclopedia. Cualquier comentario para hacer el artículo mejor es bienvenido. Gracias ; Usuario que consulta * [[Usuario:MaestroDash|MaestroDash]] ([[Usuario Discusión:MaestroDash|discusión]]) 18:29 19 ago 2025 (UTC) ;Comentario: Mejora el formato, exceso de negritas y la sección "Enlaces externos" va después de "Referencias", no antes --[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 22:03 24 ago 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Diego Cabot == ; Consulta * El artículo fue borrado hace muchos años mediante consulta de borrado por falta de relevancia: [[Wikipedia:Consultas de borrado/Diego Cabot]]. Considero que con el tiempo este periodista adquirió la relevancia suficiente como para aparecer en Wikipedia. Tengo preparado un borrador en mi taller en [[Usuaria:Jaluj/Taller/Diego Cabot]]. ; Usuario que consulta * [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 21:29 10 nov 2025 (UTC) ; Respuesta {{admintab|{{ok}}. El artículo de 2022 solo constaba de una línea sin nada más. El artículo de 2021 era una redacción automática con la lista de premios cubriendo casi la mitad del contenido. Lo que hay en el taller es distinto. No sé si tendrá relevancia o no (no he entrado en el fondo del asunto), que la comunidad decida. Un saludo.|2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:26 11 nov 2025 (UTC) |3= @[[Usuario:Virum Mundi|νιяυм]] por favor pásame el enlace a la segunda consulta, gracias.--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:35 11 nov 2025 (UTC) :{{ping|Jaluj}} [[Wikipedia:Consultas de borrado/Diego Cabot (2.ª consulta)|Aquí lo tienes]], pensé que querías abrirlo tú. Un saludo. &nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 19:06 11 nov 2025 (UTC) }} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vendría el motivo por el cual queremos restaurar este nuevo artículo, sometiéndolo a una consulta de borrado. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:28, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Ejemplito de motivo aquí. Pues sí. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Here is a motive to justify the restoration of this article in particular. ; Enlace a la consulta de borrado * Wikipedia:Consultas de borrado/GoodEqualsExample ; Enlace al taller * Usuario:Nacaru/sandbox ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:39, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) 5jmbmpu90djlbj0lydpob914ep0syv6 740287 740285 2026-05-03T09:45:16Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740287 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/AAAA |Días a mantener=7 }} {{Clear}} </noinclude> == Eduardo Zalamea Borda == ;Consulta *Buenas. Anteriormente Antur me sugirió abrir esta consulta o caso por acá, la misma fue rechazada por Jaluj. Hace un mes este artículo fue borrado en [https://es.wikipedia.org/wiki/Wikipedia:Consultas_de_borrado/Eduardo_Zalamea_Borda esta consulta] (tres argumentos en contra y uno a favor). Solicito a un bibliotecario mirar este caso e inicie una nueva consulta de borrado para que la comunidad decida si se debe pasar al espacio principal. Aclaro que este artículo lo trabajé en [https://es.wikipedia.org/wiki/Usuario:El%C3%ADas/Taller mi taller] desinteresadamente, fue borrado pero después restaurado. El día de hoy realicé algunas ediciones. ;Usuario que consulta *[[Usuario:Elías|Elías]] ([[Usuario Discusión:Elías|discusión]]) 16:11 4 may 2025 (UTC) ;Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:16, 26 November 2025 (UTC)|3=}} == Kidd Keo == ; Consulta * Taller: [[Usuario:MaestroDash/Taller]] * La anterior consulta de borrado (año 2018): [[Wikipedia:Consultas de borrado/Kidd Keo]] * Hace años cuando quizás no era tan relevante se borró la página de [[Kidd Keo]], desde entonces y por recomendación de un bibliotecario lo trabajé en el Taller. Hace tiempo lo dejé aparcado y ahora que tengo más experiencia en la Wikipedia he hecho unos cambios y añadido los premios y certificaciones que creo que hacen que sea una persona relevante para estar en la enciclopedia. Cualquier comentario para hacer el artículo mejor es bienvenido. Gracias ; Usuario que consulta * [[Usuario:MaestroDash|MaestroDash]] ([[Usuario Discusión:MaestroDash|discusión]]) 18:29 19 ago 2025 (UTC) ;Comentario: Mejora el formato, exceso de negritas y la sección "Enlaces externos" va después de "Referencias", no antes --[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 22:03 24 ago 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Diego Cabot == ; Consulta * El artículo fue borrado hace muchos años mediante consulta de borrado por falta de relevancia: [[Wikipedia:Consultas de borrado/Diego Cabot]]. Considero que con el tiempo este periodista adquirió la relevancia suficiente como para aparecer en Wikipedia. Tengo preparado un borrador en mi taller en [[Usuaria:Jaluj/Taller/Diego Cabot]]. ; Usuario que consulta * [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 21:29 10 nov 2025 (UTC) ; Respuesta {{admintab|{{ok}}. El artículo de 2022 solo constaba de una línea sin nada más. El artículo de 2021 era una redacción automática con la lista de premios cubriendo casi la mitad del contenido. Lo que hay en el taller es distinto. No sé si tendrá relevancia o no (no he entrado en el fondo del asunto), que la comunidad decida. Un saludo.|2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:26 11 nov 2025 (UTC) |3= @[[Usuario:Virum Mundi|νιяυм]] por favor pásame el enlace a la segunda consulta, gracias.--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:35 11 nov 2025 (UTC) :{{ping|Jaluj}} [[Wikipedia:Consultas de borrado/Diego Cabot (2.ª consulta)|Aquí lo tienes]], pensé que querías abrirlo tú. Un saludo. &nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 19:06 11 nov 2025 (UTC) }} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vendría el motivo por el cual queremos restaurar este nuevo artículo, sometiéndolo a una consulta de borrado. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:28, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Ejemplito de motivo aquí. Pues sí. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Here is a motive to justify the restoration of this article in particular. ; Enlace a la consulta de borrado * Wikipedia:Consultas de borrado/GoodEqualsExample ; Enlace al taller * Usuario:Nacaru/sandbox ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:39, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vamos a describir un motivo por el cual creemos que esta página debería de ser restaurada ; Enlace a la consulta de borrado * [[Wikipedia:Consultas de borrado/GoodEqualsExample]] ; Enlace al taller * [[Usuario:Nacaru/taller]] ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:45, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) njlt39hk3o7x0eb1rwdpnwegahvel34 740288 740287 2026-05-03T09:46:02Z Nacaru 54746 Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Solicitudes_de_nueva_consulta/Actual#Solicitud_de_restauración_de_GoodEqualsExample_3|Solicitud de restauración de GoodEqualsExample]]» mediante [[WP:TL|Twinkle Lite]] 740288 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de nueva consulta/AAAA |Días a mantener=7 }} {{Clear}} </noinclude> == Eduardo Zalamea Borda == ;Consulta *Buenas. Anteriormente Antur me sugirió abrir esta consulta o caso por acá, la misma fue rechazada por Jaluj. Hace un mes este artículo fue borrado en [https://es.wikipedia.org/wiki/Wikipedia:Consultas_de_borrado/Eduardo_Zalamea_Borda esta consulta] (tres argumentos en contra y uno a favor). Solicito a un bibliotecario mirar este caso e inicie una nueva consulta de borrado para que la comunidad decida si se debe pasar al espacio principal. Aclaro que este artículo lo trabajé en [https://es.wikipedia.org/wiki/Usuario:El%C3%ADas/Taller mi taller] desinteresadamente, fue borrado pero después restaurado. El día de hoy realicé algunas ediciones. ;Usuario que consulta *[[Usuario:Elías|Elías]] ([[Usuario Discusión:Elías|discusión]]) 16:11 4 may 2025 (UTC) ;Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:16, 26 November 2025 (UTC)|3=}} == Kidd Keo == ; Consulta * Taller: [[Usuario:MaestroDash/Taller]] * La anterior consulta de borrado (año 2018): [[Wikipedia:Consultas de borrado/Kidd Keo]] * Hace años cuando quizás no era tan relevante se borró la página de [[Kidd Keo]], desde entonces y por recomendación de un bibliotecario lo trabajé en el Taller. Hace tiempo lo dejé aparcado y ahora que tengo más experiencia en la Wikipedia he hecho unos cambios y añadido los premios y certificaciones que creo que hacen que sea una persona relevante para estar en la enciclopedia. Cualquier comentario para hacer el artículo mejor es bienvenido. Gracias ; Usuario que consulta * [[Usuario:MaestroDash|MaestroDash]] ([[Usuario Discusión:MaestroDash|discusión]]) 18:29 19 ago 2025 (UTC) ;Comentario: Mejora el formato, exceso de negritas y la sección "Enlaces externos" va después de "Referencias", no antes --[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 22:03 24 ago 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Diego Cabot == ; Consulta * El artículo fue borrado hace muchos años mediante consulta de borrado por falta de relevancia: [[Wikipedia:Consultas de borrado/Diego Cabot]]. Considero que con el tiempo este periodista adquirió la relevancia suficiente como para aparecer en Wikipedia. Tengo preparado un borrador en mi taller en [[Usuaria:Jaluj/Taller/Diego Cabot]]. ; Usuario que consulta * [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 21:29 10 nov 2025 (UTC) ; Respuesta {{admintab|{{ok}}. El artículo de 2022 solo constaba de una línea sin nada más. El artículo de 2021 era una redacción automática con la lista de premios cubriendo casi la mitad del contenido. Lo que hay en el taller es distinto. No sé si tendrá relevancia o no (no he entrado en el fondo del asunto), que la comunidad decida. Un saludo.|2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:26 11 nov 2025 (UTC) |3= @[[Usuario:Virum Mundi|νιяυм]] por favor pásame el enlace a la segunda consulta, gracias.--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:35 11 nov 2025 (UTC) :{{ping|Jaluj}} [[Wikipedia:Consultas de borrado/Diego Cabot (2.ª consulta)|Aquí lo tienes]], pensé que querías abrirlo tú. Un saludo. &nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 19:06 11 nov 2025 (UTC) }} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vendría el motivo por el cual queremos restaurar este nuevo artículo, sometiéndolo a una consulta de borrado. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:28, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Ejemplito de motivo aquí. Pues sí. ; Enlace a la consulta de borrado * undefined ; Enlace al taller * undefined ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Here is a motive to justify the restoration of this article in particular. ; Enlace a la consulta de borrado * Wikipedia:Consultas de borrado/GoodEqualsExample ; Enlace al taller * Usuario:Nacaru/sandbox ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:39, 3 May 2026 (UTC) ; Respuesta {{admintab|1=Creo que tienes razón y que ese artículo en cuestión debería de ser restaurado.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:46, 3 May 2026 (UTC)|3=}} == Solicitud de restauración de [[GoodEqualsExample]] == ; Consulta * Aquí vamos a describir un motivo por el cual creemos que esta página debería de ser restaurada ; Enlace a la consulta de borrado * [[Wikipedia:Consultas de borrado/GoodEqualsExample]] ; Enlace al taller * [[Usuario:Nacaru/taller]] ; Usuario que consulta * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:45, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) qz8k65oh8j1zcso3ngd5xm65ou3jfcs 21 0 118733 740216 470177 2026-05-02T22:55:13Z Cryptocurrency777 73698 Removed redirect to [[Wikipedia:Sandbox]] 740216 wikitext text/x-wiki 9+10... qzeby31zsgvx32dz2ioyjy9p1fc35u7 User:SongVĩ.Bot II 2 124239 740160 740038 2026-05-02T17:00:15Z SongVĩ.Bot II 52414 [[User:SongVĩ.Bot II|Task 0]]: Đã 1587 ngày... 740160 wikitext text/x-wiki Cập nhật lần cuối: 03-05-2026 Đã 1587 ngày... lg6bucyo4x4ekiw2dipbyppptr2rsv9 Template:A 10 147799 740276 552704 2026-05-03T09:08:18Z Nacaru 54746 740276 wikitext text/x-wiki {{#if:{{{1|}}}|<span class="plainlinks nourlexpansion lx">{{#ifeq: {{Str left|{{{2}}}|6}}|resalt|<span style="font-weight: bold;{{#ifeq: {{{2}}}|resalt2| font-size: 18px;}}">}}[[:{{ucfirst:{{{1|Artículo}}}}}]]{{#ifeq: {{Str left|{{{2}}}|6}}|resalt|</span>}} ([{{fullurl:{{{1|Artículo}}}|action=edit}} editar] {{!}} [[{{TALKSPACE:{{{1|Artículo}}}}}:{{PAGENAME:{{{1|Artículo}}}}}|discusión]] {{!}} [{{fullurl:{{{1|Artículo}}}|action=history}} historial] {{!}} [{{fullurl:Especial:LoQueEnlazaAquí/{{{1|Artículo}}}|limit=5000}} enlaces] {{!}} [{{fullurl:{{{1|Artículo}}}|action=watch}} vigilar] {{!}} [{{fullurl:Especial:Registro|page={{urlencode:{{{1|Artículo}}}}}}} registros]<span class="para_biblios"> {{!}} [{{fullurl:{{{1|Artículo}}}|action=protect}} proteger] {{!}} [{{fullurl:{{{1|Artículo}}}|action=delete}} borrar]</span>)</span>}}<noinclude> {{documentación}}</noinclude> jg0ka3j5gv9yjl4hh14icztrtha2y7u Purple 0 147851 740164 552908 2026-05-02T18:22:20Z Cryptocurrency777 73698 740164 wikitext text/x-wiki test creation test112 [[File:Purple website.svg]] rg4j9adas0nvmu9swm4j1u3c4g289lb User:DVRTed/sandbox 2 148813 740165 733916 2026-05-02T18:27:51Z DVRTed 55993 Edited citation 740165 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref<ref>{{cite news |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref>>{{cite web |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> slttwhpl5b7a4pwcryci9eod9457u8u 740166 740165 2026-05-02T18:28:35Z DVRTed 55993 Undid revision [[Special:Diff/740165|740165]] by [[Special:Contributions/DVRTed|DVRTed]] ([[User talk:DVRTed|talk]]) 740166 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 2707zzqrhhducu4je42fxdflwg9jewe 740167 740166 2026-05-02T18:37:18Z DVRTed 55993 Edited citation 740167 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> d66f9vgqaw7vc4dc6s18s9zv31kl964 740168 740167 2026-05-02T18:37:37Z DVRTed 55993 Edited citation 740168 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 2707zzqrhhducu4je42fxdflwg9jewe 740169 740168 2026-05-02T18:37:50Z DVRTed 55993 Edited citation 740169 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=1 |title=2 |first=3 |last=4 |work=5 |date=6 |access-date=7}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> sgyyzc0u5lvej0jvpe53sg9do5jvly8 740170 740169 2026-05-02T18:38:10Z DVRTed 55993 Undid revision [[Special:Diff/740169|740169]] by [[Special:Contributions/DVRTed|DVRTed]] ([[User talk:DVRTed|talk]]) 740170 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=https://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 2707zzqrhhducu4je42fxdflwg9jewe 740171 740170 2026-05-02T18:40:04Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740171 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> a4p9evixtwq309rvzf15p3b6e3tlo3c 740172 740171 2026-05-02T18:40:11Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740172 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jeason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> awsn5osyc64ygmi58vged0xrvpvso4m 740173 740172 2026-05-02T18:40:55Z DVRTed 55993 edit conflict 740173 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jeason |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 4mm4hjtcbnfu9nehylgwwpfhe6qf2mr 740174 740173 2026-05-02T18:41:03Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740174 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Jeson |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> ght44gev9fb7xyvc3k4kpwilpt801ua 740175 740174 2026-05-02T18:43:25Z DVRTed 55993 740175 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=CONFLICT |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> hoix8j70uzwx1izs3xw1m2pzwfodyrs 740176 740175 2026-05-02T18:43:32Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740176 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=Test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> bqsexu0mx0hufgmgjnbhd254d5umigs 740177 740176 2026-05-02T18:49:29Z DVRTed 55993 740177 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=edit 92 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 1zbyeo9y4fptua7pfv9n2m0e9f44gl6 740178 740177 2026-05-02T18:49:33Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740178 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 6f9jf65egwjar4rs31hy2s91zervbrw 740179 740178 2026-05-02T18:52:32Z DVRTed 55993 740179 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 14k5d8h7lme5vtdxw6xm9h2uyi7sza9 740180 740179 2026-05-02T18:52:35Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740180 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 7hymwk6ahqzhtmef4u2sxck0hfk9x9w 740181 740180 2026-05-02T18:58:13Z DVRTed 55993 740181 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> {{cite web | title={{lang|en|Example}} }} <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 5cc3u913rhrnq29gnbmmym2j5ucewdm 740182 740181 2026-05-02T18:58:39Z DVRTed 55993 740182 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite web | title={{lang|en|Example}} }}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 7nqspla4xzek9lv9eaaj09ayapamkqk 740183 740182 2026-05-02T18:58:54Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740183 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}}}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> mf7b07q64q4ljsu1hfyyjc0718ndijt 740184 740183 2026-05-02T19:07:44Z DVRTed 55993 +unnamedparam 740184 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=d3ai511 |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018|unnamedparameter}}</ref> <ref>{{cite news |title={{lang|en|Example}}}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> f3ze563lwn94nbpq7z1ahhnehmfvbd5 740185 740184 2026-05-02T19:07:59Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740185 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}}}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 5374c23xrkphzwgezyolxl02rexwawx 740186 740185 2026-05-02T19:11:01Z DVRTed 55993 740186 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018|url-status=live}}</ref> <ref>{{cite news |title={{lang|en|Example}}}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> ms30uvqksjvnyx7ts9cb95yzm9pv6vv 740187 740186 2026-05-02T19:11:49Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740187 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018 |url-status=usurped}}</ref> <ref>{{cite news |title={{lang|en|Example}}}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> dzkuqeclx6iokk9kukrm3xgvkd6nio1 740188 740187 2026-05-02T19:41:49Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740188 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018 |url-status=usurped}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web |url=https://archives.upenn.edu/wp-content/uploads/2018/04/commencement-program-1968.pdf |pages=19–21 |title=Two Hundred and Twelfth Commencement for the Conferring of Degrees |publisher=[[University of Pennsylvania]] |date=May 20, 1968 |access-date=March 31, 2023}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 7hkqe6bcif7kvxuvfx0hnnyd8vpsi7t 740189 740188 2026-05-02T19:42:51Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740189 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |first=test |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018 |url-status=usurped}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 8poj66m3ty1tku0atoxcb3cikeu72ap 740190 740189 2026-05-02T19:44:20Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740190 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018 |url-status=usurped}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> oiz9n1pgp1noiim0m4qkt3tfh92jsg7 740191 740190 2026-05-02T19:47:14Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740191 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |last=Horowitz |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 8riyzny7hycdjio03rk9rbs2mbgjfl3 740192 740191 2026-05-02T19:47:43Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740192 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |date=February 27, 2019 |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 64nycl9el26jk1zbe8qbq3sbm4dwtyt 740193 740192 2026-05-02T19:48:15Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740193 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |work=[[The New York Times]] |date=September 22, 2015 |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 9t7s45zundk7rdpzstidh8xooavo3z1 740194 740193 2026-05-02T19:52:07Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740194 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> 05lmahjycz5uo8ctl2zpsgz6nef75yd 740195 740194 2026-05-02T20:00:58Z DVRTed 55993 740195 wikitext text/x-wiki {{Merge to|Main_Page|discuss=Talk:Main Page#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|user:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} {{Merge from|User:DVRTed/sandbox2|discuss=User talk:DVRTed/sandbox#Merge proposal|date=March 2026}} <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{Cite web|url=http://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|title=Support for free trade agreements rebounds modestly, but wide partisan differences remain|website=Pew Research|date=April 25, 2017 |access-date=August 14, 2023|archive-date=April 11, 2023|archive-url=https://web.archive.org/web/20230411201429/https://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|url-status=live}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{cite web| author=def| first=test }} {{cite web| author=xyz|author1=123 |author2=what }} {{cite web| author=abc|author2=test}} {{cite web| author=def }} {{cite web| author=err | authorlink1=err}} {{cite web| author=test | author-link1=test}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/misc|unanswered|User:DVRTed/sandbox3}} <!-- {{#invoke:Sandbox/DVRTed/test|talkstats|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox3}} {{#invoke:Sandbox/DVRTed/test|unanswered|User:DVRTed/sandbox2}} --> ej1qch0ct8ntgaxpar34amdd35lcquj 740196 740195 2026-05-02T20:22:18Z DVRTed 55993 740196 wikitext text/x-wiki <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{Cite web|url=http://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|title=Support for free trade agreements rebounds modestly, but wide partisan differences remain|website=Pew Research|date=April 25, 2017 |access-date=August 14, 2023|archive-date=April 11, 2023|archive-url=https://web.archive.org/web/20230411201429/https://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|url-status=live}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{reflist}} 3pfmofit22udz01wdcvjtd6e25t8zxe 740197 740196 2026-05-02T20:27:02Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740197 wikitext text/x-wiki <meta charset="utf-8" /> <meta property="mw:pageId" content="148813" /> <meta property="mw:pageNamespace" content="2" /> <meta property="mw:revisionSHA1" content="1fbb11e596f33e315cdaea38e1592bab438278e2" /> <meta property="dc:modified" content="2026-05-02T20:22:18.000Z" /> <meta property="mw:htmlVersion" content="2.8.0" /> <meta property="mw:html:version" content="2.8.0" /> [//test.wikipedia.org/wiki/User%3ADVRTed/sandbox]<base href="//test.wikipedia.org/wiki/" /><title>User:DVRTed/sandbox</title> <meta property="mw:generalModules" content="ext.cite.ux-enhancements" /> <meta property="mw:moduleStyles" content="ext.cite.parsoid.styles|ext.cite.styles" /> [/w/load.php?lang=en&modules=ext.cite.parsoid.styles%7Cext.cite.styles%7Cmediawiki.skinning.content.parsoid%7Cmediawiki.skinning.interface%7Csite.styles&only=styles&skin=vector] <meta http-equiv="content-language" content="en" /> <meta http-equiv="vary" content="Accept" /> <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{Cite web|url=http://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|title=Support for free trade agreements rebounds modestly, but wide partisan differences remain|website=Pew Research|date=April 25, 2017 |access-date=August 14, 2023|archive-date=April 11, 2023|archive-url=https://web.archive.org/web/20230411201429/https://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|url-status=live}}</ref> <ref>{{cite|last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{reflist}} caown7psxrvb903t6hj8eikmkvbdqzi 740198 740197 2026-05-02T20:27:46Z DVRTed 55993 Undid revision [[Special:Diff/740197|740197]] by [[Special:Contributions/DVRTed|DVRTed]] ([[User talk:DVRTed|talk]]) 740198 wikitext text/x-wiki <ref>{{cite web |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{Cite web|url=http://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|title=Support for free trade agreements rebounds modestly, but wide partisan differences remain|website=Pew Research|date=April 25, 2017 |access-date=August 14, 2023|archive-date=April 11, 2023|archive-url=https://web.archive.org/web/20230411201429/https://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|url-status=live}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{reflist}} 3pfmofit22udz01wdcvjtd6e25t8zxe 740295 740198 2026-05-03T10:01:16Z DVRTed 55993 Edited citation using [[User:DVRTed/easy-ref|easy-ref]] 740295 wikitext text/x-wiki <ref>{{cite test |url=http://www.nytimes.com/2015/09/23/us/politics/donald-trumps-old-queens-neighborhood-now-a-melting-pot-was-seen-as-a-cloister.html |title=Donald Trump's Old Queens Neighborhood Contrasts With the Diverse Area Around It |access-date=November 7, 2018}}</ref> <ref>{{cite news |title={{lang|en|Example}} |archive_url=http://test.com}}</ref> <ref>{{Cite web|url=http://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|title=Support for free trade agreements rebounds modestly, but wide partisan differences remain|website=Pew Research|date=April 25, 2017 |access-date=August 14, 2023|archive-date=April 11, 2023|archive-url=https://web.archive.org/web/20230411201429/https://www.pewresearch.org/fact-tank/2017/04/25/support-for-free-trade-agreements-rebounds-modestly-but-wide-partisan-differences-remain/|url-status=live}}</ref> <ref>{{cite news |last=Ashford |first=Grace |title=Michael Cohen Says Trump Told Him to Threaten Schools Not to Release Grades |url=https://www.nytimes.com/2019/02/27/us/politics/trump-school-grades.html |work=[[The New York Times]]}}</ref> conflict <ref name=UPenn>{{cite web}}</ref> {{reflist}} h2lex4aqijwtdp9315gsm52mwbsd6r7 Test 0 155073 740255 739868 2026-05-03T08:44:44Z Valcio 46860 clear 740255 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 740256 740255 2026-05-03T08:45:18Z Valcio 46860 test 740256 wikitext text/x-wiki [[File:Test.png]] 4meartrravbpkjg9gwfhpw43w2pflbg 740257 740256 2026-05-03T08:45:36Z Valcio 46860 test 740257 wikitext text/x-wiki [[File:Test.png]] [[File:Test.jpg|alt=tetdwt6gyud]] tf5gv75xxelqww40plsf3pkucacfgd1 740261 740257 2026-05-03T08:48:04Z Valcio 46860 clear 740261 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 740262 740261 2026-05-03T08:48:19Z Valcio 46860 tst 740262 wikitext text/x-wiki [[File:Image.png]] s7ly9nsgyukbx2rz0ca3v3qnkw3o3en 740263 740262 2026-05-03T08:49:14Z Valcio 46860 test 740263 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] 4afoyacdmrbngmv7f30jqx8anepfin9 740265 740263 2026-05-03T08:50:51Z Valcio 46860 test 740265 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei s4gqzb94e3nxenk3rs38ib6ot5t7gxx 740267 740265 2026-05-03T08:59:11Z Valcio 46860 t 740267 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red hw4l44djuv4zfj42vd289gv51xe5hek 740268 740267 2026-05-03T09:00:00Z Valcio 46860 tet 740268 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" |+ ! ! ! ! |- | | | | |- | | | | |- | | | | |} color: red oj8mc0tke7d2tawrxp1mv6s8jl33y3y 740269 740268 2026-05-03T09:00:11Z Valcio 46860 test 740269 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" |+ ! color: red ! ! ! |- | | | | |- | | | | |- | | | | |} color: red 0ixec6211a8l7bh2mclf7nvzmqvfa91 740270 740269 2026-05-03T09:00:25Z Valcio 46860 test 740270 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" |+ color: red ! color: red ! ! ! |- | | | | |- | | | | |- | | | | |} color: red gsuutmkp3z03fbj8wmghrmmnr396vji 740271 740270 2026-05-03T09:00:43Z Valcio 46860 test 740271 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | | | | |- | | | | |- | | | | |} color: red 5lpgmrp8mhesw1icc5nx1uemncg9dpg 740272 740271 2026-05-03T09:00:55Z Valcio 46860 red 740272 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- | | | | |- | | | | |} color: red 1a5bfpzjsmsez2mfln72b94ke6mehnm 740273 740272 2026-05-03T09:02:41Z Valcio 46860 red 740273 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red p84yok4i9eune5juxxi52q216gt86pj 740298 740273 2026-05-03T10:18:53Z Valcio 46860 t 740298 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha 25rmt0y2whemn7md7oss69upny13qgf 740302 740298 2026-05-03T10:31:22Z Valcio 46860 t 740302 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha snxycurbdcacluuxhgme0u2frpjzwbp 740324 740302 2026-05-03T10:58:44Z Valcio 46860 + 740324 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha hs4xzq3s64evpownu2y8tu64iqch0t5 740344 740324 2026-05-03T11:57:06Z ~2026-26971-15 73789 a 740344 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha 3os89otxiqss1wntge0kym6tymq4bld 740345 740344 2026-05-03T11:57:34Z ~2026-26971-15 73789 740345 wikitext text/x-wiki [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" |+ color: red ! color: red ! ! ! |- | color: red | REDDD | | | |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha [[File:Image.png]] [[File:Image.png]] dwehuhuwei color: red {| |} {| class="wikitable" style="color: red" | color: red | '''REDDD''' | '''a''' | '''Grassetto''' | '''Grassetto''' |- |color: red |hgdegyuwde | | | |- | | | | |} color: red testcaptcha tnm04ej7aker16cjirxj4p0rstchbjn 740346 740345 2026-05-03T11:58:56Z Valcio 46860 - 740346 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 User:DVRTed/sandbox2 2 166741 740289 733913 2026-05-03T09:48:27Z DVRTed 55993 Replaced content with "{{user:DVRTed/sandbox}}" 740289 wikitext text/x-wiki {{user:DVRTed/sandbox}} l4rzkywgwtf2486ih225csonjaljchh User:Chaotic Enby/common.js 2 167447 740308 734727 2026-05-03T10:35:54Z Chaotic Enby 58843 afghan 740308 javascript text/javascript mw.loader.load('http://127.0.0.1:5500'); // Dev version of XFDcloser var xfdcDevUrl = "http://localhost:8125/dist/loader-dev.js"; mw.loader.getScript(xfdcDevUrl).catch(function(e) { e.message += " " + xfdcDevUrl; console.error(e); }); importScript('User:Chaotic Enby/afghan.js'); importScript('User:Chaotic Enby/RFPPParser.js'); 9d8nt968n1bo6kjry40ayogqmx3468r Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual 4 169156 740258 685946 2026-05-03T08:47:12Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740258 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out roorchhmckjpwhku9xwt5n6hl69t8h4 740259 740258 2026-05-03T08:47:18Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740259 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out sugfgqjwmlwk0pdp6pe0wnaz2l7ih91 740264 740259 2026-05-03T08:49:29Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740264 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out j9l22nb50rokktzf6lb4ff4wb7amhw3 740275 740264 2026-05-03T09:07:24Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740275 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) 7vc5ihpzpip057rb06o8rvinm9ft4ef 740278 740275 2026-05-03T09:09:52Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740278 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) eyozjtowv6d15zuv14sw4cap40tcuwu 740303 740278 2026-05-03T10:33:12Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740303 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) czlemejq335fknizknbgrjbb4azuodq 740306 740303 2026-05-03T10:35:50Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740306 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Aquí expondremos nuestro motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) 7vvvufig6g4n01mphxeug89sdsxbxlc 740309 740306 2026-05-03T10:36:15Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740309 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Aquí expondremos nuestro motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Another try. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) qeefw9uneh8qteyx4301lsqjzzjfjnp 740311 740309 2026-05-03T10:38:38Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740311 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Aquí expondremos nuestro motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Another try. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * odsiajdaois ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) ldkli5w4ydiv3rpkneo3dsqbokjzx56 740314 740311 2026-05-03T10:42:36Z Nacaru 54746 Creando solicitud de restauración de GoodEqualsExample mediante [[WP:TL|Twinkle Lite]] 740314 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Aquí expondremos nuestro motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Another try. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * odsiajdaois ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * I think it's pretty. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:42, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) rrg10raius1fv7ge2w2swq1ggnympe0 740325 740314 2026-05-03T10:59:25Z Nacaru 54746 Creando solicitud de restauración de Lincoln Lee mediante [[WP:TL|Twinkle Lite]] 740325 wikitext text/x-wiki <noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}} {{Archivado automático |Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/AAAA/MM |Días a mantener=7 }} </noinclude> == Copa Simón Bolívar 2025 (Bolivia) == ; Artículo * {{a|Copa Simón Bolívar 2025 (Bolivia)}} ; Razón * Solicito la restauración del artículo, la Etapa Nacional del torneo se sorteo recién ayer, lunes 4 de agosto, por lo que las tablas se encontraban vacías. La página tenía veintinueve días, contenía sus respectivas fuentes, no se señalo la fecha del sorteo por lo que entiendo pudo haber un mal entendido. Puedo corregir estos apartados si lo envían a mi taller y si tuvieran con gusto otras observaciones. ; Usuario que lo solicita * [[Usuario:Nightsmokingskull|Nightsmokingskull]] ([[Usuario Discusión:Nightsmokingskull|discusión]]) 20:12 5 ago 2025 (UTC) ; Respuesta {{admintab|1=Prueba de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:14, 26 November 2025 (UTC)|3=}} == Restauración artículo "Jorge Jiménez (desarrollador de videojuegos)" == ; Artículo * {{a|Jorge Jiménez (desarrollador de videojuegos)}} ; Razón * El artículo es sobre Jorge Jiménez, desarrollador de videojuegos e investigador español especializado en gráficos por ordenador. Se trata de una persona con reconocimiento científico y profesional por ser uno de los pioneros en gráficos, fotorrealismo y humanos digitales en videojuegos. Su trabajo ha tenido un gran impacto en la industria que lo ha llevado a participar de forma repetida en conferencias de máximo nivel en el ámbito de los gráficos por ordenador como SIGGRAPH y GDC. Puede verificarlo desde la página oficial de la conferencia: ** [https://gdcvault.com/play/1018270/Next-Generation-Character Charla en GDC Vault: Next-Generation Character Rendering] ** [https://gdcvault.com/play/1029339/The-Character-Rendering-Art-of Charla en GDC Vault: The Character Rendering Art of...] * Por otro lado, la relevancia de su trabajo ha hecho que su nombre no quede limitado al ámbito de la investigación, sino que también sea reconocido por los jugadores, a través de numerosas apariciones en medios especializados y de alcance general, tanto nacionales como internacionales. Ejemplos de medios internacionales: ** [https://www.polygon.com/2013/1/21/3901478/activision-blizzard-next-gen-rendering-tech-gdc-2013 Artículo en Polygon] ** [https://www.gamespot.com/articles/activision-shows-off-next-gen-visuals/1100-6406090/ Reportaje en GameSpot] ** [https://www.youtube.com/watch?v=1pNlPZ89Ec8 Demostración en YouTube] ** [https://www.extremetech.com/gaming/152027-gdc-2013-ps4-hardware-and-controller-details-activision-enters-the-uncanny-valley-and-konami-unveils-mgs5 Cobertura en ExtremeTech] Ejemplos de medios nacionales: ** [https://vandal.elespanol.com/noticia/1350762325/jorge-jimenez-el-hombre-que-ha-hecho-mas-humanos-a-los-personajes Entrevista en Vandal] ** [https://as.com/meristation/2022/10/26/avances/1666792523_199298.html Reportaje en Meristation] ** [https://www.3djuegos.com/juegos/the-callisto-protocol/noticias/nos-provocamos-sangre-se-viera-realista-juego-claves-the-callisto-protocol-para-llevar-terror-a-nueva-generacion Artículo en 3DJuegos] ** [https://es.gizmodo.com/asi-de-hiperrealistas-seran-los-juegos-del-futuro-462618501 Artículo en Gizmodo España] * Además, fue la primera persona en abrir un estudio AAA en Aragón y una de las pocas que participa en proyectos AAA a nivel internacional desde España y bajo un cargo de director. Es importante mencionar que el estudio no solo da soporte a un proyecto de terceras personas, sino que tiene un papel importante en el desarrollo de juegos. Teniendo en cuenta su trayectoria de más de 18 años y sus aportaciones, se trata de un perfil difícil de encontrar en España. Por todo lo expuesto, considero que la trayectoria y el impacto profesional de Jorge Jiménez justifican la restauración de su artículo en Wikipedia. Muchas gracias por su tiempo y atención a esta solicitud. ; Usuario que lo solicita * [[Usuario:ValeriaPlou|ValeriaPlou]] ([[Usuario Discusión:ValeriaPlou|discusión]]) 10:55 1 sep 2025 (UTC) ; Respuesta {{admintab|1=Respuesta a solicitud de restauración más larga|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:15, 26 November 2025 (UTC)|3=}} == Javier Peña (divulgador) == ; Artículo * {{a|Javier Peña (divulgador)}} ; Razón * Hola, se ha borrado el artículo Javier Peña (divulgador) que he creado hoy. Es un divulgador medioambiental muy relevante. Sus vídeos tienen miles de visualizaciones en redes sociales, ha dirigido y presentado una serie pare TVE, tiene una presencia alta en medios de comunicación e imparte charlas en varios puntos del mundo.Además de que he incluido referencias de todo ello, es fácilmente comprobable en google si hay intención de hacerlo. Hay artículos en wikipedia mucho menos relevantes. Una de las razones que se ha dado para su borrado es que no es relevante, pero los datos objetivos que aporto en él para demostrar su relevancia parece que pueden ser vistos como elogios y no neutrales, lo que es una incoherencia. Osea, si no se aportan datos de su relevancia, es irrelevante y si se aportan, el artículo contiene elogios y no es neutral. Vaya, no parece muy justo. En ninguna parte del artículo he expresado mi opinión sobre él, Todo lo que he aportado es totalmente neutral y objetivo y absolutamente toda la información está respaldada con referencias. He intentado hablar con el bibliotecario que insertó la plantilla de destruir para preguntarle qué partes del artículo serían mejorables según su opinión y ni siquiera se ha dignado a responderme, ni a escucharme, ni a guiarme dando argumentos. En lugar de hacer una crítica constructiva, destrucción. Las plantillas son prácticas, pero no pueden sustituir al diálogo, a la escucha, a la comprensión del otro, eso es deshumanizador. He empezado a editar en wikipedia con toda la buena intención, intentando aportar de buena fe, pero después de que me hayan tirado dos artículos neutrales en los que no doy ninguna opinión personal, con referencias y de personajes relevantes me siento totalmente decepcionado y desmoralizado. Nadie me ha indicado qué frases o párrafos son mejorables en mis artículos, he recibido un trato totalmente deshumanizado ¿Es eso la wikipedia? [[Usuario:Changes forever|Changes forever]] ([[Usuario Discusión:Changes forever|discusión]]) 17:14 16 sep 2025 (UTC) ;Respuesta :{{admintab|$0:MiguelAlanCS}} == Solicitud la restauración de artículo Sota_(naipe) == ; Artículo * {{a|Sota_(naipe)}} ; Restauración de artúculo * Hay una página en Wikipedia Español llamada Jota_(naipe), pero ella habla acerca delas cartas de las barajas anglofrancesas "jota" (Jack). Jota solo és sinónimo de sota cuando se habla de la baraja anglofrancesa, o sea, todo jota es una sota, pero ni toda sota es un jota. Así pues, la página de Sota_(naipe) está dedicada específicamente a cartas de barajas latinas (baraja española, baraja italiana, baraja portuguesa, etc.); por eso solicito su restauración. ; Usuario que lo solicita * [[Usuario:ElielOB|ElielOB]] ([[Usuario Discusión:ElielOB|discusión]]) 20:43 29 sep 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ==CD San Justo== ; Artículo * {{a|Club Deportivo San Justo}} ; Razón * Buenas: Este verano creé el artículo [[Club Deportivo San Justo]], con la idea de dedicarle un tiempo a crear y desarrollar artículos de los equipos de Cantabria que hubieran participado en categoría nacional (en este caso, en 3.ª división), que, si no me equivoco, es la costumbre para considerar la relevancia de un equipo; o, al menos, no se ha podido cerrar un criterio en contra. El usuario [[Usuario:Ivanbetanco43|@Ivanbetanco43]] editó para poner plantilla de borrado rápido. Argumenté en contra en la página de discusión del artículo, pero finalmente fue borrado. Sin embargo, con el borrado no he podido encontrar argumentación del bibliotecario que ejecutó el borrado, [[Usuario:Eduardosalg|@Eduardosalg]]. Creo que la argumentación de Iván no era correcta y, como tal, la respondí, pero desconozco finalmente Eduardo atendió la solicitud por dichos motivos o por otros. Por lo tanto, solicitaría la recuperación del artículo, en base a los motivos alegados en la página de discusión, o, al menos, una explicación por parte del bibliotecario de por qué atendió la petición de Iván. En ese caso, agradecería saber si hay algún elemento que pueda incluir para recuperar el artículo (si el borrado no fue por una interpretación de "irrelevancia" por parte del bibliotecario, sino específicamente de algún tipo de fuente verificable, aunque creo que sí las incluí, o algún otro defecto subsanable) y, subsidariamente, solicitaría al menos acceso al wikicódigo del artículo para copiarlo. Creo que la cuestión es relevante no solo para este artículo en concreto, sino porque, como digo, mi intención era crear el artículo de aquellos clubes cántabros que hubieran participado en categoría nacional, por lo que la respuesta a este asunto condicionaría que merezca la pena o no desarrollar ese trabajo de investigación y redacción. ; Usuario que lo solicita * [[Usuario:Poverino|Poverino]] ([[Usuario Discusión:Poverino|discusión]]) 22:14 4 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de artículo The Brotherhood Skate Club == ; Artículo * {{a|The Brotherhood Skate Club}} ; Razón * El artículo fue marcado para borrado rápido con los criterios G3 y A4, pero considero que cumple con los principios de verificabilidad y relevancia enciclopédica. El contenido se basa en información contrastada procedente de medios independientes y fuentes institucionales (TVE, Onda Regional, Fundación Ibercaja, Murcia Plaza, entre otros). El texto tenía tono neutral, sin elementos promocionales y basado en hechos verificables: fundación del club, programa deportivo, programas sociales y reconocimientos oficiales, todo certificado a través de enlaces y citas verificables. Comprendo que quizá pudieran faltar algunas citas formateadas dentro del texto, por lo que solicito su restauración para poder incorporarlas según el formato necesario. En cuanto al interés enciclopédico, se trata de una entidad reconocida, con gran presencia mediática y que ha obtenido premios regionales y nacionales, por lo que es de considerar que cumple los criterios de relevancia enciclopédica aplicables a entidades deportivas y sociales, tal y como se ha valorado para otras entidades que sí están presentes en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ganduuul|Ganduuul]] ([[Usuario Discusión:Ganduuul|discusión]]) 14:05 10 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Juan Granero Liñán == ; Artículo * {{a|Juan Granero Liñán}} ; Razón * Borrado rápido dos veces, la primera por no tener "interés enciclopédico", según Ontzak. Sigo creyendo en la necesidad de que la entrada "Juan Granero Liñán"figure en la Wikipedia por las siguientes razones: 1. Juan Granero Liñán fue un político relevante en el contexto de la Guerra Civil en Granada. Su labor como alcalde socialista y como médico en el pueblo de Castril fue notable por sí misma y además simboliza el difícil cometido de los políticos en la retaguardia republicana. 2. En Castril (Granada) existe la calle Juan Granero y una placa que recuerda su lugar de trabajo, pero algunos (jóvenes sobre todo) no saben los detalles de su labor y función; para que las conozcan sería importante que Wikipedia, como enciclopedia libre del saber y del conocimiento, ofreciera sobre Juan Granero Liñán datos fiables. 3. La entrada se ha hecho con objetividad, lenguaje enciclopédico, con referencias fiables y comprobables, bibliografía actualizada y enlaces externos. Se puede comprobar que todo lo escrito es verdad y que la vida y el asesinato de JGL han sido objeto ya de dos libros y artículos periodísticos, lo que refuerza el punto 1. ; Usuario que lo solicita {{no firmado|Lolamcc2}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Restauración del Artículo sobre Claudio Alpízar Otoya == ;Artículo * {{a|Claudio Alpízar Otoya}} ;Razón Por este medio solicito que se restaure el artículo sobre Claudio Alpízar Otoya que se encuentra en mi taller: [https://es.wikipedia.org/wiki/Usuario:Rolandohb/Taller] El Sr. Claudio Alpízar es un polítologo y comunicador costarricense que se encuentra inscrito como candidato a la Presidencia de Costa Rica para el año 2026. Existe la página de Wikipedia de las [[Elecciones generales de Costa Rica de 2026|elecciones generales de Costa Rica]] para el año 2026, en la misma se lista a cada uno de los candidatos, entre ellos al Sr. Alpizar. Con la finalidad de que las personas que deseen conocer la trayectoria de cada persona que se ha postulado, el valor enciclopédico radica en la posibilidad de brindar toda la información posible y que la misma sea neutra y sin favoritismos y apoyada en fuentes de información comprobadas. Es claro que hay personas con trayectorias distintas dentro de la política y sus vidas publicas y privadas, por ello es necesario poder brindar un panorama de cada una con la información que se tenga. Se ha redactado usando un lenguaje neutro y usando las fuentes disponibles de organismos oficiales como el TSE y otros. Agradeciendo. ;Usuario que lo solicita [[Usuario:Rolandohb|Rolandohb]] ([[Usuario Discusión:Rolandohb|discusión]]) 16:11 11 oct 2025 (UTC) ;Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de la página El Canal de Boca == ; Artículo * {{a|El Canal de Boca}} ; Razón Quisiera solicitar la restauración del artículo El Canal de Boca, eliminado el 12 de octubre de 2025 por el usuario [[Usuario:Rafstr|Rafstr]] con el argumento de “recreación de material borrado”. Aclaro que el artículo no fue una simple recreación, sino una versión revisada y mejorada respecto a la anterior, con redacción neutral, estructura enciclopédica y referencias verificables de medios nacionales (TyC Sports, Infobae, La Nación, entre otros). Respecto al primer borrado del 19 de septiembre, niego completamente la afirmación de que el texto haya sido “creado automáticamente con IA con falsas referencias o alucinaciones graves”. Esa acusación me parece un disparate: el artículo fue redactado manualmente, con fuentes comprobables y sin inventar información. Reconozco que la primera versión pudo haber tenido un tono algo promocional en algunos fragmentos, pero esos puntos fueron corregidos antes del primer borrado, además de agregarse referencias externas que acreditaban su relevancia. El artículo fue borrado al día siguiente de colocarse la plantilla de “contenido promocional”, sin respetar el plazo habitual de discusión de 30 días, y en ambas ocasiones se ignoraron mis mensajes en la página de discusión del artículo, donde pedía que se precisara el supuesto error para poder corregirlo. A mi entender, El Canal de Boca cumple con los criterios de relevancia: es el canal oficial de una de las instituciones deportivas más importantes del país, con cobertura mediática y antecedentes similares a otros artículos existentes como [[Barça TV]] o [[Real Madrid TV]], que incluso tienen extensiones similares o menores. Por todo lo anterior, solicito que la página sea restaurada, dado que no existen fundamentos suficientes para su eliminación inmediata y se vulneró el proceso de revisión y diálogo previo con el editor. ; Usuario que lo solicita * [[Usuario:Boca Juniors Querido|Boca Juniors Querido]] ([[Usuario Discusión:Boca Juniors Querido|discusión]]) 17:30 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{No}}. Con 12.300 ediciones, ya no sos un novato para afirmar tan seguro que se vulneró el proceso de revisión. Si después de colocársele un cartel que otorga 30 días otro usuario le agrega un cartel que no lo otorga, aparece en la [[:Categoría:Wikipedia:Borrar (definitivo)]], y un biblio revisa el artículo antes de borrarlo, cosa que se hizo 28 minutos después del marcado -tiempo de sobra para revisar un artículo corto como ese y sus fuentes. El canal quizá sea relevante (no estoy seguro: soy hincha de Boca pero no soy un espectador asiduo del canal), pero eso hay que demostrarlo con las fuentes. Las que agregaste no demostraban que era relevante, sino que más bien se centraban en las noticias de su lanzamiento y "relanzamiento", centrándose en la figura de Pergolini; esas fueron noticias relevantes en su día, pero no datos de relevancia enciclopédica a mediano o largo plazo. Lo que tenés que demostrar es que el canal es o ha sido relevante en forma continuada en el tiempo, no solamente en el momento de su creación ni por la notabilidad de quien lo presenta. Por lo demás, es cierto lo que dice Rfastr: una sección en el artículo del CABJ posiblemente alcance. Gracias igualmente por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:02 20 nov 2025 (UTC)}} == Armando López Salamó == ; Artículo * {{a|Armando López Salamó}} ; Razón * La página no está completada. Todavía falta más información. ; Usuario que lo solicita * [[Usuario:Canelapi|Canelapi]] ([[Usuario Discusión:Canelapi|discusión]]) 22:16 12 oct 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Justamente ese es el problema: que no había sido completado siquiera con lo más básico. Lo he trasladado al lugar donde van los artículos a medio hacer que aún no cumplen las normas mínimas: tu taller. Lo encontrarás en [[Usuario:Canelapi/Taller/Armando López Salamó]]. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:48 20 nov 2025 (UTC)}} == Solicitud restauración de página Instituto Complutense de Ciencias Musicales == ; Artículo * {{a|Instituto Complutense de Ciencias Musicales}} ; Razón * El 13 de mayo un bibliotecario borro la página y cuando le pregunté las razones me indicó que era plagio. Le comenté que en ningun caso era la intención (soy nueva y era mi primera publicación) y que revisaría la sección que me indciaba (Investigación). He revisado textos, actualizado algunos datos, incluidas mas referencias a fuentes, pero la fuente principal de la actividad del Instituto es su sitio web. Es una materia muy nicho de musicología y no hay otro centro similar ni portales de contenidos vinculados a estas materias a la hora de explicar su actividad y proyectos. He contrastado algunos datos con el personal de Instituto. Desde el taller di a publicar. Espero haberlo hecho correctamente y agradezco cualquier indicación de mejora o correcciones necesarias. ; Usuario que lo solicita * {{no firmado|DiTrice|9:00 13 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración del artículo "Arrebato Libros" == ; Artículo * {{a|Arrebato Libros}} ; Razón * Se ha corregido el texto anterior de acuerdo con los criterios de relevancia de Wikipedia ; Usuario que lo solicita * Raimundo Andrés de Castro ; Respuesta (a rellenar por un bibliotecario) == Polideportivo Municipal “Pepín Moreno” de Fozaneldi == ; Artículo * {{a|Polideportivo Municipal “Pepín Moreno” de Fozaneldi}} ; Razón * El artículo creado era únicamente informativo acerca de un polideportivo en Oviedo, con información acerca de el origen de su nombre así como de su año de fundación o los deportes que se practican en él. Me gustaría saber si sería posible su restauración. Gracias ; Usuario que lo solicita * Huguedex <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Huguedex|Huguedex]] ([[Usuario Discusión:Huguedex|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Huguedex|contribs]]<span class="para_biblios"> • [[Special:Block/Huguedex|bloq]]</span>). 21:52 14 oct 2025 (UTC)</span></small> ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración Mauricio Wiesenthal. == ; Artículo * {{a|Mauricio Wiesenthal}} ; Razón * Fue borrada supuestamente por contenido promocional o laudatorio, dejando huérfanas a páginas donde se citaba enlace al autor. 00:01 7 oct 2025 Saloca discusión contribs. borró la página Mauricio Wiesenthal (Contenido promocional o laudatorio tras 30 días) La entrada describía, de manera objetiva, los datos biográficos y bibliográficos del autor, siguiendo el mismo enfoque que las versiones en inglés, gallego y catalán. Además, servía de base para que otros colaboradores ampliaran la información con nuevas fuentes y aportes verificables. La transcendencia del autor es verificable por las referencias en numerosas páginas, entre ellas la página de ganadores de la medalla de oro al merito a las bellas artes de España de 2016. https://es.wikipedia.org/wiki/Anexo:Premiados_con_la_Medalla_de_Oro_al_M%C3%A9rito_en_las_Bellas_Artes_en_el_siglo_XXI Así como a bibliografías como por ejemplo: https://es.m.wikipedia.org/wiki/Rainer_Maria_Rilke https://es.wikipedia.org/wiki/Orient_Express (sección libros) y otras dadas de alta que se podrán añadir por otros colaboradores cuando esta esté restaurada. El autor es un personaje conocido apareciendo en programas de television, internet, artículos de periódico, conferencias internacionales, cursos de universidades... como puede demostrar una simple búsqueda en google. https://www.google.com/search?q=Mauricio+Wiesenthal&oq=Mauricio+Wiesenthal&gs_lcrp=EgRlZGdlKgYIABBFGDkyBggAEEUYOTIGCAEQRRg7MgYIAhBFGDwyBggDEEUYPNIBCDM3ODlqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8 Sigue existiendo correctamente en inglés, catalán y gallego. https://en.wikipedia.org/wiki/Mauricio_Wiesenthal Ruego por favor se revise su borrado. Hace poco se borró también sin previo aviso o discusión por razones de "Relevancia no demostrada". Les ruego también indiquen que carencias ven en la página para encauzarla adecuadamente para el resto de colaboradores de Wikipedia. ; Usuario que lo solicita * [[Usuario:ErikWR|ErikWR]] ([[Usuario Discusión:ErikWR|discusión]]) 17:27 18 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud para la Publicación y Traslado: La Lechuza Caracas Polo Club == ;Artículo [[Usuario:Mariabea2024/TallerPolo1]] La Lechuza Caracas Polo Club ;Razón El artículo posee ya todas la referencias de alta calidad; siguiendo las indicaciones de [[Silviaanac]] y [[Marcelo]] tiene más de 15 fuentes independientes que documentan sus victorias en la Triple Corona de tres continentes (EE. UU., Europa y Rep. Dominicana), lo cual cumple y excede el criterio de Notabilidad para cualquier club deportivo." Tambien tiene las referencias en donde se incluyen datos de la historia , participación con jugadores de alto handicap, la referencia que respalda el handicap y posiciones de los jugadores, entrevistas publicas , y articulos donde se demuestra su trayectoria que data de hace mas de 20 años, tambien se profundiza en la tragedia de los caballos y las controversias todas con su respectiva referencia . He seguido la normativa indicando en cada dato la referencia de alta calidad. lo he dejado en mi taller [[Usuario:Mariabea2024/TallerPolo1]] para ser revisado y publicado. Gracias por su atención. ; Mariabea2024 * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 03:11 19 oct 2025 (UTC) ; Respuesta {{hecho}} --[[Usuario:Vanbasten 23|vanbasten_23]] ([[Usuario Discusión:Vanbasten 23|discusión]]) 07:59 20 nov 2025 (UTC) == Francisco Javier Barbadillo Alonso == ; Artículo * {{a|Francisco Javier Barbadillo Alonso}} ; Razón * Javier ha sido un referente en la archivística española e internacional. Ha recibido premios, menciones. Su aportación a los archivos municipales ha sido fundamental. La intención de crear la página wiki responde a la necesidad de no perder el hilo con proyectos como ECADL, ENWADA, Memoria de los pueblos de Guadalajara (España). Su participación en La Mesa de Trabajo de Archivos de la Administración Local es fundamental. El artículo sigue el esquema del de Antonia Heredia Herrera, ya publicado. Por favor, necesitamos su artículo. {{comentario}} Claro conflicto de interés por parte del usuario DaMarVell. El usuario reconoce {{diff|170078024|ser miembro de la Comisión Técnica de ANABAD España}} de la que Javier Barbadillo fue miembro y figura activa. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:11 20 oct 2025 (UTC) ; Usuario que lo solicita * [[Usuario:DaMarVell|DaMarVell]] ([[Usuario Discusión:DaMarVell|discusión]]) 08:08 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == División de Honor B femenina de rugby 2025-26 == ; Artículo * {{a|División de Honor B femenina de rugby 2025-26}} * [[Usuario:SkyRugby/Taller/División de Honor B femenina de rugby 2025-26]] ; Razón * Este artículo ha sido mejorado añadiendo ciertas referencias para que se pueda seguir al tiempo la liga y entender sus reglas y que equipos participan. Por si algun bibliotecario lo comenta, también añadire referencias a la pagina principal ([[División de Honor B femenina de rugby]]), pero creo que esta ya puede volver a ser publicada. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 14:45 20 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Xavier Bienvenido Mestre == ; Artículo * {{a|Xavier Bienvenido Mestre}} ; Razón Se quiere destruir una entrada en Wikipedia que realicé personalmente * Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. ; Caianb * [[Usuario:Caianb|Caianb]] ([[Usuario Discusión:Caianb|discusión]]) 10:09 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Qubika == ; Artículo * {{a|Qubika}} ; Razón * El artículo de Qubika fue redactado de una manera neutral, objetiva y siguiendo las políticas de Wikipedia. Qubika es una empresa del ámbito tecnológico con trayectoria comprobable y cobertura significativa en medios especializados, lo que acredita su notabilidad enciclopédica según los criterios vigentes. El artículo presentaba una vasta variedad de referencias que provenían de publicaciones reconocidas y externas a la organización, asegurando la independencia de las fuentes. Todo esto hace que sea de interés enciclopédico, tal como los artículos de [[Atlassian]], [[Anthropic]] y [[Synopsys]]. Por lo mencionado anteriormente, el artículo no debió ser borrado y debería ser restaurado. ; Usuario que lo solicita * [[Usuario:REDEFREDEF|REDEFREDEF]] ([[Usuario Discusión:REDEFREDEF|discusión]]) 12:54 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion y traslado La Lechuza Caracas Polo Club que esta en mi taller == ;Artículo * {{a| La Lechuza Caracas Polo Club}} ; Razón El articulo fue borrado bajo el criterio A4, y borrado bajo el criterio (G9). *Solicito por favor el traslado de mi Taller [[Usuario:Mariabea2024/TallerPolo1]] de La Lechuza Caracas Polo Club al espacio principal. He realizado y chequeado todas y cada una de las correcciones e instrucciones de @Marcelo , el artículo ha sido revisado y corregido en su totalidad para cumplir con todas las políticas sobre todos las de punto de vista neutral (PVN). Las referencias son las más importantes que he encontrado con investigación fundamentada en las fuentes principales y fiables son (ESPN, Marca, The Guardian, La Real Federación de Polo Española, USPA, Pololine, Federación de Polo de Los Estados Unidos etc.), y el contenido esta enfocado exclusivamente en su historia deportiva y palmarés del club**. El bibliotecario @Marcelo ha revisado y sugerido correcciones que ya han sido aplicadas espero haber cumplido con los requerimiento necesarios para su publicación. * [[Usuario:Mariabea2024|Maktub]] ([[Usuario Discusión:Mariabea2024|discusión]]) 17:40 23 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración o traslado del artículo Alex Piache == ;Artículo * {{a|Alex Piache}} '''Razón''' Buenas tardes. Me ha sido borrado el artículo Alex Piache, que trata de un futbolista y entrenador español, que trabaja en un club importante de Arabia Saudí y que en su carrera ha trabajado en 11 países distintos, siendo uno de los futbolistas y/o entrenadores españoles que ha trabajado en más países distintos. Me lo borraron una primera vez y estuve de acuerdo, pues estaba bastante falto de contenido. Pero esta segunda vez se añadió mucho contenido, con más información, con referencias, y la estructura del artículo mejorada, pero se volvió a marcar para borrado rápido casi de inmediato. De hecho, el artículo presenta esta vez una estructura prácticamente idéntica a su versión en catalán, que sí está publicada en ese idioma sin problemas desde hace meses. Me gustaría saber cuáles son los motivos de este segundo borrado (ya que el motivo dado esta vez era que ya se había borrado una vez y no se había mejorado, cosa que no comparto), y si no fuera posible su restauración, solicito que se traslade el texto escrito a mi taller para poder seguir trabajando en él siguiendo las directrices que me sean indicadas. Muchas gracias. ;Usuario que lo solicita * [[Usuario:JordiHuertas13|JordiHuertas13]] ([[Usuario Discusión:JordiHuertas13|discusión]]) 10:52 24 oct 2025 (UTC) ;Resultado {{admintab}} == Usuario:FieldsAgriWiki/FIELDS == ; Artículo * {{a|Usuario:FieldsAgriWiki/FIELDS}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo no es promocional, sino documentar una empresa española de innovación agrícola —FIELDS— la cual es punta de lanza en un segmento tradicional que no ha evolucionado en siglos. Literalmente. Y que es la primera del mundo en realizar esta actividad. Además, se adhiere con participación en programas europeos (EIT Food) y proyectos locales (Cámara de Comercio de Almería, Fundalogy, CADE, TRADE Andalucia, etc.). * La versión revisada eliminará todo lenguaje publicitario y añadirá referencias verificables desde medios externos (por ejemplo, colaboraciones en EISO, vídeo JEN Labs, cobertura en Fruit Logistica 2024, etc.). * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de Reatauracion - South Desert Studio == ; Artículo * {{a|Usuario:FieldsAgriWiki/South_Desert_Studio}} ; Razón * Solicito la restauración de esta página en mi espacio de usuario (taller) con el fin de reescribirla con tono estrictamente enciclopédico y aportar fuentes secundarias e independientes. * El objetivo es documentar a **South Desert Studio**, una empresa creativa y tecnológica con sede en Almería (España), dedicada al desarrollo de soluciones digitales que con su proyecto principal - FIELDS - intenta ayudar al Campo. Además, queremos crear una base documental de empresas relacionadas con el sector Agro, primero porque son startups y tenemos sinergia. Segundo porque una base de conocimiento debería recoger el trabajo único. Y aunque fuese como mínimo de una perspectiva histórica de las empresas que entran en juego me parece un asset increíble. * La versión revisada eliminará cualquier lenguaje promocional y se apoyará en referencias verificables, como colaboraciones con EISO (Escuela de Imagen y Sonido de Almería), participación en JEN Labs (YouTube), y cobertura de proyectos tecnológicos en medios externos. * Agradezco la revisión para poder trabajar la nueva redacción conforme a las políticas de relevancia enciclopédica y estilo de Wikipedia. ; Usuario que lo solicita * [[Usuario:FieldsAgriWiki|FieldsAgriWiki]] ([[Usuario Discusión:FieldsAgriWiki|discusión]]) 15:56 24 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Sofía Castillón == ; Artículo * {{a|Sofía Castillón}} ; Razón * Expón aquí ordenadamente tus razones - La página es relevante dado que detalla datos biográficos y bibliográficos de una escritora argentina premiada, referenciada en revistas de distintos países de latinoamérica y España, con las debidas citas agregadas. Esa información no figuraba en wikipedia. - La relevancia de la escritura se da por las referencias constatadas como la de Jorge Boccanera, que tiene entrada en wikipedia. - La entrada incorpora información nueva y relevante para la poesía y literatura nacional. ; Usuario que lo solicita: Quintero813 * [[Usuario:Quintero813|Quintero813]] ([[Usuario Discusión:Quintero813|discusión]]) 22:07 25 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alexa Grande == ; Artículo * {{a|Alexa Grande}} ; Razón *La artista española Alexa Grande tiene una gran trayectoria destacada en el arte habiendo ganado premios y trabajado con otros colectivos de artistas así como artistas a nivel individual *La introducción de su biografía responde a una "editatona" que quiere poner en valor a las mujeres artistas dándoles visibilidad y rompiendo las barreras de la poca representación femenina existente en wikipedia; tanto a la participación de mujeres como wikipedistas, como a la presencia de mujeres referenciadas/ biografiadas. ; Usuario que lo solicita * <small><span class="autosigned">—&nbsp;El comentario anterior [[Wikipedia:Firma de usuario|sin firmar]] es obra de [[Usuario:Casiopeia Aram|Casiopeia Aram]] ([[Usuario Discusión:Casiopeia Aram|{{leng|ESP|disc.|talk}}]] • [[Special:Contributions/Casiopeia Aram|contribs]]<span class="para_biblios"> • [[Special:Block/Casiopeia Aram|bloq]]</span>). </span></small> ; Respuesta (a rellenar por un bibliotecario) == Wuolah == ; Artículo * {{a|Wuolah}} ; Razón Han eliminado el artículo alegando los motivos G3 y A4. Sobre el motivo G3: El texto no contenía ni un solo adjetivo calificativo sobre la empresa o la plataforma. En ningún momento se expresaban juicios de valor ni se intentaba promover la marca. Las únicas dos razones por las que alguien podría pensar, tras una lectura superficial, que el artículo tenía un tono promocional son la mención al número de usuarios y la referencia a las rondas de financiación. Sin embargo, ambos datos son información esencial para comprender la magnitud y evolución de la empresa. No es lo mismo describir una plataforma con cinco mil usuarios que una con tres millones, y omitir ese contexto sería restar objetividad al texto. En cuanto a las rondas de financiación, se trataba de información verificable y relevante para cualquier lector interesado en la historia empresarial de Wuolah: una start-up que ha crecido gracias a la inversión de capital riesgo, incluyendo únicamente en el artículo una ronda destacada de cinco millones de euros y las dos iniciales que impulsaron su despegue. Si mi intención hubiese sido hacer publicidad, no habría incluido un párrafo sobre las controversias que ha generado la plataforma. Sobre el motivo A4: El argumento de que se trata de una empresa sin relevancia enciclopédica resulta difícil de sostener. Hablamos de una plataforma con más de tres millones de usuarios, cuyo uso ha sido objeto de análisis por parte de profesionales y académicos de universidades españolas. Wuolah tiene una presencia real y un impacto evidente en el ámbito educativo y tecnológico nacional, y, quién sabem podría llegar a convertirse en un [[Unicornio (finanzas)|unicornio]] en un futuro. Da la impresión de que, en ocasiones, las decisiones de borrado no responden tanto al contenido del artículo como a la familiaridad del revisor con el tema tratado. Cuando un artículo aborda una empresa tecnológica o un fenómeno reciente que aún no cuenta con reflejo en otras ediciones idiomáticas, parece más fácil considerarlo "no relevante" que detenerse a valorar sus méritos propios. Es una pena. ; Usuario que lo solicita * [[Usuario:Crls9011|Carlos]] ([[Usuario Discusión:Crls9011|discusión]]) 16:21 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Torneo Prensa Deportiva == ; Artículo * Torneo Prensa Deportiva ; Razón * Quiero recuperar la página, es un torneo especial AUF, reconocido oficialmente por ella y que, aunque no se haya mucha información de esta en la web, fue una copa relevante para su tiempo. Así como distintas copas de AUF que no han sido borrada (ejemplos: [[Torneo República 1979|Torneo de la República 1979]], [[Torneo Copa de Oro|Torneo Copa de Oro 1982]]). Es importante para el proyecto [[Wikiproyecto:Fútbol Uruguayo]], que en su propia biografía recita: Este Wikiproyecto tiene como finalidad crear, organizar y mejorar artículos relacionados con el fútbol en Uruguay (por ejemplo información sobre los equipos, torneos, etc). ; Usuario que lo solicita * [[Usuario:Manya es quemar|Manya es quemar]] ([[Usuario Discusión:Manya es quemar|discusión]]) 23:01 26 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración: Mario Clemente Zárate Fabián == ; Artículo * {{a|Mario Clemente Zárate Fabián}} ; Razón Solicito la revisión y posible restauración del artículo '''''[[Nombre del artículo|Mario Clemente Zárate Fabián]]''''', que fue borrado anteriormente. He trabajado en una '''versión mejorada y corregida''' en mi taller: [[Usuario:Samuel Chuquimia/Taller]] En esta nueva versión se añadieron referencias verificables, se mejoró el estilo enciclopédico y se ajustó a las políticas de [[Wikipedia:RELEVANCIA|relevancia]] y [[Wikipedia:PVN|punto de vista neutral]]. Solicito que un bibliotecario revise la versión actual y valore su posible restauración o traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Samuel Chuquimia|Samuel Chuquimia]] ([[Usuario Discusión:Samuel Chuquimia|discusión]]) 01:06 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Plasmatreat == ; Artículo * {{a|Plasmatreat}} ; Razón Mi intención era redactar el artículo de la forma más neutral posible y basándome en fuentes amplias y no publicitarias. No obstante, si hay pasajes del texto que no se perciben como suficientemente neutrales o fuentes que se consideran inadecuadas, en mi opinión sería más adecuado indicarlo debidamente. Según el motivo de eliminación G3, en los casos en los que existan dudas sobre la neutralidad, se debe utilizar la plantilla <nowiki>{{destruir|promocional}}</nowiki> o, alternativamente, <nowiki>{{promocional|27|octubre}}</nowiki>, de modo que sea posible debatir sobre los distintos pasajes del texto. Por lo tanto, sugiero que se revierta la eliminación y se utilice una de las plantillas mencionadas. De este modo, los pasajes concretos controvertidos podrían debatirse en la página de discusión y, si fuera necesario, modificarse. Muchas gracias. ; Usuario que lo solicita * [[Usuario:Steinhagen-33803|Steinhagen-33803]] ([[Usuario Discusión:Steinhagen-33803|discusión]]) 16:37 27 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) ; == Solicitud de restauración: Anexo:Lista de condecoraciones de la familia real británica por país == ; Artículo * {{a|Anexo:Lista de condecoraciones de la familia real británica por país}} ; Razón Solicito la restauración del anexo titulado [[Anexo: Lista de condecoraciones de la familia real británica por país]], que fue borrado bajo el criterio A1.1 (solo contiene enlaces o listas sin contexto). Deseo aclarar que el contenido sí poseía valor enciclopédico y no consistía únicamente en enlaces externos, ya que se trataba de una traducción fiel y referenciada de la página en inglés [[:en:List of honours of the British royal family by country]]. La traducción incluía el debido reconocimiento de atribución conforme a la política de traducción de artículos de Wikipedia. Mi intención al crear esta traducción fue ampliar la disponibilidad de información enciclopédica en español, de modo que los usuarios hispanohablantes puedan acceder fácilmente a este tipo de contenido sin necesidad de recurrir a versiones en otros idiomas. Además, el anexo buscaba presentar en una sola guía un resumen ordenado y verificable de las condecoraciones, órdenes y distinciones otorgadas a los miembros de la familia real británica, siguiendo el modelo de otros anexos similares como [[Condecoraciones de la Familia Real Danesa]]. Por estas razones, solicito respetuosamente que el anexo sea restaurado. Agradezco mucho el tiempo, la consideración y la oportunidad de seguir colaborando con el crecimiento de Wikipedia en español. ;Usuario que lo solicita * [[Usuario:Jangel figueroa|Jangel figueroa]] ([[Usuario Discusión:Jangel figueroa|discusión]]) 10:59 28 oct 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículo TECH Universidad == ; Artículo * {{a|TECH Universidad}} ; Razón * Se marcó el artículo como borrado rápido por "G3: Página de promoción, autopromoción, publicidad o que contiene muchos elogios innecesarios que no le permiten tener una redacción neutral". Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. Únicamente se han destacado algunos de los logros que ha obtenido la institución, todo ello respaldado por sus debidas fuentes. Entiendo que al hablar de galardones puedan haber interpretado que es elogio excesivo, pero no era esta la intención, solamente se quería poner en valor hechos reseñables y notorios de la institución que considero que deben ser mencionados. Quedo atento a respuesta, Muchas gracias. ; Usuario que lo solicita * Anterio.93 {{no firmado|Anterio.93|12:55 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == The Rockmen - Artículo == ; Artículo * {{a|The Rockmen}} ; Razón * Expón aquí ordenadamente tus razones: En el año 2024 intenté crear el artículo de The Rockmen pero no me lo permitía por no tener entradas en Wikipedia. En el año 2024 la banda The Rockmen participó en el Festival Cosquin Rock 2024, y el artículo de wikipedia menciona a The Rockmen. Se ha reformulado la redacción para eliminar los elogios innecesarios, dejando sólo la información básica. Considero que el artículo no debería ser borrado porque la Banda The Rockmen es parte de la cultura de la ciudad de Córdoba, Argentina, cuenta con una larga trayectoria (desde 2009) y es una de las pocas referentes del rock en una ciudad donde predmominan otros ritmos populares. Se han quitado los enlaces a plataformas de música. ; Usuario que lo solicita * coaac~eswiki {{no firmado|Cocaac~eswiki|15:14 28 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicito restauración por relevancia enciclopédica y visibilización del líder de Mermelada y J Teixi Band == ; Artículo * {{a|Javier Teixidor}} ; Razón * Creo que sinceramente Javier Teixidor tiene muchísima relevancia enciclopédica. Basta con hacer una sencilla búsqueda en [https://www.google.com/search?q=Javier+Teixidor&newwindow=1&sca_esv=de39b42295ba4a4a&rlz=1C1CHBF_esES1133ES1134&sxsrf=AE3TifMKcn1AyIK--wQ_w0GLryD13NV-QQ%3A1761783398682&ei=Zq4CadW4Kf-jkdUP1rOC4AQ&ved=0ahUKEwjVg5nN0sqQAxX_UaQEHdaZAEwQ4dUDCBM&uact=5&oq=Javier+Teixidor&gs_lp=Egxnd3Mtd2l6LXNlcnAiD0phdmllciBUZWl4aWRvcjIEECMYJzIKECMY8AUYJxjJAjIKEC4YgAQYQxiKBTIFEC4YgAQyBRAAGIAEMgQQABgeMgQQABgeMgQQABgeMgYQABgFGB4yBhAAGAUYHkjChgFQAFjSaXADeAGQAQCYAWKgAbsLqgECMjC4AQPIAQD4AQGYAhegArwMwgIKECMYgAQYJxiKBcICChAAGIAEGEMYigXCAg4QABiABBixAxiDARiKBcICDhAuGIAEGLEDGIMBGIoFwgIKEC4YgAQYFBiHAsICDRAuGIAEGLEDGBQYhwLCAhAQLhiABBixAxhDGIMBGIoFwgINEC4YgAQYsQMYQxiKBcICEBAAGIAEGLEDGEMYgwEYigXCAhAQLhiABBixAxiDARgUGIcCwgIKEAAYgAQYFBiHAsICCBAAGBYYChgewgIGEAAYFhgewgIFECEYoAHCAgUQIRifBcICBxAhGKABGArCAgcQIxiwAhgnwgINECMY8AUYsAIYJxjJAsICBxAuGIAEGA3CAgYQABgNGB7CAggQABgIGA0YHsICCBAAGIAEGKIEwgIFEAAY7wWYAwCSBwQyMi4xoAfkjwOyBwQxOS4xuAevDMIHCDAuNC4xOC4xyAdi&sclient=gws-wiz-serp Google] * Es uno de los grandes pioneros del rock en español de los 70 * Tiene página wiki los dos grupos que creó, el mítico Mermelada y la actual J Teixi Band ; Usuario que lo solicita * Juanrac! {{no firmado|Juanrac!|01:22 30 oct 2025}} ; Respuesta {{admintab|1=Ejemplo de resolución|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 23:13, 26 November 2025 (UTC)|3=}} == Solicitud para la Restauración del artículo Shirley Díaz == ; Artículo {{a|Shirley Díaz}} ; Razón Respetuosamente solicito la revisión y posible restauración del artículo «Shirley Díaz», considerando que la versión anterior no tenía como fin la autopromoción ni la publicidad, y que su contenido puede ser reformulado para cumplir plenamente con las políticas de neutralidad, verificabilidad y relevancia enciclopédica de Wikipedia. En relación con el motivo G3 (promoción o elogios): Deseo aclarar que la redacción original no pretendía exaltar ni promover a la persona mencionada, sino reflejar hechos comprobables de su trayectoria pública. Reconozco que algunas expresiones pudieron parecer valorativas; por ello puedo revisar y ajustar el texto para eliminar cualquier lenguaje subjetivo o adjetivo innecesario, de modo que mantenga un tono estrictamente informativo y neutral, conforme a las normas del estilo enciclopédico. En relación con el motivo A4 (falta de interés enciclopédico): Considero que la figura de Shirley Díaz reúne elementos suficientes para justificar su inclusión en Wikipedia, por su participación activa en la política nacional, su trayectoria pública y su aporte a la sociedad costarricense, todos ellos verificables mediante fuentes fiables (medios de comunicación reconocidos, registros oficiales y publicaciones institucionales). El propósito del artículo es contextualizar su papel dentro del ámbito político y social de Costa Rica, más allá de una simple compilación de información. Sobre mi posición como redactor: Aclaro que no tengo vínculo personal, familiar ni profesional con la persona biografiada. Mi interés es estrictamente enciclopédico y cultural, como parte de una iniciativa de creación de artículos sobre figuras costarricenses relevantes en distintas áreas. No he recibido compensación alguna por la redacción y estoy plenamente dispuesto a colaborar con la comunidad para reescribir o mejorar el artículo conforme a las políticas editoriales vigentes. Por tanto, solicito atentamente que se reconsidere la eliminación y se permita restaurar el artículo en mi espacio de usuario o taller, a fin de corregirlo y ajustarlo completamente a los estándares de Wikipedia antes de su eventual republicación. Agradezco su atención y la orientación que los bibliotecarios y revisores puedan brindar. ; Usuario que lo solicita *Juan Gabriel Cascante {{no firmado|Juan Gabriel Cascante Rodríguez|22:38 30 oct 2025}} ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauración de archivo “Octavio Murillo” == ; Artículo * {{a|Octavio Murillo}} ; Razón * Hola, solicito la restauración de la página “Octavio Murillo”, eliminada recientemente. Considero que el artículo cumple criterios enciclopédicos, ya que Octavio Murillo es un intérprete musical, cantante y actor argentino con una trayectoria pública, aunque reciente, documentada: Participación en la producción argentina del musical La novicia rebelde (2011), dirigida por Jonathan Butterell y producida por Time For Fun. Formación en Teatro Musical en la Escuela de Hugo Midón y Prosceño Teatro Musical. Participación en la serie televisiva Y ahora qué (2014) de Paka Paka. Selección para el rol protagónico de Melchior Gabor en el musical Despertar de primavera (2024), una producción con 16 nominaciones a los Premios Hugo y 10 a los Premios ACE, incluyendo nominaciones individuales para Murillo. Links para confirmar la información: La Nacion Clarin Battaglia Revista minúscula Nominación premios Hugo: https://www.lanacion.com.ar/espectaculos/teatro/premios-hugo-2025-todos-los-nominados-a-lo-mejor-del-teatro-musical-nid15082025/ Nominacion Premios ACE: https://www.lanacion.com.ar/espectaculos/teatro/todos-los-nominados-a-los-premios-ace-20242025-la-revista-del-cervantes-la-favorita-nid29102025/ Me comprometo a reescribir el artículo con tono neutral, eliminando cualquier expresión promocional y agregando referencias externas verificables de medios independientes que respalden los datos mencionados. Solicito que la página sea restaurada o mantenida en revisión mientras se incorporan estas mejoras, garantizando su cumplimiento con las políticas de Wikipedia. Gracias por su consideración ; Usuario que lo solicita * Guadalupetacon ; Comentario * Creo que se te olvidó comentar que vos figurás en algunos videos como Guadalupe Tacón Murillo, y que el actor se llama Octavio Tacón Murillo. No sé, me parece que esa ''coincidencia'' es una información importante si estás pidiendo que restauremos el artículo, siquiera en tu taller. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:52 4 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo {{a|Malke Tartakovski}} ;Razón Solicito la restauración del artículo sobre Malke Tartakovski: 1. Importancia literaria:Fue una escritora, periodista y poeta mexicana con una carrera de más de 20 años en el periódico Excélsior y publicaciones en varias revistas. 2. Obras publicadas: Publicó más de 13 libros de poemas, relatos, corrido mexicano y novelas, incluyendo títulos como "Sed por Ser" (1977), "Tepis Company" (1980) y "Jula de Agua" (2003). 3. Participación en asociaciones: Fue miembro activo de la Asociación UNIFEPYE (Unión Femenina de Periodistas y Escritoras) y participó en foros culturales. 4. Reconocimiento: Ha sido mencionada en fuentes como Enlace Judío y el Catálogo bibliográfico de la literatura en México del INBAL. 5. Fuentes offline: Aunque no hay fuentes en línea de la época, existen registros en bibliotecas y archivos físicos, como el Instituto Nacional de Bellas Artes y Literatura (INBAL) y la Biblioteca Nacional de México, en el archivo histórico de Excelsior que respaldan su carrera y obra. ;Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 20:31 10 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre William Allen (marino) == ; Artículo * {{a|William Allen (marino)}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:04 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración del artículo sobre Thomas Alexander Barns == ; Artículo * {{a|Thomas Alexander Barns}} ; Razón * Se han tenido en cuenta las indicaciones sobre la inclusión de referencias fiables. El artículo ya cuenta con cinco referencias, por lo que solicita su restauración. ; Usuario que lo solicita * [[Usuario:Labola|Labola]] ([[Usuario Discusión:Labola|discusión]]) 10:06 14 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de artículos. == ; Artículos * {{a|Blackburn Segrave}} * {{a|Short S.6 Sturgeon}} * {{a|Parnall Elf}} ; Razón * Solicito restaurar los artículos arriba indicados, que fueron trasladados a mi taller por Jaluj, aduciendo que no poseen referencias fiables y que no se ajustan al manual de estilo. Los artículos poseen referencias de publicaciones escritas (no entiendo la no fiabilidad) y se ajustan a este [[Wikipedia:Modelo de aeronave|modelo de aeronave]] (que fue creado en 2009 y que nadie ha retocado excepto yo en 2023). Si los artículos están tan mal, deben estar mal todos los que he creado anteriormente, porque todos son iguales (y son casi 1500). Cuando se lo expuse a Jaluj, me contestó: "Es muy interesante que tu argumento sea que llevas 10 años traduciendo y has llegado a los 1500 artículos porque me pregunto si después de 1500 artículos todavía no has aprendido que en Wikipedia debemos usar fuentes fiables para referenciar lo escrito y todavía desconoces nuestro manual de estilo entonces es mucho más preocupante de lo que yo pensaba cuando te proponía solicitar ayuda en el programa de tutoría." Este tono paternalista no viene al caso, me parece impertinente, y cuando veo que los artículos retirados fueron creados en fechas tan separadas como el 31 de mayo de 2024 (Short S.6 Sturgeon), el 21 de agosto de 2025 (Blackburn Segrave) y el 29 de octubre de 2025 (Parnall Elf) (cuando este año he publicado prácticamente un artículo cada día), lo que pienso es que no los ha revisado todos, sino que los ha escogido al azar para justificarse. Cuando le comento que los artículos son de traducción de la Wikipedia en inglés, parece no entender que las referencias aportadas son las del artículo original, que no las he puesto yo (indudablemente todos los artículos son mejorables). Aunque considero que el control de publicaciones es necesario (yo mismo revierto continuamente ediciones erróneas o vandálicas en los 6627 artículos que tengo en seguimiento, todos sobre aviación), la retirada al taller de estos artículos me parece excesiva, por todo lo expuesto. Un saludo. ; Usuario que lo solicita * [[Usuario:Teobaldo Cairós Herrera|Teobaldo Cairós Herrera]] ([[Usuario Discusión:Teobaldo Cairós Herrera|discusión]]) 09:49 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de Agustín de Vera Moreno == ; Artículo * {{a|Agustín de Vera Moreno}} ; Razón * He añadido nueva información verificable, incorporado referencias fiables y reestructurado el artículo tras su borrado el pasado 29 de agosto. La versión actualizada y completa puede consultarse en mi taller de usuario: https://es.wikipedia.org/w/index.php?title=Usuario:Macucal/Taller/Agust%C3%ADn_de_Vera_Moreno&oldid=169995361 ; Usuario que lo solicita * [[Usuario:Macucal|Macucal]] ([[Usuario Discusión:Macucal|discusión]]) 11:10 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Nuestra Madre María Santísima de la Aceptación (Advocación) == ; Artículo * {{a|Nuestra Madre María Santísima de la Aceptación (Advocación)}} ; Razón * Maria de la Aceptación es una advocación que nació hace 12 años en Sonsonate, el objetivo del artículo es recopilar la información que existe en línea acerca de la advocación Mariana, ya que el grupo en cuestión recopila si información mayormente en Facebook (No es una fuente académica) me he tenido que limitar a citar la información de su página web y alguna información adicional que he recabado de las publicaciones de las RR. SS. Tengo que recalcar que no es un artículo autopromocional ya que el objeto principal es brindar información sobre la advocación Mariana y no sobre ninguna persona en particular. ; Usuario que lo solicita * O Molina 2642 {{no firmado|O Molina 2642| 13:35 16 nov 2025}} ; Respuesta (a rellenar por un bibliotecario) == Tere Vila Matas == ; Artículo * {{a|Tere Vila Matas}} ; Razón • Me gustaría reabrir la discusión sobre la eliminación de la página dedicada a Tere Vila Matas. El motivo alegado fue la falta de relevancia enciclopédica, pero considero que este argumento no refleja adecuadamente el conjunto de su trayectoria. • Vila Matas es una de las pioneras de la pintura oriental contemporánea en España, y ha desarrollado un lenguaje artístico propio que integra elementos de Oriente y Occidente. Esta aportación constituye un avance significativo dentro del panorama artístico español y ha influido en otros creadores. • Además, ha recibido varios premios internacionales, lo cual refuerza objetivamente su relevancia y el impacto de su obra más allá del ámbito local. Estos reconocimientos, junto con su participación en exposiciones nacionales e internacionales, acreditan una trayectoria consolidada y verificable que cumple los criterios de notoriedad enciclopédica. • Por todo ello, considero que la artista sí reúne los requisitos para tener un artículo enciclopédico. Solicito que se revise nuevamente la decisión y se valore restaurar la página o permitir su recreación con referencias completas y verificables. ; Usuario que lo solicita * [[Usuario:Bimayal|Bimayal]] ([[Usuario Discusión:Bimayal|discusión]]) 18:11 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Contenido generado por IA, mal referenciado, posible conflicto de intereses. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:28 20 nov 2025 (UTC)}} == Servicio pasante == ; Artículo * {{a|Servicio pasante}} ; Razón * He añadido más referencias al artículo, que era la razón por la que se movió a mi [[Usuario:UnniMan/Taller/Servicio pasante|taller]]. * Tiene ahora referencias en la mayoría de los puntos de cada lista (cosa que no tiene la versión del inglés desde la que traducí el artículo). * Faltan un par por citar pero creo que el artículo cumple suficientemente los estándares. ; Usuario que lo solicita * [[Usuario:UnniMan|UnniMan]] ([[Usuario Discusión:UnniMan|discusión]]) 20:36 16 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauracion del articulo "Alamedadosoulna" == ; Artículo * {{a|Alamedadosoulna}} ; Razón * Se ha indicado autopromocion o publicidad. No tengo ninguna relacion con la banda de musica. En cuanto a los elogios, la redaccion del articulo es bastante neutra solo indicando un premio y una nominacion a otro (premios Goya) fundamentalmente para mostrar el interés enciclopédico. Hay múltiples referencias de grandes medios o fuentes independientes (Biblioteca Nacional) para referenciar la informacion sobre los componentes de la banda. ; Usuario que lo solicita [[Usuario:Sob444|Sob444]] ([[Usuario Discusión:Sob444|discusión]]) 22:02 16 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Aunque no por promoción, sencillamente no se puede recuperar un artículo en este formato, además de contenido probablemente generado por IA (con la ya conocida selección de referencias que tiran de todo - medios menores, listas, páginas personales, páginas genéricas/de búsqueda, etc.). Si crees que esta formación tiene relevancia enciclopédica, puedes probar una versión más seria en tu taller, escrita por ti, no por un algoritmo. Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:26 20 nov 2025 (UTC)}} == Rex Catholicissimus == ; Artículo * {{a|Rex Catholicissimus}} ; Razón * Expón aquí ordenadamente tus razones Se quiere destruir una entrada en Wikipedia que realicé personalmente Todo lo que aparece en el artículo está referenciado debidamente, frase por frase. No tiene ningún motivo promocional y así lo pueden comprobar con su lectura. Con el máximo respeto, creo que se trata de un error. El texto mantiene un tono neutral y expone hechos que son objetivos. No es una página de promoción, ni de autopromoción, ni de publicidad, ni tampoco contiene muchos elogios innecesarios que no le permiten tener una redacción neutral. ; Usuario que lo solicita * [[Usuario:Calvodespeinado|Calvodespeinado]] ([[Usuario Discusión:Calvodespeinado|discusión]]) 21:37 17 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Borrado de Pedro Máximo de los Ríos == ; Artículo * {{a|Pedro Máximo de los Ríos}} ; Razón * Solicito la restauración del artículo “Pedro Máximo de los Ríos”, borrado bajo el criterio de borrado rápido A4 (“Página sin interés enciclopédico”). Considero que la aplicación de este criterio ha sido incorrecta y presento los fundamentos: 1. Cumple claramente con el criterio de relevancia enciclopédica para cargos públicos Según la política de Wikipedia sobre biografías de personas vivas o fallecidas con cargos (WP:RELEVANCIA), tienen notabilidad automática: Vicegobernadores de provincias argentinas Senadores provinciales Intendentes municipales Figuras sometidas a juicio político o destitución con amplia repercusión histórica Pedro Máximo de los Ríos cumple todos estos puntos: ✔ Vicegobernador de Salta (1987–1991) ✔ Senador provincial por el departamento Los Andes (1983–1987) ✔ Intendente de San Antonio de los Cobres (1981–1982) ✔ Figura central de un juicio político que culminó en su destitución, hecho ampliamente cubierto por la prensa nacional (Página/12, Clarín, etc.) ✔ Participante relevante en la interna histórica entre Roberto Romero y Hernán Cornejo, con repercusiones institucionales y electorales posteriores ✔ Su destitución modificó la correlación política de fuerzas en Salta, tema mencionado incluso en estudios académicos sobre la política provincial La biografía de De los Ríos no es un caso marginal ni local: es una figura institucional equivalente al vicegobernador de cualquier provincia argentina, cargo que en Wikipedia tiene notabilidad automática. 2. Existen múltiples fuentes secundarias fiables El artículo se basa en fuentes independientes, verificables y de carácter periodístico o académico, entre ellas: Archivo histórico de Página/12 Cobertura en medios nacionales sobre su destitución Estudios académicos sobre la política salteña (UNSa, UNSAM) Obras de referencia sobre la historia política de Salta Por lo tanto, el artículo no era un “dato suelto sin interés enciclopédico”, sino una biografía con respaldo documental. 3. El motivo A4 no corresponde a figuras políticas relevantes El criterio A4 está diseñado para casos como: individuos sin relevancia comprobable currículums biografías promocionales personas sin cobertura independiente Ninguna de esas condiciones aplica aquí. El artículo describía una trayectoria política formal, verificable, con impacto institucional y con abundante bibliografía secundaria. 4. La biografía aporta contexto histórico enciclopédico La destitución de De los Ríos: constituye un hecho histórico documentado, se relaciona con la caída del gobierno justicialista en 1991, marca un antes y un después en la política provincial salteña, y forma parte de trabajos historiográficos sobre conflictos de poder en la provincia. Restaurar la entrada no solo es adecuado: contribuye a la comprensión de la historia institucional de Salta y de Argentina. Solicitud En virtud de lo expuesto, solicito respetuosamente la restauración del artículo, dado que: cumple ampliamente con los criterios de relevancia enciclopédica (WP:RELEVANCIA); cuenta con cobertura de fuentes secundarias independientes (WP:VERIFICABILIDAD); y el borrado por A4 no es aplicable al caso. Quedo disponible para mejorar la redacción, aportar referencias adicionales o ajustar el estilo al estándar enciclopédico. ; Usuario que lo solicita * [[Usuario:Maniacoso|Maniacoso]] ([[Usuario Discusión:Maniacoso|discusión]]) 02:52 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Japan Rugby League One 2024-25 == ; Artículo * {{a|Usuario:SkyRugby/Taller/Japan Rugby League One 2024-25}} ; Razón * El articulo fue enviado al taller por falta de referencias. He añadido las referencias faltantes y considero que podría volver a ser publicado. No es una pagina con una gran cantidad de referencias pero si las suficientes para poder entender el transcurso de la temporada. PD: Por si alguien hace un comentario, es cierto que la pagina principal debería ser mejor redactada y con más referencias ya que es la pagina que habitualmente se visita primero. Un saludo. ; Usuario que lo solicita * [[Usuario:SkyRugby|SkyRugby]] ([[Usuario Discusión:SkyRugby|discusión]]) 9:19 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Restauración de la página J. Teixi Band == ; Artículo * {{a|J. Teixi Band}} ; Razón * Previamente había resumido la página web de la banda, añadiendo discografía y enlaces, pero es cierto que le venía bien una revisión a fondo. Entendí el borrado. * Posteriormente había reescrito totalmente la página, evitando todos los defectos que tenía. Creo que hice un buen trabajo de una banda con mucha solera, muchos discos publicados y muchas entrevistas en prensa y en webs especializadas. * Fui especialmente cuidadoso en esta segunda edición, especialmente en la neutralidad del lenguaje y en la referencias, así como en la categorización. * Aproveché para poner el nombre correcto (que después de revisar sus discos era "J. Teixi", no "J Teixi"). * Os ruego que dediquéis un minuto en comprobar el texto y las referencias. Creo que hice un buen trabajo y a veces tengo la sensación de que borráis horas de trabajo en un par de minutos de revisión, tal vez porque no estáis familiarizados con la música pop española. ; Usuario que lo solicita * [[Usuario:Juanrac!|Juan R. Cuadra]] ([[Usuario Discusión:Juanrac!|discusión]]) 10:57 18 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Artículo== {{a|Artículo}} Jos%C3%A9_Riaza ; Razón Entiendo que la retirada del contenido fue razonable dado que el artículo presentaba incumplimientos de las políticas de Wikipedia. Mi intención es corregir esos problemas y ajustarme estrictamente a las políticas y lineamientos del proyecto, incluyendo verificabilidad, relevancia enciclopédica y uso adecuado de fuentes fiables. Solicito, si es posible, la oportunidad de mejorar el artículo para que cumpla plenamente con los estándares requeridos. Estoy en completa disposición de colaborar siguiendo las indicaciones pertinentes y respetando las decisiones editoriales de la comunidad. ; Usuario que lo solicita Azyurit ; Respuesta {{admintab|1=Lo mínimo que deberías haber hecho, por respeto a nuestro tiempo, hubiera sido seguir las indicaciones pertinentes y rellenar correctamente la plantilla de esta solicitud para que yo no tenga que perder 15 minutos de mi vida para encontrar el artículo del que hablás ya que {{a|Artículo}} nunca fue borrado y para encontrar tu cuenta (ya que ni siquiera firmaste) y luego rellenar la plantilla yo misma ya que ni siquiera le había puesto título a la solicitud, se lo tuve que poner yo porque la habías metido dentro de otra solicitud y tampoco dejaste lugar para la respuesta con lo cual el bot jamás iba a reconocerla y nadie iba a poder contestarla. Eso muestra el interés y respeto que tenés en este proyecto en el que estás desde hace tantos años con tantas cuentas distintas. El mismo interés y respeto que tenés por [[Wikipedia:Conflicto de interés|al anteponer tus intereses personales a los intereses de Wikipedia]] reclamando la restauración de un artículo sin relevancia y promocional. En cuanto a tu pedido la respuesta es {{no}} por varios motivos: en primer lugar, porque [[Wikipedia:No es un currículo]] y en segundo lugar porque el hecho de haberte creado tantos títeres para promocionarte atenta contra nuestras políticas. Te creaste [[Usuario:Joaquinflores]], [[Usuario:JoseCantalapiedra]], [[Usuario:Azyurit]], [[Usuario:Toweliee]], [[Usuario:Yaxdlm]], [[Usuaria:Yazmindelamora]], [[Usuario:Emmanuelkar]], [[Usuario:Helloadris]], todas [[Wikipedia:Cuenta de propósito particular|cuentas usadas exclusivamente para crear]] y recrear [[Óscar Fernández Vázquez]], [[José Riaza]] y [[Miguel Cantalapiedra]] sin contribuir en nada más ni estar activos en otros artículos y, lo más interesante de todo es que ningún otro usuario ha demostrado ningún interés en esos artículos. Por lo tanto no aceptamos tu intención de corregir esos problemas y ajustarte estrictamente a las políticas y lineamientos del proyecto, ya que resulta evidente que el proyecto no te interesa, solo te interesa promocionarte y promocionar a tus amigos. [[Wikipedia:Lo que Wikipedia no es|Wikipedia no es un sitio para promocionarse]], para subir tu CV tenés Linkedln y para promocionar tu trabajo tenés muchas redes sociales en las cuales podrías crearte una página. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 01:43 19 nov 2025 (UTC)}} == ATOMIC Authoring Tool == ; Artículo * {{a|ATOMIC _Authoring Tool}} ; Razón * Respetado bibliotecari@ esta página la cree hace 15 años y no quisiera que desapareciera esta entrada por un error que cometí este fin de semana al agregar información personal que no cumple con las normas de Wikipedia. Fue mi error pero no quisiera que se perdiera la antigüedad de esta entrada como se puede verificar en el internet archive: https://web.archive.org/web/20091109193502/https://es.wikipedia.org/wiki/ATOMIC_Authoring_Tool. Solo quiero que se pueda agregar la información de la nueva versión que se acaba de publicar con muchas mejoras significativas a este software libre. Durante estos 15 años este software libre ha sido descargado desde 109 países diferentes como lo pueden verificar en este link: https://sourceforge.net/projects/atomic-project/files/stats/map?dates=2009-03-05%20to%202025-06-16 Y creo que por eso vale la pena que se mantenga como una referencia a esta herramienta de creación de aplicaciones de realidad aumentada que fue la primera creada en español. Para este entonces las herramientas de realidad aumentada solo estaban en ingles y muchas personas pudieron acceder a esta tecnología gracias a que se eliminaba la barrera del idioma. Lo otro es que en este entonces había que saber programa c para crear tu propia aplicación, con ATOMIC por primera vez se podía crear aplicaciones de realidad aumentada sin ser programadores. De antemano mil gracias por su atención y compresión. Saludo cordial Jose David Cuartas ; Usuario que lo solicita * [[Usuario:Josedavidcuartas|Josedavidcuartas]] ([[Usuario Discusión:Josedavidcuartas|discusión]]) 02:13 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Lo siento, pero Wikipedia no es una plataforma para publicitar tus desarrollos. Que haya sobrevivido tantos años es cosa que ocurre con artículos antiguos que pasan desapercibidos (por ser poco leídos por los patrulleros), pues bien por ti, has tenido una buena racha (artículos similares publicados actualmente se borran inmediatamente). El conflicto de intereses y la condición de CPP son claros, no hay fuentes que podrían referenciar un claro valor enciclopédico de esta herramienta, y el contenido tiene matices promocionales. Lo siento, pero hay otras plataformas para lo que buscas, esta sigue siendo una enciclopedia. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 05:53 19 nov 2025 (UTC)}} == Solicitud de restauración: “Industria nutracéutica en España” == ; Artículo * {{a|Industria nutracéutica en España}} ; Razón * Hola. Solicito la restauración del artículo *Industria nutracéutica en España* para poder trasladarlo a mi taller y revisarlo conforme a las políticas de verificabilidad, neutralidad y relevancia enciclopédica de Wikipedia. El contenido se basaba en información verificable del sector (AESAN, normativa europea, informes de mercado y literatura académica), y quiero añadir las referencias necesarias y corregir el estilo. No se trata de un artículo promocional ni de investigación original. Agradezco la restauración para poder editarlo en mi taller personal. Gracias. ; Usuario que lo solicita * [[Usuario:BioTechEditor|BioTechEditor]] ([[Usuario Discusión:BioTechEditor|discusión]]) 09:06 19 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Raque Ogando == ; Artículo * {{A|Raque Ogando}} ; Razón * Hola, Me gustaría solicitar que se revierta el borrado de Raque Ogando. Su relevancia, dentro del feminismo contemporáneo, la argumento aquí: 1. Activismo feminista con aportes teóricos propios Ogando defiende un feminismo de clase y critica las derivas identitarias y punitivas del feminismo hegemónico. Su enfoque se ha difundido en charlas y entrevistas donde argumenta que la transformación real de la desigualdad pasa por modificar las estructuras del sistema, no solo por cambios en el Código Penal. Esta perspectiva aparece, por ejemplo, en su intervención recogida aquí: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html 2. Presencia pública y mediática significativa Ha participado en debates de gran seguimiento, como su intervención sobre el Caso Errejón, donde critica prácticas de juicio público y defiende la presunción de inocencia: https://www.arcoiris.tv/scheda/it/73971/ También ha aparecido en medios a raíz de la difusión de audios en un caso de presunto acoso sexual vinculado a Juan Carlos Monedero: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html 3. Producción intelectual y colaboración en medios Es autora de textos en Pikara Magazine sobre feminismo, clase y dinámicas sociales. Su perfil de autora está disponible en: https://www.pikaramagazine.com/author/raqueogando/] (https://www.pikaramagazine.com/author/raqueogando/ Además, ha coescrito el artículo “Linchamiento” junto con Santiago Alba Rico e Itziar Ziga, analizando las dinámicas del escarnio público y los debates sobre justicia: https://www.pensamientocritico.org/wp-content/uploads/2024/11/Alba-Rico-y-mas-dic-2024.pd 4. Impacto social y controversia pública Sus posiciones generan debate y controversia, lo cual es un indicador habitual de relevancia pública. Ha sido mencionada críticamente en diversos medios, como en este artículo: https://www.cuatro.com/noticias/sociedad/20250219/ogando-sergio-gregori-monedero-violencia-sexual_18_014815506.html Esta presencia en debates mediáticos de alto perfil demuestra que su actividad no pasa desapercibida y que contribuye a conversaciones relevantes en el espacio público. 5. Actividad formativa y académica Ha impartido charlas en espacios culturales y formativos, como la Universidad Ciudadana de Huesca, reforzando su papel como divulgadora y analista del feminismo y la política. Referencia: https://www.eldiariodehuesca.com/sociedad/raque-ogando-el-feminismo-centra-su-lucha-en-codigo-penal-no-transforma-sistema_36958_102.html A ver, después de todo lo aquí expuesto, espero que se reconsidere la decisión. Por su presencia mediática, su aportación al pensamiento feminista contemporáneo, su participación en controversias públicas de alcance nacional, su colaboración con medios especializados y su actividad como formadora y activista, Raque Ogando me parece cumple criterios de relevancia suficientes para ser considerada una figura con entidad propia para un artículo en Wikipedia. ; Usuario que lo solicita * [[Usuario:Ne0bi0|Carlinhos]] ([[Usuario Discusión:Ne0bi0|discusión]]) 10:18 19 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, difícil de leer, el artículo en sí basado en enlaces que demuestran más sensacionalismo y anécdotas de famosillos que clara relevancia enciclopédica. En todo caso, no se puede valorar con más detenimiento con una solicitud hecha de esta manera. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:18 20 nov 2025 (UTC)}} == Solicitar restauración de artículo borrado == ; Artículo * {{a|Carlos Sergio Fuster}} ; Razón * Hola, quería solicitar por favor que se revise la decisión del borrado rápido del artículo. El artículo corresponde a un académico de alta trayectoria y creo que merece la revisión y su respectiva restauración. Tal vez se pueda mejorar las citas o la redacción, en cuyo caso procederé a la corrección, pero no el fondo del tema. Hay miles de artículos similares y menos relevantes y no entiendo por qué se ha borrado este. La rapidez con la que se lo ha borrado solo indica que no se le ha dado la suficiente consideración al mismo. Gracias. ; Usuario que lo solicita * [[Usuario:Maria6826|Maria6826]] ([[Usuario Discusión:Maria6826|discusión]]) 13:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}}. Empecemos por lo más obvio: lo que [[WP:QUEHAYDE|ocurra con otros artículos]] no viene al caso: tu artículo debe ser defendible por sí mismo, y no lo es. Un profesor universitario, que dicta algunos cursos, y que escribió cuatro libros (tres de mis hermanos son profesores que han editado ese número de libros y más, y ninguno ha merecido aún su biografía en WP); no hay allí ninguna demostración de relevancia. Por el otro lado, la mitad de las fuentes lo mencionan al pasar, y la otra mitad son artículos publicados por él; lo que demostraría relevancia son artículos ''sobre él'', no los escritos por él ni los que lo mencionan de pasada. La relevancia se la da la atención que le prestan los demás. Y para terminar, en Editorial Antigua aparece el libro que vos decís que escribió a nombre de G. Maturo, y otro distinto que vos no citaste a nombre de él (???). Lo siento, ni relevante por las referencias, ni relevante ''per se''. Algún día, quizá...|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:31 20 nov 2025 (UTC)}} == Restauración de Francisco Javier Aguilar Pache == ; Artículo * {{a|Francisco Javier Aguilar Pache}} ; Razón * Francisco Javier Aguilar Pache es una persona de referencia en Badajoz, una persona pública del ámbito político, solicito que se restaure su página. Dejo por aquí los enlaces que justifican la inclusión del artículo: https://fotos.europapress.es/fotonoticia/f5785022 https://www.lacronicabadajoz.com/badajoz/2023/02/09/javi-pache-candidato-iu-alcaldia-100041103.amp.html https://www.ondacero.es/emisoras/extremadura/badajoz/noticias/badajoz-elige-javier-aguilar-pache-como-nuevo-coordinador-local_2024022665dcdac9344c980001c15250.html https://www.hoy.es/badajoz/elige-francisco-javier-candidato-iu-20230209162813-nt.html ; Usuario que lo solicita * [[Usuario:Gabriela Campoamor|Gabriela Campoamor]] ([[Usuario Discusión:Gabriela Campoamor|discusión]]) 14:28 19 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, ningún cargo público, ningún premio, ninguna fuente que lo mencione en el artículo, y las que aportas aquí sólo mencionan que fue elegido coordinador de un partido en una ciudad. Ni parece tener relevancia per se, ni hay fuentes que la sugieran.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 22:16 20 nov 2025 (UTC)}} == Solicitud de revisión y traslado: Anselmo López (músico) == ; Artículo * {{a|Anselmo López (músico)}} ; Razón * Solicito la revisión y el traslado del artículo «Anselmo López (músico)» de mi [[Usuario:Herald D'Sam/Taller/Anselmo López (músico)|taller personal]] al espacio principal de wikipedia. * Este artículo ha pasado por un proceso de mejora continua basado en las sugerencias de los bibliotecarios. * Realicé una solicitud anterior (24 dic 2024), pero se me sugirió agregar fuentes de calidad y artículos de la prensa nacional. Posteriormente (4 abr 2025) en mi página de usuario se me aconsejó wikificarlo, mejorar la congruencia verbal, sintaxis y gramática, crear una nueva sección de Premios y reconocimientos, entre otros ajustes. * He seguido rigurosamente todas las instrucciones para la mejora de todos los puntos señalados. Considero que el artículo cumple con los criterios de verificabilidad y relevancia enciclopédica requeridos. Agradezco de antemano la revisión y, en caso de ser considerado apto, el correspondiente traslado al espacio principal. ; Usuario que lo solicita * [[Usuario:Herald D'Sam|HD&#x27;Sam]] ([[Usuario discusión:Herald D'Sam|discusión]]) ; Respuesta (a rellenar por un bibliotecario) [[Usuario:Herald D&#39;Sam|HD&#39;Sam]] ([[Usuario Discusión:Herald D&#39;Sam|discusión]]) 23:18 19 nov 2025 (UTC) == Solicitud restauración artículo David Castillo M. == ; Artículo * {{a|David Castillo M.}} ; Razón * Expón aquí ordenadamente tus razones Cuando se decreto la página para borrado y los motivos hablamos con el usuario Casisgaal para que nos ayudara a ver en donde hacían esos errores, porque el lenguaje que se utilizaba era el extraído de las fuentes, no obstante hicimos algunas correcciones. Además añadimos varias referencias y fuentes oficiales que acreditaban la información del artículo. Con respecto a la relevancia enciclopédica se explicó que esa persona es la única que ha entrevistado a Zelenski para un libro en europa en una entrevista de carácter personal, el único que ha recibido una medalla de honor por ello y además ahora es alguien muy relevante en las negociaciones para la solución del problema de Chipre, por lo que creemos que sí que el artículo tiene relevancia enciclopédica, además de que por su trabajo como escritor y como periodista en los medios de comunicación, es un personaje público y por lo tanto tiene relevancia enciclopédica. Por supuesto cualquier modificación en el lenguaje empleado que creáis que se debe modificar estamos abiertos a revisarla, pero creemos que la página debe ser restaurada y que el borrado con las correcciones que se hicieron y las explicaciones que estamos dando ahora no debería procederse a borrar la pagina. Muchas gracias por su ayuda y comprensión. ; Usuario que lo solicita * [[Usuario:Nuukent|Nuukent]] ([[Usuario Discusión:Nuukent|discusión]]) 15:22 20 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, lo siento. No solamente no tenía referencias al contenido del texto (tenía enlaces externos, pero eso no es lo mismo que [[Ayuda:Cómo referenciar|referenciar]]), sino que además estaba completamente lleno de expresiones promocionales. Si no eres el mismo biografiado y tampoco lo haces para él, puedes volver a intentarlo. Pero, por favor, haz el favor de editarlo con referencias que respalden cada dato que aportes al texto y escribiéndolo como si fuera un listado de datos objetivos. De hecho, hazlo con si fuera la biografía de alguien que no te cae bien; sin duda te saldrá mucho más cerca del [[WP:PVN|punto de vista neutral]] que esa pieza publicitaria que habías editado. Gracias.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:52 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * {{a|Patprimo}} ; Razón * Solicito la restauración del artículo '''Patprimo'''. La marca cumple con los criterios de relevancia enciclopédica, ya que cuenta con más de seis décadas de trayectoria en la industria textil colombiana, forma parte del Grupo Pash y tiene presencia en varios países de América Latina. * Aporto varias fuentes independientes, fiables y de reputación comprobada que documentan su historia, trayectoria y actividad empresarial: **1. Modaes** (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-primo-hace-doblete-en-popayan-en-su-sesenta-aniversario **2. Valora Analitik** (medio económico nacional) https://www.valoraanalitik.com/la-historia-de-patprimo-marca-colombiana/ **3. ANDI – Asociación Nacional de Empresarios de Colombia** (organización institucional) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo-con-una-maquina-de-coser * Estas fuentes acreditan: – Fundación en 1957 – Desarrollo de Manufacturas Eliot S.A.S. – Integración vertical – Relevancia en el sector textil – Presencia regional * Solicito la restauración para poder mejorar y ajustar el artículo según las políticas de verificabilidad, neutralidad y estilo enciclopédico. ; Usuario que lo solicita * Ramiita ; Respuesta {{admintab|1={{No}}, por favor argumenta tú mismo las razones, ya sabemos lo que piensa la IA y lo que ella piensa hacer para mejorarlo (nada en absoluto). Ahora queremos saber qué es lo que entendiste tú y qué propones hacer tú.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 17:42 20 nov 2025 (UTC)}} == Patprimo == ; Artículo * Patprimo ; Razón * Solicito la restauración del artículo «Patprimo». La marca cumple con los criterios de relevancia enciclopédica y existen múltiples fuentes independientes, nacionales e internacionales, que respaldan su trayectoria de más de 60 años, su presencia regional y su importancia dentro del sector textil. Fuentes independientes que justifican relevancia: 1. Modaes (medio internacional especializado en industria textil) https://www.modaes.com/empresas/la-colombiana-pat-pri... 2. Valora Analitik (medio económico reconocido a nivel nacional) https://www.valoraanalitik.com/la-historia-de-patpri... 3. ANDI (Asociación Nacional de Empresarios de Colombia) https://www.andi.com.co/Home/Noticia/1060-todo-comenzo... Estas fuentes demuestran: – Fundación en 1957 – Expansión nacional e internacional – Modelo de integración vertical – Cobertura mediática amplia – Participación en el Grupo Pash El contenido respetaba la verificabilidad, las referencias estaban correctamente añadidas y el artículo era neutral. Solicito que un bibliotecario lo revise para su restauración. ; Usuario que lo solicita * [[Usuario:Ramiita|Ramiita]] ([[Usuario Discusión:Ramiita|discusión]]) 19:41 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Se te ha pedido algo antes y tú... caso omiso, sigues repitiendo todo lo que regurgita la IA, este tipo de solicitudes difícilmente las vamos a tomar en serio. Dicho esto, tu artículo, de 3 líneas y media y ningún dato que avale una relevancia enciclopédica no podría recuperarse. Si crees que la entidad tiene relevancia enciclopédica, por favor desarrolla un artículo en condiciones en tu taller, solicita revisión de terceros y vuélvelo a solicitar por aquí, correctamente y usando tus propias palabras (no nos hables de modelo de integración vertical ni de nos hagas copipega de enlaces medio desarrollados por favor). Un saludo. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:14 20 nov 2025 (UTC)}} == José Alberto Couttolenc Buentello == ; Artículo * {{a|José Alberto Couttolenc Buentello}} ; Razón *José Alberto Couttolenc es diputado local plurinominal del Estado de México, coordinador del Grupo Parlamentario del Partido Verde Ecologista de México, y vicepresidente de la Junta de Coordinación Política del Congreso mexiquense, cargos de alta responsabilidad y notoriedad pública.​ *Fue diputado federal en el Congreso de la Unión (2015-2018), donde integró comisiones nacionales sobre agua, infraestructura y desarrollo social.​ *Ha sido dirigente estatal y nacional del Partido Verde Ecologista de México, encabezando procesos electorales y campañas partidistas relevantes en el Estado de México, incluyendo coordinación en elecciones que resultaron en la gobernadora actual Delfina Gómez Álvarez. *La trayectoria y los cargos de José Alberto Couttolenc han sido documentados por múltiples fuentes oficiales: Congreso Local, prensa legislativa, sitios institucionales de gobierno y el propio partido, todos accesibles y verificables públicamente.​ *Existen notas periodísticas, informes legislativos y registros biográficos que confirman su relevancia política y pública en México.​​ *Su trayectoria educativa y profesional está respaldada en sitios de universidades y fuentes independientes. *Ha impulsado políticas ambientales, de agua, economía, participación ciudadana y apoyo a mujeres y jóvenes con distintas iniciativas legislativas y campañas reconocidas.​ *Ha tenido liderazgo efectivo en estrategias partidistas, consolidando al Partido Verde como fuerza política relevante en el Estado de México. *No es un caso de vandalismo, autopromoción, contenido falso, ni artículo duplicado.​ *Se fundamenta en hechos notables, verificables y relevantes de acuerdo con los criterios establecidos para biografías en Wikipedia. ; Rgonunezsanchez * [[Usuario:Rgonunezsanchez|Rgonunezsanchez]] ([[Usuario Discusión:Rgonunezsanchez|discusión]]) 20:28 20 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Solicitud desarrollada por una IA, mismas frases repetidas, frases huecas y cosas sin nada que ver con tu caso (nadie ha hablado ni de artículos duplicados ni de contenido falso). ¿Has leído los motivos por los que el artículo fue marcado para borrar? Aparte de eso, el artículo ni siquiera ha sido borrado aún (¿has leído las instrucciones de esta página?). En fin, cierro. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 20:56 20 nov 2025 (UTC)}} == Ruslana (cantante hispano-ucraniana) == ; Artículo * {{a| Ruslana (cantante hispano-ucraniana)}} ; Razón * Ruslana es una cantante española que saltó a la fama tras participar en un talent show en 2023, en el que obtuvo el tercer puesto. El artículo elaborado sobre su trayectoria incluye 30 referencias, entre ellas citas de medios destacados como ''Rolling Stone'' y ''Jenesaispop''. En referencia al nombre del artículo sería conveniente que se redirigiera a [[Ruslana Panchyshyna]]; nombre real de la cantante, sin embargo ha sido bloqueado para su creación. ; Usuario que lo solicita * [[Usuario:Editedit446|Editedit446]] ([[Usuario Discusión:Editedit446|discusión]]) 20:50 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Alfonso Herrera-Salcedo González == ; Artículo * {{a|Alfonso Herrera-Salcedo González}} ; Razón * Restaurese artículo para comprobar la neutralidad de este mismo (llegar a un consenso). El artículo era una traducción de otro e, investigación bibliográfica "¿Era promocional?. ; Usuario que lo solicita * [[Usuario:CRAW309|CRAW309]] ([[Usuario Discusión:CRAW309|discusión]]) 21:27 20 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Malke Tartakovski == ; Artículo * {{a|Malke Tartakovski}} ; Ella fue una figura notable en el ámbito cultural y literario. * Expón aquí ordenadamente tus razones Nuevamente estoy solicitando la restauración de la página de Malke Tartakovski. Cuenta con algunas referencias, entre ellas: - La biografía de Malke Tartakovski en el INBAL y en la Enciclopedia de la literatura en México, lo que sugiere que es una figura relevante en el ámbito cultural y literario. - Aunque su paso por el periodismo no es verificable a través de fuentes en línea, existen registros impresos y archivos que respaldan su trabajo en Excélsior. - La presencia de su nombre en Wikidata (Q130464331) indica que hay interés en su figura y que se han realizado esfuerzos para documentar su vida y obra. - Sé que su página web es una fuente primaria, pero en ella se encuentran varias imágenes de periódicos donde ella colaboró. Agradezco su tiempo y espero que consideren la restauración del artículo de Malke Tartakovski ; Usuario que lo solicita * [[Usuario:Chaya1964|Chaya1964]] ([[Usuario Discusión:Chaya1964|discusión]]) 21:37 20 nov 2025 (UTC) ; Respuesta {{admintab|{{archívese|Cerrar}}. Solicitud duplicada, ya hay una abierta. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 21:43 20 nov 2025 (UTC)}} == Solicitud de restauración de «Michal Novotny» == ; Artículo * {{a|Michal Novotny}} ; Razón * Hola. Soy la creadora del artículo «Michal Novotny», que fue borrado por borrado rápido con. Entiendo que las versiones anteriores podían considerarse promocionales y que el estilo no era plenamente enciclopédico. Por este motivo he preparado una versión nueva, mucho más breve y neutral, en mi taller de usuaria, centrada únicamente en datos biográficos básicos y en la actividad profesional verificada por fuentes independientes: [[Usuario:BlackHoleCrew/Taller/Michal Novotny]] En esta versión del texto: * Se ha eliminado todo lenguaje valorativo o de tipo publicitario. * Solo se mencionan hechos verificables. * Se apoya exclusivamente en fuentes independientes y de medios de comunicación consolidados. Entre las fuentes que considero relevantes para la posible restauración se encuentran: * Perfil extenso en el medio checo ''Seznam Zprávy'': https://www.seznamzpravy.cz/clanek/magazin-zivotni-styl-jeho-ruce-pomohly-nadalovi-i-keanu-reevesovi-sam-pritom-prekonal-tezky-pad-265391 * Cobertura en el diario deportivo español ''Marca'': https://www.marca.com/tenis/wimbledon/2023/07/07/64a7db20e2704ebe808b45da.html * Artículo de perfil en ''El Mundo'': https://www.elmundo.es/yodona/vida-saludable/2025/07/06/68069b85e85ecebd2c8b45a0.html Soy consciente de que la existencia del artículo en otras Wikipedias (en checo) no garantiza la relevancia en es.wiki, pero la menciono solo como contexto adicional. [[https://cs.wikipedia.org/wiki/Michal_Novotn%C3%BD_(fyzioterapeut)]] Solicito, por favor, que se revise el contenido actual de mi taller y que se valore: * o bien la restauración del artículo al espacio principal basándose en esta versión más neutral. Muchas gracias de antemano por su tiempo y por cualquier orientación adicional. ; Usuario que lo solicita * [[Usuario:BlackHoleCrew|BlackHoleCrew]] ([[Usuario Discusión:BlackHoleCrew|discusión]]) 09:36 21 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Entre sin relevancia enciclopédica y promocional, posible spam cross-wiki, enlazar con la wiki checa no solo que no garantiza la relevancia, sino deja patente que se trata de una CPP, probablemente editando bajo CDI. Tampoco te hace gran favor el contenido generado por IA en tu taller, con estas referencias que no indican valor enciclopédico. En fin, no pero gracias. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 16:53 22 nov 2025 (UTC)}} == Restauración de la entrada "Psicología del Testimonio" == ; Artículo: * {{a|Psicología del testimonio}} ; Razón: borrado rápido * Expón aquí ordenadamente tus razones: Buenos días, no estoy de acuerdo con lo que se ha comentado de que el artículo escrito cumple con ciertos criterios de borrado rápido. Tal y como se puede ver, la información incluida en la entrada no es una fuente de información original, ya que está debidamente citado. Si las citas no son suficientes me gustaría saber qué parte no se ajusta a las mismas. Pero bajo mi punto de vista, el artículo ha sido revisado y no se incluye ninguna información que no salga en las referencias documentales. ; Usuario que lo solicita: Nerea Vicente cricket * [[Usuario:Nerea Vicente cricket|Nerea Vicente cricket]] ([[Usuario Discusión:Nerea Vicente cricket|discusión]]) 10:54 23 nov 2025 (UTC) ; Respuesta {{admintab|1={{Sí|}} Lamento tener que contradecir a {{u2|Virum Mundi}} y a {{u2|Casisgaal}}, pero el tema no es investigación original ni fuente primaria: apenas uno busca ese concepto, aparecen cientos de citas e incluso libros llamados exactamente así; y las fuentes respaldaban, al menos en parte, el contenido. Lo que sí veo es que el autor no ha referenciado todas las afirmaciones que se hacen en el texto con las fuentes aportadas, que además podrían perfectamente ser algunas más, ni ha desarrollado por completo el concepto. No sabemos si es una rama nueva o antigua de la psicología, ni tampoco sabemos dónde se enseña, por ejemplo. El tema merece un desarrollo mucho mayor, para demostrar justamente que no te lo has inventado vos, {{u2|Nerea Vicente cricket|Nerea}}. Por consiguiente, y viendo que tenés un cierto manejo de la información y las fuentes, lo traslado a tu taller, para que allí lo mejores y no corra ya riesgo de que sea borrado porque no termine de demostrar relevancia: lo encontrarás en '''[[Usuario:Nerea Vicente cricket/Taller/Psicología del testimonio]]'''. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 15:55 23 nov 2025 (UTC)}} == [[Curazao en la Copa Mundial de Fútbol de 2026]] == ; Artículo: * {{a|Curazao en la Copa Mundial de Fútbol de 2026}} ; Razón: * No me parece que hayan razones válidas por la eliminación del artículo [[Curazao en la Copa Mundial de Fútbol de 2026]], pero como otros artículos de equipos en la [[Copa Mundial de Fútbol de 2026]], este sí me parece enciclopédicamente relevante. ; Usuario que lo solicita: * [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 00:55 24 nov 2025 (UTC) ; Respuesta {{admintab|1=Pues entonces tendrías que ponerte a crear artículos enciclopédicos. Una serie de tablas sin cobertura de fuentes fiables no es un artículo enciclopédico. Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. Cuando crees artículos que cumplan con las políticas de [[WP:VER]] y [[WP:FF]] vas a ver que no los van a borrar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:56 26 nov 2025 (UTC)}} == Vacaciones (banda) == ; Artículo * {{a|Vacaciones (banda)}} ; Razón * Grupo musical que, si bien a día de hoy no goza de popularidad, fue fundamental en la era del indie pop español de los años '90. Existen [[Especial:LoQueEnlazaAquí/Vacaciones (banda)|varias páginas]] que enlazan a la misma (incluso en el artículo [[Indie pop#Tonti pop|Indie pop]] se los menciona como uno de los principales grupos de esa época, al igual que muchos otros que sí tienen su página en Wikipedia), tenía varias referencias y estaba bien estructurado y redactado. ; Usuario que lo solicita * [[Usuario:SCC98|SCC98]] ([[Usuario Discusión:SCC98|discusión]]) 01:41 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Vandalismos y LTA no aceptamos. (Ver https://es.wikipedia.org/wiki/Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios#Elefant_Records_y_los_discos_que_produce_para_Los_Fresones_Rebeldes_o_La_Casa_Azul%2C_etc.) |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:49 26 nov 2025 (UTC)}} == Argumento para no borrar página == ; Artículo *; Artículo * {{a|Medardo Arias Satizábal}} ; Razón * Consideró que la información entrada da una breve reseña de este escritor colombiano, si bien no será perfecta, pero dará oportunidad para que más personas colaboren y enriquezcan la información que hay de la cultura del Pacífico colombiano en wikipedia e internet, gracias ; Wikipandacolombianoa * [[Usuario:Wikipandacolombiano|Wikipandacolombiano]] ([[Usuario Discusión:Wikipandacolombiano|discusión]]) 04:56 24 nov 2025 (UTC) ; Respuesta {{admintab|1={{no}} Wikipedia es una enciclopedia colaborativa, y como tal, los artículos deben cumplir con ciertos requisitos básicos, entre ellos relevancia enciclopédica, el tema debe estar documentado en [[WP:FF|fuentes fiables e independientes]], debe mantener el [[WP:PVN|punto de vista neutral]], los textos [[Wikipedia:Lo que Wikipedia no es|no deben promover ni publicitar personas o sitios o ideas]], la redacción debe ser enciclopédica, los artículos deben escribirse con tono formal, objetivo y siguiendo el estilo propio de una enciclopedia, pero lo más importante es la cobertura significativa de fuentes terciarias independientes y [[WP:VER|verificables]] que respalden la información. [[Wikipedia:No es un currículo]] y las páginas de [[Wikipedia:Páginas de autopromoción]] son eliminadas. Si lo que querés es subir tu CV a las redes podés usar [[Linkedln]]. |2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:42 26 nov 2025 (UTC)}} == Weekend Drama == Hola. Solicito la revisión del marcado de borrado rápido (G9) aplicado por el usuario Ontzak a la página Weekend Drama. El usuario Casisgaal había colocado previamente la plantilla <nowiki>{{sin relevancia}}</nowiki> y abrió una discusión formal, otorgando el plazo correspondiente de 30 días para mejorar el artículo. Yo he estado realizando mejoras continuas, agregando más de 50 referencias de medios fiables coreanos e internacionales y respondiendo a la discusión como corresponde. Sin embargo, el usuario Ontzak aplicó un G9 sin verificar que: ya existía una discusión abierta, el artículo estaba en proceso de mejora, el plazo de 30 días está vigente, y la plantilla previa no autoriza un borrado inmediato. Esto constituye un error procedimental, ya que el criterio G9 no corresponde cuando existe un proceso de mantenimiento en curso y una discusión activa. Solicito respetuosamente que: 1. Se revise la aplicación del borrado rápido. 2. Se retire la plantilla G9 si se confirma que no procede. 3. Se continúe el proceso desde la discusión iniciada por Casisgaal, que es el procedimiento correcto. Quedo atenta y agradezco la intervención de los bibliotecarios. * {{weekend drama}} ; g9 inapropiado contra las prácticas editoriales ; Usuario que lo solicita: Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 11:51 25 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) Uso incorrecto del borrado rápido en «Weekend Drama» Hola. Deseo reportar un uso incorrecto del borrado rápido aplicado al artículo «Weekend Drama». El usuario Ontzak marcó el artículo con la plantilla de borrado rápido (criterio G9), aun cuando el mismo artículo ya se encontraba bajo una plantilla de mantenimiento <nowiki>{{sin relevancia}}</nowiki>, colocada previamente por Casisgaal, con un plazo vigente de 30 días para resolver la discusión y mejorar el contenido. La política establece que cuando hay una discusión abierta o un proceso de mantenimiento activo, no corresponde aplicar un borrado rápido, ya que esto interrumpe el procedimiento normal y el tiempo concedido al editor para trabajar en el artículo. Yo había estado agregando contenido verificable y referencias dentro del plazo asignado. El marcado para borrado rápido ignoró ese proceso previo, lo que constituye una aplicación incorrecta del criterio G9. ✔ Solicitud Solicito que un bibliotecario revise este caso y, de ser procedente, retire la plantilla de borrado rápido para que el artículo pueda continuar su curso normal bajo la plantilla de mantenimiento original, respetando el plazo de 30 días otorgado. Gracias de antemano por la atención. Firma: [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Fabiola Herrera Igreda * [[Usuario:Fabiola herrera igreda|Fabiola herrera igreda]] ([[Usuario Discusión:Fabiola herrera igreda|discusión]]) 12:10 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, todo mal. Para empezar, la redacción de esta solicitud duplicada (?) ha sido hecha sin respetar el formulario de allí arriba, con lo cual es complicadísima de leer. Un cartel de sin relevancia es un mensaje al biblio que atienda la solicitud, en que se informa que -según quien la colocó- aún no acredita relevancia; mientras que un cartel de borrado rápido es uno en el que se dice que -según quien lo colocó- debería ser borrado. En cualquiera de los dos casos, quien toma la decisión es el bibliotecario que atiende la solicitud, que lo hace por las razones que él considera tras analizar el artículo; los usuarios informan lo que creen que corresponde hacer, el responsable es el bibliotecario. Por otro lado, vos habías retirado un mensaje de un usuario a los bibliotecarios en forma de plantilla de borrado, lo cual es una falta relativamente grave; estuve tentado de borrar esta solicitud caótica, pero para no borrar lo que vos habías escrito no lo hice, ¿qué te da derecho a vos a borrar mensajes ajenos? Y, para terminar, con 232 ediciones, te das el lujo de decirnos a los biblios cuál es el procedimiento correcto, cuando nosotros tenemos casi mil veces más ediciones y fuimos elegidos justamente porque todos saben que conocemos las normas... y vos no sabés siquiera llenar esta solicitud con las instrucciones que podés leer dentro de un recuadro al comienzo de la página.<br>Así no se puede atender esta solicitud, nadie hizo nada mal excepto vos y no hay siquiera un solo argumento de por qué debería ser restaurado. De modo que, si te interesa presentar la solicitud de borrado otra vez, lo harás siguiendo las instrucciones y el enlace en el encabezado, y argumentando por qué y para qué creés que ese artículo debe ser restaurado, sin hacer menciones inútiles a normas y procedimientos que claramente desconocés. Por si acaso: allí donde dice <nowiki>{{a|Artículo}} colocarás el nombre del artículo, entre {{a| y }}</nowiki>.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:01 25 nov 2025 (UTC)}} == Reestablecer página de usuario == ; Artículo * {{a|Usuario:Feliantonio}} ; Razón * Expón aquí ordenadamente tus razones Toda la información contenida en la página es real y correcta. ; Usuario que lo solicita Feliantonio * [[Usuario:Feliantonio|Feliantonio]] ([[Usuario Discusión:Feliantonio|discusión]]) 13:36 25 nov 2025 (UTC) ; Respuesta {{admintab|{{no}}. Perfecto, pues abre una página en LinkedIn o una web personal. ¿Has repasado siquiera los enlaces que se te han dejado en tu página de discusión? ¿Has repasado alguna página de usuario en Wikipedia... cualquiera? Las páginas de usuario no son artículos ni deben tener un formato de artículos, lo único que deben (y más todavía en el caso de usuarios nuevos) es presentar datos mínimos y centrarse en el interés del usuario en Wikipedia. Esto que has publicado no cumple con ninguna norma, altamente autopromocional, no estamos aquí para publicitarte. Saludos. |2=&nbsp;<span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span>&nbsp; 13:43 25 nov 2025 (UTC)}} == Restauración de Usuario:EdwardRojasCalero/Taller == ; Artículo * {{a|Usuario:EdwardRojasCalero/Taller}} ; Razón: * Fue borrado por ser promocional y por Conflicto de Intereses (CdI), lo cual acepto. Mi intención es crear un artículo enciclopédico. He revelado mi CdI en mi página de usuario. * Solicito que se restaure el contenido borrado al espacio de '''[[Borrador:hackU]]''' para poder neutralizarlo y, posteriormente, solicitar su revisión formal a través de Artículos Solicitados. La relevancia enciclopédica del tema se justifica en que su presidente ejecutivo, Guillermo Jaime Calderón, es una figura notable por otros proyectos (ej. Grupo MIA). ; Usuario que lo solicita * [[Usuario:EdwardRojasCalero|EdwardRojasCalero]] ([[Usuario Discusión:EdwardRojasCalero|discusión]]) 21:12 25 nov 2025 (UTC) ; Respuesta {{admintab|1={{No}}, hago mías las razones del borrado citadas por el bibliotecario que la borró: «Promocional, sin relevancia enciclopédica, formato improcedente, redactado completamente por IA». Por lo demás, declarar tu conflicto de intereses no te autoriza a publicar un artículo promocional, y dudo mucho que si lo vuelves a editar logres demostrar relevancia y editarlo de acuerdo al [[WP:PVN|punto de vista neutral]] de forma que no sea promocional. Por otro lado, un texto generado por IA es una pésima base para redactar un buen artículo enciclopédico, de modo que no es buena idea trasladarlo a tu taller.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 23:00 25 nov 2025 (UTC)}} == Restauración de Escuela Municipal de Música y Danza de Sonseca == ; Artículo * {{a|Escuela Municipal de Música y Danza de Sonseca}} ; Razón * El artículo se titula así. Da a entender que trata de una institución. Si el artículo tratara de la institución no sería relevante porque no es importante. Pero el artículo no trata de la institución. Trata del edificio. Trata del uso histórico del edificio, que fue un hospital, luego una escuela y luego sede de otras cosas. Solo se menciona su uso actual. El nombre es ese porque tiene dos históricos, el problema es que ambos eran usados por igual. Así que elegí el nombre actual con el que se conoce el edificio para que no hubiera problemas. Si a alguien no le gustaba, lo trasladaba al nombre que viera más conveniente. Entonces si tiene relevancia enciclopédica, no trata de la institución sino del edificio, el cual si es relevante. ; Usuario que lo solicita * [[Usuario:ReyDerayos24|ReyDerayos24]] ([[Usuario discusión:ReyDerayos24|¿qué miras?]]) [[File:Escudo de Sonseca.svg|20px|Escudo de Sonseca]] 06:55 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud restauracion Ramón Zallo Elgezabal == ; Artículo * {{a|Ramón Zallo Elgezabal}} ; Razón * Ramón Zallo Elgezabal es un relevante profesor universitario, escritor y militante político en la cultura vasca que ha publicado diversos libros y artículos relacionados con la historia y la identidad vasca. Además, el artículo '''ya existe en euskera''' como se puede comprobar [https://eu.wikipedia.org/wiki/Ram%C3%B3n_Zallo aquí] y no ha recibido ningún tipo de problema. Yo solo lo he traducido al español para mejorar la accesibilidad a su información en castellano también, ya que no todas las personas vascas hablan euskera. ; Usuario que lo solicita * [[Usuario:Naia_Ostaikoetxea|Naia Ostaikoetxea]] ; Respuesta {{admintab|1= No hay ningún [[Ramón Zallo Elgezabal]] borrado. Nada que restaurar.|2=--[[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 17:32 26 nov 2025 (UTC)}} ==Restauración del articulo "WWE ID Championship"== ; Artículo * {{a|WWE ID Championship}} ; Razón * Hola, muy buenas. Quisiera solicitar la restauración del artículo [[WWE ID Championship]], que fue borrado hace casi seis meses por los motivos: [[Wikipedia:Criterios para el borrado rápido#A1|Publicidad evidente]] y [[Wikipedia:Criterios para el borrado rápido#A4|No enciclopédico]]. Me gustaría poder revisarlo y mejorarlo, pero al no estar disponible no puedo verificar qué hicieron los editores anteriores ni qué partes concretas no cumplían con las políticas. Aunque este título es más reciente, haré todo lo posible para que el contenido cumpla con los requisitos de las políticas, ya sea aportando fuentes confiables o una mejor estructura del artículo. Muchas gracias por su tiempo. ; Usuario que lo solicita * [[Usuario:VdeSergioXD|VdeSergioXD]] ([[Usuario Discusión:VdeSergioXD|discusión]]) 22:04 26 nov 2025 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == TRyin thigs out == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Esto es un ejemplo de motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:07, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * another test ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 09:09, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Let's describe a motive here. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Aquí expondremos nuestro motivo ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * Another try. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * odsiajdaois ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:38, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[GoodEqualsExample]] == ; Artículo * {{a|GoodEqualsExample}} ; Razón * I think it's pretty. ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:42, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) == Solicitud de restauración de [[Lincoln Lee]] == ; Artículo * {{a|Lincoln Lee}} ; Razón * Here is my motive why I think this article should be restored. Thanks :) ; Usuario que lo solicita * [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:59, 3 May 2026 (UTC) ; Respuesta (a rellenar por un bibliotecario) jnktlid2jh0zebsppzzz68hmw5wp6dj User:কমলেশ মন্ডল/common.js 2 171554 740157 739879 2026-05-02T16:29:01Z কমলেশ মন্ডল 72403 740157 javascript text/javascript (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using([ 'mediawiki.api', 'mediawiki.util', 'oojs-ui-core', 'oojs-ui-widgets' ], loadTool); } } function parseParagraphs(wikitext) { const lines = wikitext.split('\n'); const paragraphs = []; let current = []; for (const line of lines) { if (line.trim() === '') { if (current.length) { paragraphs.push(current.join('\n')); current = []; } } else { current.push(line); } } if (current.length) paragraphs.push(current.join('\n')); return paragraphs; } function compareLength(enPara, bnPara) { if (!bnPara) return 'missing'; const ratio = bnPara.length / enPara.length; if (ratio < 0.3) return 'incomplete'; return 'matched'; } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; } .sbs-controls { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; align-items: flex-end; } .sbs-controls label { font-weight: bold; display: block; margin-bottom: 3px; font-size: .9em; } .sbs-controls input { width: 100%; padding: 6px; border: 1px solid #a2a9b1; border-radius: 2px; font-family: monospace; box-sizing: border-box; } .sbs-controls .sbs-field { flex: 1; min-width: 200px; } .sbs-btn { padding: 8px 16px; background: #14866d; color: #fff; border: none; border-radius: 3px; cursor: pointer; font-weight: bold; font-size: 1em; align-self: flex-end; white-space: nowrap; } .sbs-btn:hover { background: #0f6b56; } .sbs-btn:disabled { background: #aaa; cursor: not-allowed; } .sbs-save-btn { background: #3366cc; } .sbs-save-btn:hover { background: #2a55aa; } .sbs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; border: 1px solid #a2a9b1; border-radius: 3px; overflow: hidden; } @media (max-width: 768px) { .sbs-grid { grid-template-columns: 1fr; } } .sbs-col-header { background: #f8f9fa; padding: 8px 12px; font-weight: bold; border-bottom: 1px solid #a2a9b1; font-size: .9em; color: #555; } .sbs-col-header.en { border-right: 1px solid #a2a9b1; } .sbs-para-row { display: contents; } .sbs-para-en, .sbs-para-bn { padding: 10px 12px; border-bottom: 1px solid #eaecf0; font-size: .9em; line-height: 1.6; vertical-align: top; box-sizing: border-box; } .sbs-para-en { border-right: 1px solid #a2a9b1; background: #fafafa; color: #444; font-family: monospace; white-space: pre-wrap; word-wrap: break-word; } .sbs-para-bn textarea { width: 100%; box-sizing: border-box; border: none; outline: none; resize: none; font-family: monospace; font-size: .9em; line-height: 1.6; background: transparent; min-height: 60px; padding: 0; } .sbs-para-bn.matched { background: #e6f5f0; } .sbs-para-bn.incomplete { background: #fff8e6; } .sbs-para-bn.missing { background: #fee7e6; } .sbs-para-missing-placeholder { color: #aaa; font-style: italic; font-size: .85em; } .sbs-status { margin: 10px 0; font-style: italic; color: #555; font-size: .9em; } .sbs-legend { display: flex; gap: 12px; margin-bottom: 10px; flex-wrap: wrap; font-size: .85em; } .sbs-legend-item { display: flex; align-items: center; gap: 5px; } .sbs-legend-dot { width: 14px; height: 14px; border-radius: 2px; flex-shrink: 0; } .sbs-legend-dot.matched { background: #e6f5f0; border: 1px solid #14866d; } .sbs-legend-dot.incomplete { background: #fff8e6; border: 1px solid #f0a500; } .sbs-legend-dot.missing { background: #fee7e6; border: 1px solid #d33; } .sbs-action-bar { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; } `).appendTo('head'); } async function getEnTitleFromWikidata(bnTitle, api) { try { const localData = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = localData.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wdData = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sitelink = wdData.entities[qid] && wdData.entities[qid].sitelinks && wdData.entities[qid].sitelinks.enwikibooks; return sitelink ? sitelink.title : null; } catch (e) { console.error('Wikidata lookup failed', e); return null; } } async function fetchWikitext(title, isEn) { const apiUrl = isEn ? 'https://en.wikibooks.org/w/api.php' : null; const api = isEn ? new mw.ForeignApi(apiUrl) : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Controls const controls = $('<div>').addClass('sbs-controls'); const bnField = $('<div>').addClass('sbs-field'); const bnLabel = $('<label>').text('বাংলা নিবন্ধের শিরোনাম:'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'যেমন: মাগলস গাইড টু হ্যারি পটার'); bnField.append(bnLabel, bnInput); const enField = $('<div>').addClass('sbs-field'); const enLabel = $('<label>').text('ইংরেজি নিবন্ধের শিরোনাম:'); const enInput = $('<input type="text">').attr('placeholder', 'যেমন: Muggles\' Guide to Harry Potter'); enField.append(enLabel, enInput); const loadBtn = $('<button>').addClass('sbs-btn').text('লোড করুন'); controls.append(bnField, enField, loadBtn); wrap.append(controls); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-dot matched'), $('<span>').text('অনুবাদ হয়েছে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-dot incomplete'), $('<span>').text('অসম্পূর্ণ হতে পারে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-dot missing'), $('<span>').text('অনুবাদ হয়নি')) ).hide(); wrap.append(legend); const grid = $('<div>').addClass('sbs-grid').hide(); wrap.append(grid); const actionBar = $('<div>').addClass('sbs-action-bar').hide(); const saveBtn = $('<button>').addClass('sbs-btn sbs-save-btn').text('✅ সংরক্ষণ করুন'); actionBar.append(saveBtn); wrap.append(actionBar); // Auto-fetch English title from Wikidata if origin page is set if (originPage) { status.text('⏳ উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitleFromWikidata(originPage, api).then(enTitle => { if (enTitle) { enInput.val(enTitle); status.text('✅ ইংরেজি শিরোনাম পাওয়া গেছে। লোড করুন বোতামে ক্লিক করুন।'); } else { status.text('⚠️ উইকিডেটায় ইংরেজি সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); } }); } let bnParagraphs = []; let currentBnTitle = ''; loadBtn.on('click', async function () { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('⚠️ দুটি শিরোনামই লিখুন।'); return; } loadBtn.prop('disabled', true).text('লোড হচ্ছে...'); grid.hide(); legend.hide(); actionBar.hide(); status.text('⏳ নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; const enParas = parseParagraphs(enText); bnParagraphs = parseParagraphs(bnText); grid.empty(); // Headers grid.append( $('<div>').addClass('sbs-col-header en').text('🇬🇧 ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('🇧🇩 বাংলা (সম্পাদনযোগ্য)') ); const maxLen = Math.max(enParas.length, bnParagraphs.length); const editedParagraphs = [...bnParagraphs]; for (let i = 0; i < maxLen; i++) { const enPara = enParas[i] || ''; const bnPara = bnParagraphs[i] || ''; const state = enPara ? compareLength(enPara, bnPara) : 'matched'; const enCell = $('<div>').addClass('sbs-para-en').text(enPara); const bnCell = $('<div>').addClass('sbs-para-bn ' + state); if (state === 'missing') { const placeholder = $('<div>').addClass('sbs-para-missing-placeholder').text('(অনুবাদ হয়নি)'); const ta = $('<textarea>').val('').attr('placeholder', 'এখানে অনুবাদ লিখুন...'); ta.on('input', (function(idx) { return function() { editedParagraphs[idx] = $(this).val(); const newState = compareLength(enParas[idx] || '', $(this).val()); bnCell.removeClass('matched incomplete missing').addClass(newState); }; })(i)); ta.css('height', Math.max(60, enCell.height()) + 'px'); bnCell.append(placeholder, ta); } else { const ta = $('<textarea>').val(bnPara); ta.on('input', (function(idx) { return function() { editedParagraphs[idx] = $(this).val(); const newState = compareLength(enParas[idx] || '', $(this).val()); bnCell.removeClass('matched incomplete missing').addClass(newState); }; })(i)); bnCell.append(ta); } grid.append(enCell, bnCell); // Auto-resize textareas setTimeout(() => { bnCell.find('textarea').each(function() { this.style.height = 'auto'; this.style.height = Math.max(this.scrollHeight, 60) + 'px'; }); }, 0); } saveBtn.off('click').on('click', async function() { saveBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); const newText = editedParagraphs.filter(p => p.trim()).join('\n\n'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: newText, summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); mw.notify('✅ সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch(e) { mw.notify('❌ সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } saveBtn.prop('disabled', false).text('✅ সংরক্ষণ করুন'); }); grid.show(); legend.show(); actionBar.show(); status.text('✅ লোড সম্পন্ন। ' + enParas.length + 'টি ইংরেজি ও ' + bnParagraphs.length + 'টি বাংলা অনুচ্ছেদ পাওয়া গেছে।'); } catch(e) { status.text('❌ ত্রুটি: ' + e.message); } loadBtn.prop('disabled', false).text('লোড করুন'); }); } $(document).ready(init); })(jQuery, mediaWiki); dv1lumrkzzhu5twteh6bwril3w6je8m 740161 740157 2026-05-02T17:15:57Z কমলেশ মন্ডল 72403 740161 javascript text/javascript (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using([ 'mediawiki.api', 'mediawiki.util' ], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: sans-serif; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; margin-bottom: 12px; padding: 10px 12px; background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 3px; } .sbs-field { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 180px; } .sbs-field label { font-size: .85em; font-weight: bold; color: #444; } .sbs-field input { padding: 5px 8px; border: 1px solid #a2a9b1; border-radius: 2px; font-family: monospace; font-size: .9em; box-sizing: border-box; width: 100%; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,.15); } .sbs-btn-group { display: flex; gap: 6px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 6px 14px; border: none; border-radius: 2px; cursor: pointer; font-size: .9em; font-weight: bold; transition: background 0.15s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a55aa; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #fff; color: #444; border: 1px solid #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #eaf3ff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #c33; border: 1px solid #c33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-undo-group { display: flex; gap: 2px; } .sbs-undo-group .sbs-btn { padding: 6px 10px; } .sbs-status { font-size: .85em; color: #555; font-style: italic; margin-bottom: 8px; min-height: 1.2em; } .sbs-legend { display: flex; gap: 14px; margin-bottom: 8px; flex-wrap: wrap; font-size: .82em; color: #555; } .sbs-legend-item { display: flex; align-items: center; gap: 5px; } .sbs-legend-swatch { width: 12px; height: 12px; border-radius: 2px; border: 1px solid rgba(0,0,0,.15); flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; } .sbs-legend-swatch.yellow { background: #fef6e4; } .sbs-legend-swatch.none { background: #f8f9fa; } .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 3px; overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #f8f9fa; border-bottom: 1px solid #a2a9b1; } .sbs-col-header { padding: 7px 12px; font-size: .85em; font-weight: bold; color: #555; } .sbs-col-header:first-child { border-right: 1px solid #a2a9b1; } .sbs-rows { overflow-y: auto; max-height: 75vh; } .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } .sbs-row:last-child { border-bottom: none; } .sbs-cell-en { padding: 10px 12px; border-right: 1px solid #a2a9b1; background: #fafafa; font-family: monospace; font-size: .85em; line-height: 1.65; color: #444; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { padding: 6px 8px; box-sizing: border-box; display: flex; flex-direction: column; } .sbs-cell-bn.flag-red { background: #fee7e6; } .sbs-cell-bn.flag-yellow { background: #fef6e4; } .sbs-cell-bn.flag-none { background: #fff; } .sbs-cell-bn textarea { width: 100%; box-sizing: border-box; border: 1px solid transparent; border-radius: 2px; font-family: monospace; font-size: .85em; line-height: 1.65; resize: none; background: transparent; padding: 4px; color: #202122; overflow: hidden; } .sbs-cell-bn textarea:focus { border-color: #3366cc; background: #fff; outline: none; } .sbs-flag-row { display: flex; gap: 4px; justify-content: flex-end; margin-top: 4px; } .sbs-flag-btn { font-size: .75em; padding: 2px 7px; border-radius: 2px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #555; } .sbs-flag-btn:hover { background: #eaf3ff; border-color: #3366cc; color: #3366cc; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #c33; color: #c33; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #f0a500; color: #a07000; } .sbs-flag-btn.active-done { background: #e6f5f0; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row { grid-template-columns: 1fr; } .sbs-cell-en { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } function countSentences(text) { if (!text || !text.trim()) return 0; const matches = text.match(/[।.!?]+/g); return matches ? matches.length : 1; } function autoFlag(enText, bnText) { if (!bnText || !bnText.trim()) return 'red'; const enSentences = countSentences(enText); const bnSentences = countSentences(bnText); if (enSentences > 1 && bnSentences < enSentences * 0.5) return 'yellow'; return 'none'; } function parseParagraphs(wikitext) { const lines = wikitext.split('\n'); const paragraphs = []; let current = []; for (const line of lines) { if (line.trim() === '') { if (current.length) { paragraphs.push(current.join('\n')); current = []; } } else { current.push(line); } } if (current.length) paragraphs.push(current.join('\n')); return paragraphs; } function joinParagraphs(paragraphs) { return paragraphs.join('\n\n'); } async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch(e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), $('<input type="text">').attr('placeholder', 'বাংলা শিরোনাম').val(originPage)); const enField = $('<div>').addClass('sbs-field'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), $('<input type="text">').attr('placeholder', 'English title')); const bnInput = bnField.find('input'); const enInput = enField.find('input'); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch none'), $('<span>').text('ঠিক আছে')) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); let enParas = [], editedParas = [], baselineParas = [], currentBnTitle = ''; let undoStack = [], redoStack = [], activeTA = null; let phase = 'load'; if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } undoBtn.on('click', function() { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', function() { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); } } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight(), bnCell.outerHeight()); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const maxLen = Math.max(enParas.length, editedParas.length); for (let i = 0; i < maxLen; i++) { const enText = enParas[i] || ''; const bnText = editedParas[i] || ''; const flag = autoFlag(enText, bnText); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', flag === 'red' ? 'অনুবাদ লিখুন...' : ''); ta.on('focus', function() { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', (function(idx, cell, enT) { return function() { ta[0].style.height = 'auto'; ta[0].style.height = ta[0].scrollHeight + 'px'; undoStack.push(editedParas[idx] || ''); redoStack = []; editedParas[idx] = ta.val(); const newFlag = autoFlag(enT, ta.val()); cell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, cell); if (phase === 'back') setPhase('save'); }; })(i, bnCell, enText)); // Manual flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const flagRed = $('<button>').addClass('sbs-flag-btn' + (flag === 'red' ? ' active-red' : '')).text('ঠিক হয়নি'); const flagYellow = $('<button>').addClass('sbs-flag-btn' + (flag === 'yellow' ? ' active-yellow' : '')).text('পর্যালোচনা'); const flagDone = $('<button>').addClass('sbs-flag-btn' + (flag === 'none' ? ' active-done' : '')).text('সম্পন্ন'); flagRed.on('click', function() { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', function() { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', function() { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { ta[0].style.height = 'auto'; ta[0].style.height = ta[0].scrollHeight + 'px'; syncRowHeight(enCell, bnCell); }, 0); } } discardBtn.on('click', function() { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; editedParas = [...baselineParas]; buildGrid(); if (phase === 'back') setPhase('save'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); mainBtn.on('click', async function() { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enParas = parseParagraphs(enText); editedParas = parseParagraphs(bnText); baselineParas = [...editedParas]; buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enParas.length + 'টি ইংরেজি ও ' + editedParas.length + 'টি বাংলা অনুচ্ছেদ।'); } catch(e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: joinParagraphs(editedParas), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineParas = [...editedParas]; setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch(e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); scpc5tj17m29tonl33scwdifxzsh2kg 740200 740161 2026-05-02T21:10:26Z কমলেশ মন্ডল 72403 740200 javascript text/javascript (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: sans-serif; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; margin-bottom: 12px; padding: 10px 12px; background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 3px; } .sbs-field { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 180px; } .sbs-field label { font-size: .85em; font-weight: bold; color: #444; } .sbs-field input { padding: 5px 8px; border: 1px solid #a2a9b1; border-radius: 2px; font-family: monospace; font-size: .9em; box-sizing: border-box; width: 100%; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,.15); } .sbs-btn-group { display: flex; gap: 6px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 6px 14px; border: 1px solid transparent; border-radius: 2px; cursor: pointer; font-size: .9em; font-weight: bold; transition: background 0.15s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-btn.primary:hover:not(:disabled) { background: #2a55aa; } .sbs-btn.success { background: #14866d; color: #fff; border-color: #14866d; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #fff; color: #444; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #eaf3ff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #c33; border-color: #c33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-undo-group { display: flex; gap: 2px; } .sbs-undo-group .sbs-btn { padding: 6px 10px; } .sbs-status { font-size: .85em; color: #555; font-style: italic; margin-bottom: 8px; min-height: 1.2em; } .sbs-legend { display: flex; gap: 14px; margin-bottom: 10px; flex-wrap: wrap; font-size: .82em; color: #555; } .sbs-legend-item { display: flex; align-items: center; gap: 5px; } .sbs-legend-swatch { width: 12px; height: 12px; border-radius: 2px; border: 1px solid rgba(0,0,0,.15); flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; } .sbs-legend-swatch.yellow { background: #fef6e4; } .sbs-legend-swatch.clear { background: #f8f9fa; border-color: #c8ccd1; } .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 3px; overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #f8f9fa; border-bottom: 1px solid #a2a9b1; } .sbs-col-header { padding: 7px 12px; font-size: .85em; font-weight: bold; color: #555; } .sbs-col-header:first-child { border-right: 1px solid #a2a9b1; } .sbs-rows { overflow-y: auto; max-height: 75vh; } .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3ff; border-bottom: 1px solid #a2a9b1; border-top: 2px solid #3366cc; } .sbs-section-title { padding: 6px 12px; font-size: .88em; font-weight: bold; color: #3366cc; } .sbs-section-title:first-child { border-right: 1px solid #a2a9b1; } .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } .sbs-row:last-child { border-bottom: none; } .sbs-cell-en { padding: 10px 12px; border-right: 1px solid #a2a9b1; background: #fafafa; font-family: monospace; font-size: .85em; line-height: 1.65; color: #444; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { padding: 6px 8px; box-sizing: border-box; display: flex; flex-direction: column; } .sbs-cell-bn.flag-red { background: #fee7e6; } .sbs-cell-bn.flag-yellow { background: #fef6e4; } .sbs-cell-bn.flag-none { background: #fff; } .sbs-cell-bn textarea { width: 100%; box-sizing: border-box; border: 1px solid transparent; border-radius: 2px; font-family: monospace; font-size: .85em; line-height: 1.65; resize: none; background: transparent; padding: 4px; color: #202122; overflow: hidden; } .sbs-cell-bn textarea:focus { border-color: #3366cc; background: #fff; outline: none; } .sbs-flag-row { display: flex; gap: 4px; justify-content: flex-end; margin-top: 4px; } .sbs-flag-btn { font-size: .75em; padding: 2px 7px; border-radius: 2px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #555; } .sbs-flag-btn:hover { background: #eaf3ff; border-color: #3366cc; color: #3366cc; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #c33; color: #c33; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #f0a500; color: #a07000; } .sbs-flag-btn.active-done { background: #e6f5f0; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-cell-en { border-right: none; border-bottom: 1px solid #a2a9b1; } .sbs-section-title:first-child { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: '(Lead)', level: 0, lines: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { if (current.lines.length || sections.length === 0) { current.paragraphs = splitIntoParagraphs(current.lines); sections.push(current); } current = { heading: hMatch[2], level: hMatch[1].length, lines: [] }; } else { current.lines.push(line); } } current.paragraphs = splitIntoParagraphs(current.lines); sections.push(current); return sections; } function splitIntoParagraphs(lines) { const paragraphs = []; let current = []; for (const line of lines) { if (line.trim() === '') { if (current.length) { paragraphs.push(current.join('\n')); current = []; } } else { current.push(line); } } if (current.length) paragraphs.push(current.join('\n')); return paragraphs; } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { if (!bnText || !bnText.trim()) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bnText) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function matchSections(enSections, bnSections) { const pairs = []; const maxLen = Math.max(enSections.length, bnSections.length); for (let i = 0; i < maxLen; i++) { pairs.push({ en: enSections[i] || null, bn: bnSections[i] || null }); } return pairs; } function sectionsToWikitext(sections) { return sections.map(sec => { const heading = sec.level > 0 ? '='.repeat(sec.level) + ' ' + sec.heading + ' ' + '='.repeat(sec.level) : ''; const body = sec.paragraphs.join('\n\n'); return heading ? heading + '\n' + body : body; }).join('\n\n'); } async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } function deepCloneSections(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, paragraphs: [...s.paragraphs] })); } function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম')); const enField = $('<div>').addClass('sbs-field'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), $('<input type="text">').attr('placeholder', 'English title')); const bnInput = bnField.find('input'); const enInput = enField.find('input'); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে')) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show().text('বাতিল').removeClass('neutral').addClass('danger'); undoGroup.show(); gridWrap.show(); legend.show(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show().text('বাতিল').removeClass('neutral').addClass('danger'); undoGroup.show(); } } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const pairs = matchSections(enSections, bnSections); pairs.forEach((pair, sIdx) => { const enSec = pair.en; const bnSec = pair.bn; const enHeading = enSec ? (enSec.level > 0 ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : enSec.heading) : '(অনুপস্থিত)'; const bnHeading = bnSec ? (bnSec.level > 0 ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : bnSec.heading) : '(অনুপস্থিত)'; const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-title').text(enHeading), $('<div>').addClass('sbs-section-title').text(bnHeading) ); rowsContainer.append(secHeader); const enParas = enSec ? enSec.paragraphs : []; const bnParas = bnSec ? bnSec.paragraphs : []; const maxParas = Math.max(enParas.length, bnParas.length, 1); for (let pIdx = 0; pIdx < maxParas; pIdx++) { const enText = enParas[pIdx] || ''; const bnText = bnParas[pIdx] || ''; const flag = autoFlag(enText, bnText); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', flag === 'red' ? 'অনুবাদ লিখুন...' : ''); ta.on('focus', () => { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', () => { resizeTA(ta[0]); undoStack.push(bnSec ? (bnSec.paragraphs[pIdx] || '') : ''); redoStack = []; if (bnSec) { bnSec.paragraphs[pIdx] = ta.val(); } else { if (!pair.bn) { pair.bn = { heading: enSec ? enSec.heading : '', level: enSec ? enSec.level : 0, paragraphs: [] }; bnSections[sIdx] = pair.bn; } pair.bn.paragraphs[pIdx] = ta.val(); } const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }); const flagRow = $('<div>').addClass('sbs-flag-row'); const flagRed = $('<button>').addClass('sbs-flag-btn' + (flag === 'red' ? ' active-red' : '')).text('ঠিক হয়নি'); const flagYellow = $('<button>').addClass('sbs-flag-btn' + (flag === 'yellow' ? ' active-yellow' : '')).text('পর্যালোচনা'); const flagDone = $('<button>').addClass('sbs-flag-btn' + (flag === 'none' ? ' active-done' : '')).text('সম্পন্ন'); flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); } }); } discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepCloneSections(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepCloneSections(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি ও ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepCloneSections(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); p2tw5fbyuw355coyqt1z1ctstf09cpc 740201 740200 2026-05-02T21:37:36Z কমলেশ মন্ডল 72403 740201 javascript text/javascript (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, 'Linux Libertine', Georgia, Times, serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end; margin-bottom: 14px; padding: 12px 14px; background: #fff; border: 1px solid #a2a9b1; border-radius: 2px; } .sbs-field { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 200px; } .sbs-field label { font-size: .8em; font-weight: bold; color: #54595d; letter-spacing: .02em; text-transform: uppercase; } .sbs-field input { padding: 6px 8px; border: 1px solid #a2a9b1; border-radius: 2px; font-family: monospace; font-size: .9em; box-sizing: border-box; width: 100%; background: #fff; color: #202122; transition: border-color 0.15s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 1px #3366cc; } .sbs-field input:read-only { background: #f8f9fa; color: #54595d; cursor: default; border-color: #c8ccd1; } /* Buttons */ .sbs-btn-group { display: flex; gap: 6px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 7px 14px; border: 1px solid transparent; border-radius: 2px; cursor: pointer; font-size: .875em; font-weight: bold; font-family: inherit; transition: background 0.1s, border-color 0.1s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; border-color: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; border-color: #14866d; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; border-color: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #f8f9fa; color: #b32424; border-color: #a2a9b1; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; border-color: #b32424; } .sbs-undo-group { display: flex; gap: 1px; } .sbs-undo-group .sbs-btn { padding: 7px 11px; font-family: monospace; } /* Status */ .sbs-status { font-size: .85em; color: #54595d; margin-bottom: 10px; min-height: 1.3em; padding: 0 2px; } /* Legend */ .sbs-legend { display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; font-size: .82em; color: #54595d; padding: 0 2px; } .sbs-legend-item { display: flex; align-items: center; gap: 6px; } .sbs-legend-swatch { width: 14px; height: 14px; border-radius: 2px; border: 1px solid rgba(0,0,0,.12); flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; } .sbs-legend-swatch.yellow { background: #fef6e4; } .sbs-legend-swatch.clear { background: #f8f9fa; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 2px; overflow: hidden; background: #fff; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; } .sbs-col-header { padding: 8px 14px; font-size: .8em; font-weight: bold; color: #54595d; background: #f8f9fa; border-bottom: 1px solid #a2a9b1; letter-spacing: .03em; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #a2a9b1; } .sbs-rows { overflow-y: auto; max-height: 76vh; } /* Section header */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; background: #eaf3fb; } .sbs-section-header:first-child { border-top: none; } .sbs-section-en-title { padding: 7px 14px; font-size: .88em; font-weight: bold; color: #3366cc; border-right: 1px solid #a2a9b1; font-family: -apple-system, 'Linux Libertine', Georgia, Times, serif; } .sbs-section-bn-title { padding: 7px 14px; font-size: .88em; font-weight: bold; color: #3366cc; font-family: -apple-system, 'Linux Libertine', Georgia, Times, serif; } /* Content row */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } .sbs-row:last-child { border-bottom: none; } .sbs-cell-en { padding: 12px 14px; border-right: 1px solid #a2a9b1; background: #fafafa; font-family: 'Courier New', Courier, monospace; font-size: .84em; line-height: 1.7; color: #3c3c3c; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { box-sizing: border-box; display: flex; flex-direction: column; } .sbs-cell-bn.flag-red { background: #fff8f8; border-left: 3px solid #b32424; } .sbs-cell-bn.flag-yellow { background: #fffbf0; border-left: 3px solid #ac6600; } .sbs-cell-bn.flag-none { background: #fff; border-left: 3px solid transparent; } .sbs-cell-bn textarea { flex: 1; width: 100%; box-sizing: border-box; border: none; font-family: 'Courier New', Courier, monospace; font-size: .84em; line-height: 1.7; resize: none; background: transparent; padding: 12px 14px; color: #202122; overflow: hidden; outline: none; } .sbs-cell-bn textarea:focus { background: #f6f9ff; } /* Flag buttons */ .sbs-flag-row { display: flex; gap: 4px; padding: 4px 10px 8px; justify-content: flex-end; } .sbs-flag-btn { font-size: .75em; padding: 2px 8px; border-radius: 2px; border: 1px solid #c8ccd1; background: #f8f9fa; cursor: pointer; color: #54595d; font-family: inherit; transition: background 0.1s, border-color 0.1s; } .sbs-flag-btn:hover { border-color: #3366cc; color: #3366cc; background: #eaf3fb; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #b32424; color: #b32424; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #ac6600; color: #ac6600; } .sbs-flag-btn.active-done { background: #d5fdf4; border-color: #14866d; color: #14866d; } /* Divider between section header and lead */ .sbs-lead-label { font-size: .75em; color: #72777d; padding: 5px 14px; background: #f8f9fa; border-bottom: 1px solid #eaecf0; font-style: italic; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // ── Parsing ────────────────────────────────────────────────────────────── function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2], level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); // Filter out sections with no heading and no meaningful content return sections.filter(s => { if (s.heading !== null) return true; const text = s.content.join('\n').trim(); return text.length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // ── API helpers ────────────────────────────────────────────────────────── async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // ── Tool ───────────────────────────────────────────────────────────────── function loadTool() { document.title = 'পাশাপাশি তুলনা — বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি — শুধু পড়ুন'), $('<div>').addClass('sbs-col-header').text('বাংলা — সম্পাদনযোগ্য') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const maxLen = Math.max(enSections.length, bnSections.length); for (let i = 0; i < maxLen; i++) { const enSec = enSections[i] || null; const bnSec = bnSections[i] || null; const enText = enSec ? sectionToText(enSec) : ''; const bnText = bnSec ? sectionToText(bnSec) : ''; const flag = autoFlag(enText, bnText); // Section heading row const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead)') : '—'; const bnHeadingText = bnSec ? (bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : '(Lead)') : '(অনুপস্থিত)'; const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); // Content row const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); const prev = bnSections[idx] ? sectionToText(bnSections[idx]) : ''; undoStack.push(prev); redoStack = []; if (bnSections[idx]) { bnSections[idx].content = ta.val().split('\n'); } else { bnSections[idx] = { heading: enSec ? enSec.heading : null, level: enSec ? enSec.level : 0, content: ta.val().split('\n') }; } const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(i)); // Manual flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const mkFlagBtn = (label, cls) => $('<button>').addClass('sbs-flag-btn').text(label).addClass(flag === cls.replace('active-', '') ? cls : ''); const flagRed = mkFlagBtn('ঠিক হয়নি', 'active-red'); const flagYellow = mkFlagBtn('পর্যালোচনা', 'active-yellow'); const flagDone = mkFlagBtn('সম্পন্ন', 'active-done'); // fix initial active states flagRed.removeClass('active-yellow active-done'); flagYellow.removeClass('active-red active-done'); flagDone.removeClass('active-red active-yellow'); if (flag === 'red') { flagRed.addClass('active-red'); } else if (flag === 'yellow') { flagYellow.addClass('active-yellow'); } else { flagDone.addClass('active-done'); } flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); } } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text( 'লোড সম্পন্ন — ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।' ); } catch (e) { status.text('ত্রুটি: ' + e.message); mainBtn.prop('disabled', false); return; } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); mvdguexfqi9y9kryq4fg9d8fr23fjnz 740205 740201 2026-05-02T22:03:33Z কমলেশ মন্ডল 72403 740205 javascript text/javascript (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; const css = ` /* Base Wrapper */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Lato, Helvetica, Arial, sans-serif; color: #202122; background: #ffffff; margin-top: 16px; } /* Sticky Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #ffffff; border: 1px solid #a2a9b1; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); position: sticky; top: 0; z-index: 100; } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 220px; } .sbs-field label { font-size: 0.85em; font-weight: 600; color: #54595d; text-transform: uppercase; letter-spacing: 0.03em; } .sbs-field input { padding: 8px 12px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 1em; width: 100%; box-sizing: border-box; transition: all 0.2s ease; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51, 102, 204, 0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #54595d; cursor: default; border-color: #eaecf0; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: 600; cursor: pointer; transition: all 0.2s ease; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; border-color: #2a4b8d; box-shadow: 0 2px 4px rgba(42, 75, 141, 0.2); } .sbs-btn.success { background: #14866d; color: #fff; border-color: #14866d; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; border-color: #0f6b56; box-shadow: 0 2px 4px rgba(15, 107, 86, 0.2); } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #ffffff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #f8f9fa; color: #b32424; border-color: #a2a9b1; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; border-color: #b32424; } .sbs-undo-group { display: flex; gap: 2px; } .sbs-undo-group .sbs-btn { padding: 8px 12px; font-weight: bold; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; padding: 0 4px; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; flex-wrap: wrap; font-size: 0.85em; color: #54595d; padding: 0 4px; } .sbs-legend-item { display: flex; align-items: center; gap: 8px; } .sbs-legend-swatch { width: 16px; height: 16px; border-radius: 3px; border: 1px solid rgba(0,0,0,0.15); flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; border-color: #b32424; } .sbs-legend-swatch.yellow { background: #fef6e4; border-color: #ac6600; } .sbs-legend-swatch.clear { background: #ffffff; border-color: #a2a9b1; } /* Grid Framework */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 6px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #f8f9fa; } .sbs-col-header { padding: 12px 16px; font-size: 0.85em; font-weight: bold; color: #54595d; border-bottom: 2px solid #eaecf0; text-transform: uppercase; letter-spacing: 0.04em; } .sbs-col-header:first-child { border-right: 1px solid #eaecf0; } .sbs-rows { overflow-y: auto; max-height: 72vh; background: #ffffff; } /* Section Headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; border-top: 1px solid #eaecf0; background: #f0f6fa; } .sbs-section-header:first-child { border-top: none; } .sbs-section-en-title, .sbs-section-bn-title { padding: 10px 16px; font-size: 0.95em; font-weight: 600; color: #202122; display: flex; align-items: center; } .sbs-section-en-title { border-right: 1px solid #eaecf0; } /* Content Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; transition: background 0.1s; } .sbs-row:hover { background: #fdfdfd; } .sbs-row:last-child { border-bottom: none; } /* Text Cells */ .sbs-cell-en { padding: 16px; border-right: 1px solid #eaecf0; background: #fafafa; font-size: 0.95em; line-height: 1.8; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { box-sizing: border-box; display: flex; flex-direction: column; background: #ffffff; } .sbs-cell-bn.flag-red { background: #fffcfc; border-left: 4px solid #b32424; } .sbs-cell-bn.flag-yellow { background: #fffdf8; border-left: 4px solid #ac6600; } .sbs-cell-bn.flag-none { border-left: 4px solid transparent; } /* Editing Area */ .sbs-cell-bn textarea { flex: 1; width: 100%; box-sizing: border-box; border: none; font-family: inherit; font-size: 0.95em; line-height: 1.8; resize: none; background: transparent; padding: 16px; color: #202122; overflow: hidden; outline: none; } .sbs-cell-bn textarea:focus { background: #f8fbff; } /* Action Flags */ .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; border-top: 1px dashed #eaecf0; } .sbs-flag-btn { font-size: 0.75em; padding: 4px 10px; border-radius: 12px; border: 1px solid #c8ccd1; background: #f8f9fa; cursor: pointer; color: #54595d; font-weight: 600; transition: all 0.15s ease; } .sbs-flag-btn:hover { border-color: #3366cc; color: #3366cc; background: #eaf3fb; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #b32424; color: #b32424; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #ac6600; color: #ac6600; } .sbs-flag-btn.active-done { background: #d5fdf4; border-color: #14866d; color: #14866d; } /* Responsive */ @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #eaecf0; } .sbs-topbar { position: relative; } /* Disable sticky on small mobile to save space */ } `; $('<style id="sbs-styles">').text(css).appendTo('head'); } // --- Parsing Helpers --- function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2], level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); // Filter out sections with no heading and no meaningful content return sections.filter(s => { if (s.heading !== null) return true; const text = s.content.join('\n').trim(); return text.length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // --- API helpers --- async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2}); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // --- Tool --- function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State variables let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else { status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); } }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const maxLen = Math.max(enSections.length, bnSections.length); for (let i = 0; i < maxLen; i++) { const enSec = enSections[i] || null; const bnSec = bnSections[i] || null; const enText = enSec ? sectionToText(enSec) : ''; const bnText = bnSec ? sectionToText(bnSec) : ''; const flag = autoFlag(enText, bnText); // Section heading row const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec ? (bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : '(Lead)') : '(অনুপস্থিত)'; const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); // Content row const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); const prev = bnSections[idx] ? sectionToText(bnSections[idx]) : ''; // Basic undo handling if (undoStack.length === 0 || undoStack[undoStack.length - 1] !== prev) { undoStack.push(prev); } redoStack = []; if (bnSections[idx]) { bnSections[idx].content = ta.val().split('\n'); } else { bnSections[idx] = { heading: enSec ? enSec.heading : null, level: enSec ? enSec.level : 0, content: ta.val().split('\n') }; } const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(i)); // Manual flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const mkFlagBtn = (label, cls) => $('<button>').addClass('sbs-flag-btn').text(label).addClass(flag === cls.replace('active-', '') ? cls : ''); const flagRed = mkFlagBtn('ঠিক হয়নি', 'active-red'); const flagYellow = mkFlagBtn('পর্যালোচনা', 'active-yellow'); const flagDone = mkFlagBtn('সম্পন্ন', 'active-done'); // fix initial active states if (flag === 'red') { flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); } else if (flag === 'yellow') { flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); } else { flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); } flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); } } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) দিয়ে অনুবাদ হালনাগাদ', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); pnwuklc80q25eddjjvtocb8iuyvdgqu 740206 740205 2026-05-02T22:33:59Z কমলেশ মন্ডল 72403 740206 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-undo-group { display: flex; gap: 2px; } .sbs-undo-group .sbs-btn { padding: 8px 12px; font-family: monospace; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; } .sbs-legend-item { display: flex; align-items: center; gap: 8px; } .sbs-legend-swatch { width: 16px; height: 16px; border-radius: 3px; border: 1px solid rgba(0,0,0,0.1); } .sbs-legend-swatch.red { background: #fee7e6; } .sbs-legend-swatch.yellow { background: #fef6e4; } .sbs-legend-swatch.clear { background: #fff; border-color: #c8ccd1; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 10; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-rows { overflow-y: auto; max-height: 75vh; background: #fff; scroll-behavior: smooth; } /* Section headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; position: sticky; top: 0; z-index: 5;} .sbs-section-header:first-child { border-top: none; } .sbs-section-en-title, .sbs-section-bn-title { padding: 8px 16px; font-size: 0.95em; font-weight: bold; color: #3366cc; font-family: 'Linux Libertine', Georgia, Times, serif; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; transition: background-color 0.15s; } .sbs-row:hover { background-color: #fdfdfe; } .sbs-row:last-child { border-bottom: none; } .sbs-cell-en { padding: 16px; border-right: 1px solid #a2a9b1; background: #fafafa; font-family: 'Courier New', Courier, monospace; font-size: 0.9em; line-height: 1.6; color: #444; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { background: #fff8f8; border-left: 4px solid #d33; } .sbs-cell-bn.flag-yellow { background: #fffbf0; border-left: 4px solid #ed9c28; } .sbs-cell-bn.flag-none { border-left: 4px solid transparent; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: 'Courier New', Courier, monospace; font-size: 0.9em; line-height: 1.6; resize: vertical; background: transparent; padding: 16px; color: #202122; outline: none; box-sizing: border-box; } .sbs-cell-bn textarea:focus { background: #fdfdff; } /* Flags */ .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; background: inherit; } .sbs-flag-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; transition: all 0.15s; } .sbs-flag-btn:hover { border-color: #3366cc; color: #3366cc; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #d33; color: #d33; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #ed9c28; color: #ed9c28; } .sbs-flag-btn.active-done { background: #d5fdf4; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // Parsing Helpers function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); // Filter out sections with no heading and no meaningful content return sections.filter(s => { if (s.heading !== null) return true; const text = s.content.join('\n').trim(); return text.length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // API helpers async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // Main Tool function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State variables let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; // Helper functions to separate leads from headings const isLead = (s) => s.heading === null; const isHeading = (s) => s.heading !== null; // Separate English and Bengali sections into Leads and Headings const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); let pairs = []; // 1. Pair Lead Sections const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) { pairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null, isLead: true }); } // 2. Pair Heading Sections const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) { pairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null, isLead: false }); } // Reconstruct bnSections to perfectly match the pairs array order. // This ensures that when we save, the document structure is preserved correctly. bnSections = []; pairs.forEach((pair, idx) => { let enSec = pair.en; let bnSec = pair.bn; // Create empty placeholder if Bengali side is missing if (!bnSec) { bnSec = { heading: enSec ? enSec.heading : null, level: enSec ? enSec.level : (pair.isLead ? 0 : 2), content: [] }; } bnSections.push(bnSec); const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); // Define Section Headers for the UI let enHeadingText = '(খালি / অনুপস্থিত)'; if (enSec) { enHeadingText = enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)'; } let bnHeadingText = '(খালি / অনুপস্থিত)'; if (pair.bn) { bnHeadingText = pair.bn.heading !== null ? '='.repeat(pair.bn.level) + ' ' + pair.bn.heading + ' ' + '='.repeat(pair.bn.level) : '(Lead Section)'; } else if (enSec) { bnHeadingText = enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section - অনুপস্থিত)'; } const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', (function (i) { return function () { resizeTA(ta[0]); const prev = bnSections[i] ? sectionToText(bnSections[i]) : ''; undoStack.push(prev); redoStack = []; bnSections[i].content = ta.val().split('\n'); const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(idx)); // Manual flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const mkFlagBtn = (label, cls) => $('<button>').addClass('sbs-flag-btn').text(label).addClass(flag === cls.replace('active-', '') ? cls : ''); const flagRed = mkFlagBtn('ঠিক হয়নি', 'active-red'); const flagYellow = mkFlagBtn('পর্যালোচনা', 'active-yellow'); const flagDone = mkFlagBtn('সম্পন্ন', 'active-done'); // Fix initial active states flagRed.removeClass('active-yellow active-done'); flagYellow.removeClass('active-red active-done'); flagDone.removeClass('active-red active-yellow'); if (flag === 'red') { flagRed.addClass('active-red'); } else if (flag === 'yellow') { flagYellow.addClass('active-yellow'); } else { flagDone.addClass('active-done'); } flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); }); } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> f1hg5forxmgikmuoj44mm3gefzy02mc 740208 740206 2026-05-02T22:40:16Z কমলেশ মন্ডল 72403 740208 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 10; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-rows { overflow-y: auto; max-height: 75vh; background: #fff; } /* Section headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; position: sticky; top: 0; z-index: 5;} .sbs-section-en-title, .sbs-section-bn-title { padding: 8px 16px; font-size: 1em; font-weight: bold; color: #3366cc; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } /* IMPROVED LEFT SIDE READABILITY */ .sbs-cell-en { padding: 16px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.7; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.7; resize: vertical; background: transparent; padding: 16px; color: #202122; outline: none; box-sizing: border-box; } .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; background: inherit; } .sbs-flag-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // Parsing Helpers function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); // Filter out sections with no heading and no meaningful content return sections.filter(s => { if (s.heading !== null) return true; const text = s.content.join('\n').trim(); return text.length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // API helpers async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // Main Tool function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State variables let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; // Helper functions to separate leads from headings const isLead = (s) => s.heading === null; const isHeading = (s) => s.heading !== null; // Separate English and Bengali sections into Leads and Headings const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); let pairs = []; // 1. Pair Lead Sections const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) { pairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null, isLead: true }); } // 2. Pair Heading Sections const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) { pairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null, isLead: false }); } // Reconstruct bnSections to perfectly match the pairs array order. // This ensures that when we save, the document structure is preserved correctly. bnSections = []; pairs.forEach((pair, idx) => { let enSec = pair.en; let bnSec = pair.bn; // Create empty placeholder if Bengali side is missing if (!bnSec) { bnSec = { heading: enSec ? enSec.heading : null, level: enSec ? enSec.level : (pair.isLead ? 0 : 2), content: [] }; } bnSections.push(bnSec); const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); // Define Section Headers for the UI let enHeadingText = '(খালি / অনুপস্থিত)'; if (enSec) { enHeadingText = enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)'; } let bnHeadingText = '(খালি / অনুপস্থিত)'; if (pair.bn) { bnHeadingText = pair.bn.heading !== null ? '='.repeat(pair.bn.level) + ' ' + pair.bn.heading + ' ' + '='.repeat(pair.bn.level) : '(Lead Section)'; } else if (enSec) { bnHeadingText = enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section - অনুপস্থিত)'; } const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { activeTA = ta; undoStack = []; redoStack = []; }); ta.on('input', (function (i) { return function () { resizeTA(ta[0]); const prev = bnSections[i] ? sectionToText(bnSections[i]) : ''; undoStack.push(prev); redoStack = []; bnSections[i].content = ta.val().split('\n'); const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(idx)); // Manual flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const mkFlagBtn = (label, cls) => $('<button>').addClass('sbs-flag-btn').text(label).addClass(flag === cls.replace('active-', '') ? cls : ''); const flagRed = mkFlagBtn('ঠিক হয়নি', 'active-red'); const flagYellow = mkFlagBtn('পর্যালোচনা', 'active-yellow'); const flagDone = mkFlagBtn('সম্পন্ন', 'active-done'); // Fix initial active states flagRed.removeClass('active-yellow active-done'); flagYellow.removeClass('active-red active-done'); flagDone.removeClass('active-red active-yellow'); if (flag === 'red') { flagRed.addClass('active-red'); } else if (flag === 'yellow') { flagYellow.addClass('active-yellow'); } else { flagDone.addClass('active-done'); } flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); }); } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> 7roldjg9b9ttjw3ut47af3o7birf31f 740220 740208 2026-05-03T04:57:04Z কমলেশ মন্ডল 72403 740220 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 10; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-rows { overflow-y: auto; max-height: 75vh; background: #fff; } /* Section headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; position: sticky; top: 0; z-index: 5;} .sbs-section-en-title, .sbs-section-bn-title { padding: 8px 16px; font-size: 1em; font-weight: bold; color: #3366cc; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } /* IMPROVED LEFT SIDE READABILITY */ .sbs-cell-en { padding: 16px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.7; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.7; resize: vertical; background: transparent; padding: 16px; color: #202122; outline: none; box-sizing: border-box; } .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; background: inherit; } .sbs-flag-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // Parsing Helpers function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); // Filter out sections with no heading and no meaningful content return sections.filter(s => { if (s.heading !== null) return true; const text = s.content.join('\n').trim(); return text.length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.filter(sec => { return sec.content.join('\n').trim().length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // API helpers async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // Main Tool function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('\u2190'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('\u2192'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State variables let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); // Build display pairs const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) { displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); } const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) { displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); } // Rebuild bnSections ONCE before rendering so indices are stable const newBnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [] }; }); bnSections = newBnSections; // Now render using stable indices displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : (enSec && enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section)'); const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(i)); const flagRow = $('<div>').addClass('sbs-flag-row'); const flagRed = $('<button>').addClass('sbs-flag-btn').text('ঠিক হয়নি'); const flagYellow = $('<button>').addClass('sbs-flag-btn').text('পর্যালোচনা'); const flagDone = $('<button>').addClass('sbs-flag-btn').text('সম্পন্ন'); if (flag === 'red') flagRed.addClass('active-red'); else if (flag === 'yellow') flagYellow.addClass('active-yellow'); else flagDone.addClass('active-done'); flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); }); } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> imcv9ihq13jaqw1jv6gd3tff4ufecu2 740224 740220 2026-05-03T05:05:22Z কমলেশ মন্ডল 72403 740224 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; font-family: inherit; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Undo/redo arrows — bigger */ .sbs-undo-group { display: flex; gap: 4px; } .sbs-undo-group .sbs-btn { padding: 8px 14px; font-size: 1.1em; line-height: 1; } /* Status */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } /* Legend */ .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; flex-wrap: wrap; } .sbs-legend-item { display: flex; align-items: center; gap: 8px; } .sbs-legend-swatch { width: 16px; height: 16px; border-radius: 3px; flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; border: 2px solid #d33; } .sbs-legend-swatch.yellow { background: #fef6e4; border: 2px solid #ed9c28; } .sbs-legend-swatch.clear { background: #f8f9fa; border: 1px solid #a2a9b1; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 10; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-rows { overflow-y: auto; max-height: 75vh; background: #fff; } /* Section headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; } .sbs-section-en-title, .sbs-section-bn-title { padding: 8px 16px; font-size: 1em; font-weight: bold; color: #3366cc; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; } .sbs-row:last-child { border-bottom: none; } /* English cell */ .sbs-cell-en { padding: 16px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.7; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } /* Bengali cell */ .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; background: #fff8f8; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; background: #fffbf0; } .sbs-cell-bn.flag-none { border-left: 4px solid transparent; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.7; resize: vertical; background: transparent; padding: 16px; color: #202122; outline: none; box-sizing: border-box; } .sbs-cell-bn textarea:focus { background: #f6f9ff; } /* Flag buttons */ .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; } .sbs-flag-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; font-family: inherit; transition: all 0.15s; } .sbs-flag-btn:hover { border-color: #3366cc; color: #3366cc; background: #eaf3fb; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #d33; color: #d33; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #ed9c28; color: #ac6600; } .sbs-flag-btn.active-done { background: #d5fdf4; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // ── Parsing ────────────────────────────────────────────────────────────── function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => { if (s.heading !== null) return true; return s.content.join('\n').trim().length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.filter(sec => { return sec.content.join('\n').trim().length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } // ── API helpers ────────────────────────────────────────────────────────── async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // ── Tool ───────────────────────────────────────────────────────────────── function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } function syncRowHeight(enCell, bnCell) { enCell.css('min-height', ''); bnCell.css('min-height', ''); const h = Math.max(enCell.outerHeight() || 0, bnCell.outerHeight() || 0); enCell.css('min-height', h + 'px'); bnCell.css('min-height', h + 'px'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); // Build display pairs const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) { displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); } const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) { displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); } // Rebuild bnSections ONCE before rendering so indices are stable bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [] }; }); // Render displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : (enSec && enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section)'); const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); syncRowHeight(enCell, bnCell); if (phase === 'back') setPhase('save'); }; })(i)); // Flag buttons const flagRow = $('<div>').addClass('sbs-flag-row'); const flagRed = $('<button>').addClass('sbs-flag-btn').text('ঠিক হয়নি'); const flagYellow = $('<button>').addClass('sbs-flag-btn').text('পর্যালোচনা'); const flagDone = $('<button>').addClass('sbs-flag-btn').text('সম্পন্ন'); if (flag === 'red') flagRed.addClass('active-red'); else if (flag === 'yellow') flagYellow.addClass('active-yellow'); else flagDone.addClass('active-done'); flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => { resizeTA(ta[0]); syncRowHeight(enCell, bnCell); }, 0); }); } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> t237u9djx92tszsntb11yoeoftsoasu 740229 740224 2026-05-03T05:17:02Z কমলেশ মন্ডল 72403 740229 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; font-family: inherit; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Undo/redo arrows */ .sbs-undo-group { display: flex; gap: 4px; } .sbs-undo-group .sbs-btn { padding: 8px 16px; font-size: 1.2em; line-height: 1; } /* Status */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } /* Legend */ .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; flex-wrap: wrap; } .sbs-legend-item { display: flex; align-items: center; gap: 8px; } .sbs-legend-swatch { width: 16px; height: 16px; border-radius: 3px; flex-shrink: 0; } .sbs-legend-swatch.red { background: #fee7e6; border: 2px solid #d33; } .sbs-legend-swatch.yellow { background: #fef6e4; border: 2px solid #ed9c28; } .sbs-legend-swatch.clear { background: #f8f9fa; border: 1px solid #a2a9b1; } /* Grid */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 10; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-rows { background: #fff; } /* Section headers */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 2px solid #3366cc; position: sticky; top: 0; z-index: 5; } .sbs-section-en-title, .sbs-section-bn-title { padding: 8px 16px; font-size: 1em; font-weight: bold; color: #3366cc; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Section block */ .sbs-section-block { border-bottom: 2px solid #a2a9b1; } .sbs-section-block:last-child { border-bottom: none; } /* Row */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; } /* English cell */ .sbs-cell-en { padding: 16px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.7; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; overflow-y: auto; max-height: 320px; } /* Bengali cell */ .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; background: #fff8f8; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; background: #fffbf0; } .sbs-cell-bn.flag-none { border-left: 4px solid transparent; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.7; resize: none; background: transparent; padding: 16px; color: #202122; outline: none; box-sizing: border-box; overflow-y: auto; max-height: 320px; } .sbs-cell-bn textarea:focus { background: #f6f9ff; } /* Flag and lock row */ .sbs-flag-row { display: flex; gap: 6px; padding: 8px 16px 12px; justify-content: flex-end; align-items: center; border-top: 1px solid #eaecf0; } .sbs-flag-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; font-family: inherit; transition: all 0.15s; } .sbs-flag-btn:hover { border-color: #3366cc; color: #3366cc; background: #eaf3fb; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #d33; color: #d33; } .sbs-flag-btn.active-yellow { background: #fef6e4; border-color: #ed9c28; color: #ac6600; } .sbs-flag-btn.active-done { background: #d5fdf4; border-color: #14866d; color: #14866d; } /* Lock button */ .sbs-lock-btn { font-size: 0.8em; padding: 4px 10px; border-radius: 3px; border: 1px solid #c8ccd1; background: #fff; cursor: pointer; color: #54595d; font-weight: bold; font-family: inherit; transition: all 0.15s; margin-left: auto; } .sbs-lock-btn:hover { border-color: #3366cc; color: #3366cc; background: #eaf3fb; } .sbs-lock-btn.locked { background: #eaf3fb; border-color: #3366cc; color: #3366cc; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } // ── Parsing ────────────────────────────────────────────────────────────── function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => { if (s.heading !== null) return true; return s.content.join('\n').trim().length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.filter(sec => { if (sec.isPlaceholder && sec.content.join('\n').trim().length === 0) return false; return sec.content.join('\n').trim().length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content], isPlaceholder: s.isPlaceholder || false })); } // ── API helpers ────────────────────────────────────────────────────────── async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } // ── Tool ───────────────────────────────────────────────────────────────── function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); // Top bar const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch yellow'), $('<span>').text('অসম্পূর্ণ হতে পারে') ), $('<div>').addClass('sbs-legend-item').append( $('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে') ) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); // State let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; // Auto-fetch English title via Wikidata if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } // Undo / redo undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); // Build display pairs const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) { displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); } const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) { displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); } // Rebuild bnSections ONCE before rendering so indices are stable bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [], isPlaceholder: true }; }); // Render displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : (enSec && enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section)'); // Section block wraps header + row together const sectionBlock = $('<div>').addClass('sbs-section-block'); const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').text(enHeadingText), $('<div>').addClass('sbs-section-bn-title').text(bnHeadingText) ); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); // Scroll sync state per row let scrollLocked = false; let isSyncing = false; enCell.on('scroll', function () { if (!scrollLocked || isSyncing) return; isSyncing = true; ta[0].scrollTop = enCell[0].scrollTop; isSyncing = false; }); ta.on('scroll', function () { if (!scrollLocked || isSyncing) return; isSyncing = true; enCell[0].scrollTop = ta[0].scrollTop; isSyncing = false; }); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); if (bnSections[idx].isPlaceholder && ta.val().trim().length > 0) { bnSections[idx].isPlaceholder = false; } const newFlag = autoFlag(enText, ta.val()); bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + newFlag); if (phase === 'back') setPhase('save'); }; })(i)); // Flag and lock row const flagRow = $('<div>').addClass('sbs-flag-row'); const lockBtn = $('<button>').addClass('sbs-lock-btn').attr('title', 'স্ক্রল সিঙ্ক').text('স্ক্রল: বন্ধ'); lockBtn.on('click', () => { scrollLocked = !scrollLocked; lockBtn.text(scrollLocked ? 'স্ক্রল: চালু' : 'স্ক্রল: বন্ধ'); lockBtn.toggleClass('locked', scrollLocked); }); const flagRed = $('<button>').addClass('sbs-flag-btn').text('ঠিক হয়নি'); const flagYellow = $('<button>').addClass('sbs-flag-btn').text('পর্যালোচনা'); const flagDone = $('<button>').addClass('sbs-flag-btn').text('সম্পন্ন'); if (flag === 'red') flagRed.addClass('active-red'); else if (flag === 'yellow') flagYellow.addClass('active-yellow'); else flagDone.addClass('active-done'); flagRed.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-red'); flagRed.addClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); }); flagYellow.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-yellow'); flagYellow.addClass('active-yellow'); flagRed.removeClass('active-red'); flagDone.removeClass('active-done'); }); flagDone.on('click', () => { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-none'); flagDone.addClass('active-done'); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); }); flagRow.append(lockBtn, flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); sectionBlock.append(secHeader, row); rowsContainer.append(sectionBlock); }); } // Discard discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); // Main button mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); try { const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> ijo0qiv4uju71cd9rlgdd2ngiha87bs 740234 740229 2026-05-03T05:47:48Z কমলেশ মন্ডল 72403 740234 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; // Bengali numeral conversion const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; flex-wrap: wrap; } .sbs-legend-item { display: flex; align-items: center; gap: 6px; } .sbs-legend-swatch { width: 12px; height: 12px; border-radius: 2px; flex-shrink: 0; } .sbs-legend-swatch.red { background: #d33; } .sbs-legend-swatch.yellow { background: #ed9c28; } .sbs-legend-swatch.clear { background: #14866d; } /* Section count bar */ .sbs-count-bar { font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 6px 12px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; display: none; } /* Grid — single scrollable container, no inner scroll */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); display: none; } /* Sticky column headers */ .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 20; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } /* Rows container — NO overflow, grows freely */ .sbs-rows { background: #fff; overflow: visible; } /* Section header — sticky, collapses on scroll via JS */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; position: sticky; top: 42px; /* just below col-headers */ z-index: 10; transition: padding 0.15s, font-size 0.15s; } .sbs-section-header.compact { background: #d6eaf8; } .sbs-section-en-title, .sbs-section-bn-title { padding: 10px 16px; font-size: 1em; font-weight: bold; color: #3366cc; transition: padding 0.15s, font-size 0.15s; } .sbs-section-header.compact .sbs-section-en-title, .sbs-section-header.compact .sbs-section-bn-title { padding: 5px 16px; font-size: 0.85em; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Section number badge */ .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 7px; font-size: 0.78em; margin-right: 6px; vertical-align: middle; font-weight: bold; line-height: 1.6; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; min-height: 120px; } /* Left (English) cell */ .sbs-cell-en { padding: 22px 20px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.8; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } /* Right (Bengali) cell */ .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; } .sbs-cell-bn.flag-none { border-left: 4px solid #14866d; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.8; resize: none; /* no manual resize handle — auto-grows */ background: transparent; padding: 22px 20px 12px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; /* no individual scrollbar */ } /* Compact flag row */ .sbs-flag-row { display: flex; gap: 4px; padding: 6px 12px 8px; justify-content: flex-end; align-items: center; background: inherit; } .sbs-flag-label { font-size: 0.75em; color: #72777d; margin-right: 4px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.3px; } .sbs-flag-btn { font-size: 0.75em; padding: 3px 9px; border-radius: 10px; border: 1.5px solid #c8ccd1; background: #f8f9fa; cursor: pointer; color: #54595d; font-weight: 600; transition: all 0.15s; line-height: 1.4; } .sbs-flag-btn:hover { border-color: #72777d; background: #eaecf0; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #d33; color: #d33; } .sbs-flag-btn.active-yellow{ background: #fef6e4; border-color: #ed9c28; color: #b8630a; } .sbs-flag-btn.active-done { background: #e6f4f1; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } /* ── Parsing helpers ── */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => { if (s.heading !== null) return true; return s.content.join('\n').trim().length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.filter(sec => { return sec.content.join('\n').trim().length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* ── Bengali section count ── */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; $bar.text( 'মোট বিভাগ: ' + toBengaliNum(total) + ' | পাঠ্য সহ বিভাগ: ' + toBengaliNum(withText) + ' | অনুবাদ বাকি: ' + toBengaliNum(total - withText) ).show(); } /* ── API helpers ── */ async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* ── Main tool ── */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('←'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('→'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); /* Count bar */ const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch yellow'),$('<span>').text('অসম্পূর্ণ হতে পারে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে')) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; /* Compact section headers on window scroll */ function onWindowScroll() { const colHeaderBottom = colHeaders[0].getBoundingClientRect().bottom; $('.sbs-section-header').each(function () { const rect = this.getBoundingClientRect(); // When the section header is near or above the col-header bottom, make it compact if (rect.top <= colHeaderBottom + 2) { $(this).addClass('compact'); } else { $(this).removeClass('compact'); } }); } $(window).on('scroll.sbs', onWindowScroll); /* Auto-fetch English title */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Undo / redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); countBar.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } /* Auto-resize textarea to content height (no scrollbar) */ function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Apply flag state to a row's UI (class + button active states) */ function applyFlag(flag, bnCell, flagRed, flagYellow, flagDone) { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + flag); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); if (flag === 'red') flagRed.addClass('active-red'); else if (flag === 'yellow') flagYellow.addClass('active-yellow'); else flagDone.addClass('active-done'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); /* Rebuild bnSections with stable indices */ bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [] }; }); /* Update count bar */ updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); const sectionNum = toBengaliNum(i + 1); const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : (enSec && enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(sectionNum); const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').append(numBadge(), document.createTextNode(enHeadingText)), $('<div>').addClass('sbs-section-bn-title').append(numBadge(), document.createTextNode(bnHeadingText)) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); /* Auto-flag: update both class AND button states */ const newFlag = autoFlag(enText, ta.val()); applyFlag(newFlag, bnCell, flagRed, flagYellow, flagDone); /* Update count bar live */ updateCountBar(bnSections, countBar); if (phase === 'back') setPhase('save'); }; })(i)); /* Compact flag row */ const flagRow = $('<div>').addClass('sbs-flag-row'); const flagLabel = $('<span>').addClass('sbs-flag-label').text('অবস্থা:'); const flagRed = $('<button>').addClass('sbs-flag-btn').text('✗ বাকি'); const flagYellow = $('<button>').addClass('sbs-flag-btn').text('△ আংশিক'); const flagDone = $('<button>').addClass('sbs-flag-btn').text('✓ সম্পন্ন'); /* Set initial active state */ applyFlag(flag, bnCell, flagRed, flagYellow, flagDone); flagRed.on('click', () => applyFlag('red', bnCell, flagRed, flagYellow, flagDone)); flagYellow.on('click', () => applyFlag('yellow', bnCell, flagRed, flagYellow, flagDone)); flagDone.on('click', () => applyFlag('none', bnCell, flagRed, flagYellow, flagDone)); flagRow.append(flagLabel, flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> sx1l8iijdz6kwhzzfluh6xez3dmodtr 740238 740234 2026-05-03T05:55:32Z কমলেশ মন্ডল 72403 740238 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; // Bengali numeral conversion const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` /* Base */ .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* Top bar */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 16px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; } .sbs-field label { font-size: 0.85em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* Buttons */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 16px; border: 1px solid transparent; border-radius: 4px; font-size: 0.9em; font-weight: bold; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .sbs-btn:disabled { opacity: 0.5; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } /* Status & Legend */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 12px; min-height: 1.4em; font-weight: 500; } .sbs-legend { display: flex; gap: 20px; margin-bottom: 16px; font-size: 0.85em; color: #54595d; background: #f8f9fa; padding: 10px 16px; border-radius: 4px; border: 1px solid #eaecf0; flex-wrap: wrap; } .sbs-legend-item { display: flex; align-items: center; gap: 6px; } .sbs-legend-swatch { width: 12px; height: 12px; border-radius: 2px; flex-shrink: 0; } .sbs-legend-swatch.red { background: #d33; } .sbs-legend-swatch.yellow { background: #ed9c28; } .sbs-legend-swatch.clear { background: #14866d; } /* Section count bar */ .sbs-count-bar { font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 6px 12px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; display: none; } /* Grid — scrollable container */ .sbs-grid-wrap { border: 1px solid #a2a9b1; border-radius: 4px; overflow-y: auto; overflow-x: hidden; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); display: none; max-height: 78vh; position: relative; } /* Sticky column headers */ .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; position: sticky; top: 0; z-index: 20; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.85em; font-weight: bold; color: #202122; text-transform: uppercase; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } /* Rows container */ .sbs-rows { background: #fff; } /* Section header — sticky just below col-headers inside the grid scroller */ .sbs-section-header { display: grid; grid-template-columns: 1fr 1fr; background: #eaf3fb; border-bottom: 1px solid #a2a9b1; border-top: 1px solid #a2a9b1; position: sticky; top: 41px; /* col-headers height */ z-index: 10; transition: padding 0.15s, font-size 0.15s; } .sbs-section-header.compact { background: #d6eaf8; } .sbs-section-en-title, .sbs-section-bn-title { padding: 10px 16px; font-size: 1em; font-weight: bold; color: #3366cc; transition: padding 0.15s, font-size 0.15s; } .sbs-section-header.compact .sbs-section-en-title, .sbs-section-header.compact .sbs-section-bn-title { padding: 5px 16px; font-size: 0.85em; } .sbs-section-en-title { border-right: 1px solid #a2a9b1; } /* Section number badge */ .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 7px; font-size: 0.78em; margin-right: 6px; vertical-align: middle; font-weight: bold; line-height: 1.6; } /* Rows */ .sbs-row { display: grid; grid-template-columns: 1fr 1fr; border-bottom: 1px solid #eaecf0; min-height: 120px; } /* Left (English) cell */ .sbs-cell-en { padding: 22px 20px; border-right: 1px solid #a2a9b1; background: #f8f9fa; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 1.05em; line-height: 1.8; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; } /* Right (Bengali) cell */ .sbs-cell-bn { display: flex; flex-direction: column; background: #fff; box-sizing: border-box; } .sbs-cell-bn.flag-red { border-left: 4px solid #d33; } .sbs-cell-bn.flag-yellow { border-left: 4px solid #ed9c28; } .sbs-cell-bn.flag-none { border-left: 4px solid #14866d; } .sbs-cell-bn textarea { flex: 1; width: 100%; border: none; font-family: inherit; font-size: 1.05em; line-height: 1.8; resize: none; background: transparent; padding: 22px 20px 12px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 80px; } /* Compact flag row */ .sbs-flag-row { display: flex; gap: 4px; padding: 6px 12px 8px; justify-content: flex-end; align-items: center; background: inherit; } .sbs-flag-label { font-size: 0.75em; color: #72777d; margin-right: 4px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.3px; } .sbs-flag-btn { font-size: 0.75em; padding: 3px 9px; border-radius: 10px; border: 1.5px solid #c8ccd1; background: #f8f9fa; cursor: pointer; color: #54595d; font-weight: 600; transition: all 0.15s; line-height: 1.4; } .sbs-flag-btn:hover { border-color: #72777d; background: #eaecf0; } .sbs-flag-btn.active-red { background: #fee7e6; border-color: #d33; color: #d33; } .sbs-flag-btn.active-yellow{ background: #fef6e4; border-color: #ed9c28; color: #b8630a; } .sbs-flag-btn.active-done { background: #e6f4f1; border-color: #14866d; color: #14866d; } @media (max-width: 768px) { .sbs-col-headers, .sbs-row, .sbs-section-header { grid-template-columns: 1fr; } .sbs-col-header:first-child, .sbs-cell-en, .sbs-section-en-title { border-right: none; border-bottom: 1px solid #a2a9b1; } } `).appendTo('head'); } /* ── Parsing helpers ── */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const hMatch = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (hMatch) { sections.push(current); current = { heading: hMatch[2].trim(), level: hMatch[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => { if (s.heading !== null) return true; return s.content.join('\n').trim().length > 0; }); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function countWords(text) { if (!text || !text.trim()) return 0; return text.trim().split(/\s+/).length; } function autoFlag(enText, bnText) { const bn = (bnText || '').trim(); if (!bn) return 'red'; const enWords = countWords(enText); if (enWords === 0) return 'none'; const ratio = countWords(bn) / enWords; if (ratio < 0.25) return 'red'; if (ratio < 0.5) return 'yellow'; return 'none'; } function sectionsToWikitext(sections) { return sections.filter(sec => { // Always skip sections that have no meaningful content at all // (heading-only placeholders added for display pairing must not be saved) const hasContent = sec.content.join('\n').trim().length > 0; if (!hasContent && sec.heading !== null) return false; // drop empty headed placeholders if (!hasContent && sec.heading === null) return false; // drop empty lead return true; }).map(sec => { if (sec.heading === null) return sec.content.join('\n'); const hMarker = '='.repeat(sec.level); return hMarker + ' ' + sec.heading + ' ' + hMarker + '\n' + sec.content.join('\n'); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* ── Bengali section count ── */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; $bar.text( 'মোট বিভাগ: ' + toBengaliNum(total) + ' | পাঠ্য সহ বিভাগ: ' + toBengaliNum(withText) + ' | অনুবাদ বাকি: ' + toBengaliNum(total - withText) ).show(); } /* ── API helpers ── */ async function getEnTitle(bnTitle, api) { try { const local = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = local.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const api = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await api.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* ── Main tool ── */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('←'); const redoBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'পুনরায় করুন').text('→'); undoGroup.append(undoBtn, redoBtn); btnGroup.append(mainBtn, discardBtn, undoGroup); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); /* Count bar */ const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); const legend = $('<div>').addClass('sbs-legend').append( $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch red'), $('<span>').text('অনুবাদ নেই বা অত্যন্ত অসম্পূর্ণ')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch yellow'),$('<span>').text('অসম্পূর্ণ হতে পারে')), $('<div>').addClass('sbs-legend-item').append($('<div>').addClass('sbs-legend-swatch clear'), $('<span>').text('ঠিক আছে')) ).hide(); wrap.append(legend); const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const rowsContainer = $('<div>').addClass('sbs-rows'); gridWrap.append(colHeaders, rowsContainer); wrap.append(gridWrap); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; /* Compact section headers on grid scroll */ function onGridScroll() { const colHeaderBottom = colHeaders[0].getBoundingClientRect().bottom; $('.sbs-section-header').each(function () { const rect = this.getBoundingClientRect(); if (rect.top <= colHeaderBottom + 2) { $(this).addClass('compact'); } else { $(this).removeClass('compact'); } }); } // Attach scroll listener to the grid container after it is shown gridWrap[0].addEventListener('scroll', onGridScroll, { passive: true }); /* Auto-fetch English title */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Undo / redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); legend.hide(); countBar.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); legend.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); lockInputs(); } } /* Auto-resize textarea to content height (no scrollbar) */ function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Apply flag state to a row's UI (class + button active states) */ function applyFlag(flag, bnCell, flagRed, flagYellow, flagDone) { bnCell.removeClass('flag-red flag-yellow flag-none').addClass('flag-' + flag); flagRed.removeClass('active-red'); flagYellow.removeClass('active-yellow'); flagDone.removeClass('active-done'); if (flag === 'red') flagRed.addClass('active-red'); else if (flag === 'yellow') flagYellow.addClass('active-yellow'); else flagDone.addClass('active-done'); } function buildGrid() { rowsContainer.empty(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); /* Rebuild bnSections with stable indices */ bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [] }; }); /* Update count bar */ updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const flag = autoFlag(enText, bnText); const sectionNum = toBengaliNum(i + 1); const enHeadingText = enSec ? (enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' ' + '='.repeat(enSec.level) : '(Lead Section)') : '(অনুপস্থিত)'; const bnHeadingText = bnSec.heading !== null ? '='.repeat(bnSec.level) + ' ' + bnSec.heading + ' ' + '='.repeat(bnSec.level) : (enSec && enSec.heading !== null ? '='.repeat(enSec.level) + ' ' + enSec.heading + ' (অনুপস্থিত)' : '(Lead Section)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(sectionNum); const secHeader = $('<div>').addClass('sbs-section-header').append( $('<div>').addClass('sbs-section-en-title').append(numBadge(), document.createTextNode(enHeadingText)), $('<div>').addClass('sbs-section-bn-title').append(numBadge(), document.createTextNode(bnHeadingText)) ); rowsContainer.append(secHeader); const row = $('<div>').addClass('sbs-row'); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); const bnCell = $('<div>').addClass('sbs-cell-bn flag-' + flag); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); /* Auto-flag: update both class AND button states */ const newFlag = autoFlag(enText, ta.val()); applyFlag(newFlag, bnCell, flagRed, flagYellow, flagDone); /* Update count bar live */ updateCountBar(bnSections, countBar); if (phase === 'back') setPhase('save'); }; })(i)); /* Compact flag row */ const flagRow = $('<div>').addClass('sbs-flag-row'); const flagLabel = $('<span>').addClass('sbs-flag-label').text('অবস্থা:'); const flagRed = $('<button>').addClass('sbs-flag-btn').text('✗ বাকি'); const flagYellow = $('<button>').addClass('sbs-flag-btn').text('△ আংশিক'); const flagDone = $('<button>').addClass('sbs-flag-btn').text('✓ সম্পন্ন'); /* Set initial active state */ applyFlag(flag, bnCell, flagRed, flagYellow, flagDone); flagRed.on('click', () => applyFlag('red', bnCell, flagRed, flagYellow, flagDone)); flagYellow.on('click', () => applyFlag('yellow', bnCell, flagRed, flagYellow, flagDone)); flagDone.on('click', () => applyFlag('none', bnCell, flagRed, flagYellow, flagDone)); flagRow.append(flagLabel, flagRed, flagYellow, flagDone); bnCell.append(ta, flagRow); row.append(enCell, bnCell); rowsContainer.append(row); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enText, bnText] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enText); bnSections = parseByHeadings(bnText); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন। ' + enSections.length + 'টি ইংরেজি বিভাগ, ' + bnSections.length + 'টি বাংলা বিভাগ।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const returnPage = originPage || currentBnTitle; if (returnPage) window.location.href = mw.util.getUrl(returnPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> mttif208600yi7sds46h6tgkcqfzovo 740240 740238 2026-05-03T06:15:17Z কমলেশ মন্ডল 72403 740240 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); /* ── init ── */ function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); }); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } } /* ── CSS ── */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } /* ── Top bar ── */ .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } /* ── Buttons ── */ .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } /* ── Icon buttons (undo/redo) ── */ .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } /* ── Status ── */ .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } /* ── Count bar ── */ .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } /* ── Find & Replace bar ── */ .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } /* ── Grid wrapper: two panels side by side ── */ .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } /* Column header bar — above the two panels, not part of scroll */ .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } /* The two scroll panels */ .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } /* Each panel scrolls independently */ .sbs-panel-en, .sbs-panel-bn { overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } /* Section header inside each panel — plain flow, no stacking */ .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Section number badge */ .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } /* English content cell */ .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } /* Bengali textarea cell */ .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /* ── Wikitext helpers ── */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } /* * sectionsToWikitext — ONLY writes sections that have actual content. * Placeholders added for display pairing have content:[] or content:[''] * both of which produce an empty string after join+trim, so they are dropped. */ function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); return body.length > 0; // drop anything with no real text }) .map(sec => { if (sec.heading === null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }) .join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* ── Count bar ── */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + ' &nbsp;·&nbsp; ' + '<strong style="color:#14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + ' &nbsp;·&nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /* ── API helpers ── */ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiObj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiObj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* ── Main tool ── */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* ── Top bar ── */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'স্ক্রল লক').text('🔓 স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন / বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* ── Find & Replace bar ── */ const fnrBar = $('<div>').addClass('sbs-fnr-bar'); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('◀ আগে'); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে ▶'); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* ── Grid: col-headers + two scroll panels ── */ const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* ── Scroll lock ── */ let scrollLocked = false; let isSyncing = false; // prevents infinite scroll-event loops function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; // Sync by proportion so both panels move together even if heights differ const srcEl = source[0]; const tgtEl = target[0]; const ratio = srcEl.scrollTop / Math.max(1, srcEl.scrollHeight - srcEl.clientHeight); tgtEl.scrollTop = ratio * (tgtEl.scrollHeight - tgtEl.clientHeight); isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('🔒 স্ক্রল লক').addClass('locked'); // Immediately sync BN to EN position when locking syncScroll(panelEn, panelBn); } else { scrollLockBtn.text('🔓 স্ক্রল মুক্ত').removeClass('locked'); } }); /* ── State ── */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; /* ── textarea auto-grow ── */ function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* ── Find & Replace ── */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; getAllTAs().forEach(ta => { let idx = 0, text = ta.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); // Scroll panelBn so the match textarea is visible const taTop = m.ta.getBoundingClientRect().top; const panelTop = panelBn[0].getBoundingClientRect().top; if (taTop < panelTop + 40 || taTop > panelTop + panelBn[0].clientHeight - 40) { panelBn[0].scrollTop += taTop - panelTop - 120; } fnrMatch.text(toBengaliNum(fnrCurrent + 1) + ' / ' + toBengaliNum(fnrMatches.length) + ' টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const needle = fnrFind.val(); const repl = fnrRepl.val(); m.ta.value = m.ta.value.slice(0, m.start) + repl + m.ta.value.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; getAllTAs().forEach(ta => { const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const hits = (ta.value.match(new RegExp(esc, 'g')) || []).length; if (hits) { count += hits; ta.value = ta.value.split(needle).join(repl); $(ta).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + ' টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* ── Undo / Redo ── */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* ── Build grid ── */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); // Pad bnSections with empty placeholder objects for display only. // These placeholders have content:[] so sectionsToWikitext will skip them. bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 0, content: [] }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); // English panel: section header + content cell const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); // Bengali panel: section header + textarea cell const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* ── Wikidata auto-fetch ── */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* ── Discard ── */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* ── Main button ── */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> gconw0asqlhavvnj5gqxihhfg3i2lvr 740241 740240 2026-05-03T06:33:27Z কমলেশ মন্ডল 72403 740241 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { outline: none; border-color: #3366cc; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /* --- Wikitext helpers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); return body.length > 0 || sec.heading !== null; }) .map(sec => { if (sec.heading === null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }) .join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* --- Count bar --- */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp; &nbsp; ' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp; &nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /* --- API helpers --- */ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiObj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiObj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* --- Main tool --- */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar'); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('আগে'); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid: col-headers + two scroll panels */ const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const srcEl = source[0]; const tgtEl = target[0]; const ratio = srcEl.scrollTop / Math.max(1, srcEl.scrollHeight - srcEl.clientHeight); tgtEl.scrollTop = ratio * (tgtEl.scrollHeight - tgtEl.clientHeight); isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('locked'); syncScroll(panelEn, panelBn); } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; getAllTAs().forEach(ta => { let idx = 0, text = ta.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); const taTop = m.ta.getBoundingClientRect().top; const panelTop = panelBn[0].getBoundingClientRect().top; if (taTop < panelTop + 40 || taTop > panelTop + panelBn[0].clientHeight - 40) { panelBn[0].scrollTop += taTop - panelTop - 120; } fnrMatch.text(toBengaliNum(fnrCurrent + 1) + '/' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const needle = fnrFind.val(); const repl = fnrRepl.val(); m.ta.value = m.ta.value.slice(0, m.start) + repl + m.ta.value.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; getAllTAs().forEach(ta => { const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const hits = (ta.value.match(new RegExp(esc, 'g')) || []).length; if (hits) { count += hits; ta.value = ta.value.split(needle).join(repl); $(ta).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + ' টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* Undo / Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [] }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> 9ldolmkn4i8fbkkhtq544bckd5sryzu 740277 740241 2026-05-03T09:08:53Z কমলেশ মন্ডল 72403 740277 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খানি পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধের পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-disabled { opacity: 0.45; cursor: not-allowed; } .sbs-primary { background: #3366cc; color: #fff; } .sbs-primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-success { background: #14866d; color: #fff; } .sbs-success:hover:not(:disabled) { background: #0f5f4d; } .sbs-danger { background: #d33; color: #fff; } .sbs-neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-locked { background: #3366cc; color: #fff; } `).appendTo('head'); } /* --- Section parsers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); return body.length > 0 || sec.heading !== null; }) .map(sec => { if (sec.heading === null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); const body = sec.content.join('\n').trimEnd(); return h + ' ' + sec.heading + ' ' + h + '\n' + body; }) .join('\n\n') .trim(); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* --- Count bar --- */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp; &nbsp; ' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp; &nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /* --- API helpers --- */ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiObj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiObj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* --- Main tool --- */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn sbs-primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn sbs-danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('↶'); const redoBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'পুনরায় করুন').text('↷'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn sbs-neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar').hide(); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-btn sbs-neutral').text('আগে'); const fnrNext = $('<button>').addClass('sbs-btn sbs-neutral').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-btn sbs-neutral').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-btn sbs-neutral').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid */ const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const srcEl = source[0]; const tgtEl = target[0]; const ratio = srcEl.scrollTop / Math.max(1, srcEl.scrollHeight - srcEl.clientHeight); tgtEl.scrollTop = Math.round(ratio * (tgtEl.scrollHeight - tgtEl.clientHeight)); isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('sbs-locked'); setTimeout(() => syncScroll(panelEn, panelBn), 10); } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('sbs-locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; getAllTAs().forEach(ta => { let idx = 0, text = ta.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); fnrMatch.text(toBengaliNum(fnrCurrent + 1) + '/' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } /* Improved Replace */ fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const needle = fnrFind.val(); const repl = fnrRepl.val(); let val = m.ta.value; m.ta.value = val.slice(0, m.start) + repl + val.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val().trim(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; getAllTAs().forEach(ta => { let text = ta.value; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(esc, 'gu'); const hits = (text.match(regex) || []).length; if (hits) { count += hits; ta.value = text.replace(regex, repl); $(ta).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + ' টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* Undo / Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('sbs-success sbs-neutral').addClass('sbs-primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('sbs-primary sbs-neutral').addClass('sbs-success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('sbs-primary sbs-success').addClass('sbs-neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [] }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } finally { mainBtn.prop('disabled', false); } } else if (phase === 'save') { try { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); const api = new mw.Api(); await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি তুলনা সরঞ্জাম দিয়ে সম্পাদনা', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সফল হয়েছে।'); mw.notify('সংরক্ষণ সফল হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণে ত্রুটি: ' + e.message); mw.notify('সংরক্ষণে সমস্যা হয়েছে।', { type: 'error' }); } finally { mainBtn.prop('disabled', false); } } else if (phase === 'back') { window.location.href = mw.util.getUrl(currentBnTitle || originPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> 8lyb9z15g4xoixj85i16u455d1xrzvy 740279 740277 2026-05-03T09:10:09Z কমলেশ মন্ডল 72403 740279 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধের পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-disabled { opacity: 0.45; cursor: not-allowed; } .sbs-primary { background: #3366cc; color: #fff; } .sbs-primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-success { background: #14866d; color: #fff; } .sbs-success:hover:not(:disabled) { background: #0f5f4d; } .sbs-danger { background: #d33; color: #fff; } .sbs-neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-locked { background: #3366cc; color: #fff; } `).appendTo('head'); } /* --- Section parsers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); return body.length > 0 || sec.heading !== null; }) .map(sec => { if (sec.heading === null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); const body = sec.content.join('\n').trimEnd(); return h + ' ' + sec.heading + ' ' + h + '\n' + body; }) .join('\n\n') .trim(); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* --- Count bar --- */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp; &nbsp; ' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp; &nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /* --- API helpers --- */ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiObj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiObj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* --- Main tool --- */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn sbs-primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn sbs-danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'পূর্বাবস্থায় ফেরান').text('↶'); const redoBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'পুনরায় করুন').text('↷'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn sbs-neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn sbs-neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar').hide(); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-btn sbs-neutral').text('আগে'); const fnrNext = $('<button>').addClass('sbs-btn sbs-neutral').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-btn sbs-neutral').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-btn sbs-neutral').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid */ const gridWrap = $('<div>').addClass('sbs-grid-wrap').hide(); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const srcEl = source[0]; const tgtEl = target[0]; const ratio = srcEl.scrollTop / Math.max(1, srcEl.scrollHeight - srcEl.clientHeight); tgtEl.scrollTop = Math.round(ratio * (tgtEl.scrollHeight - tgtEl.clientHeight)); isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('sbs-locked'); setTimeout(() => syncScroll(panelEn, panelBn), 10); } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('sbs-locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; getAllTAs().forEach(ta => { let idx = 0, text = ta.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); fnrMatch.text(toBengaliNum(fnrCurrent + 1) + '/' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } /* Improved Replace */ fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const needle = fnrFind.val(); const repl = fnrRepl.val(); let val = m.ta.value; m.ta.value = val.slice(0, m.start) + repl + val.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val().trim(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; getAllTAs().forEach(ta => { let text = ta.value; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(esc, 'gu'); const hits = (text.match(regex) || []).length; if (hits) { count += hits; ta.value = text.replace(regex, repl); $(ta).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + ' টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* Undo / Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('sbs-success sbs-neutral').addClass('sbs-primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('sbs-primary sbs-neutral').addClass('sbs-success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('sbs-primary sbs-success').addClass('sbs-neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [] }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } finally { mainBtn.prop('disabled', false); } } else if (phase === 'save') { try { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); const api = new mw.Api(); await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি তুলনা সরঞ্জাম দিয়ে সম্পাদনা', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সফল হয়েছে।'); mw.notify('সংরক্ষণ সফল হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণে ত্রুটি: ' + e.message); mw.notify('সংরক্ষণে সমস্যা হয়েছে।', { type: 'error' }); } finally { mainBtn.prop('disabled', false); } } else if (phase === 'back') { window.location.href = mw.util.getUrl(currentBnTitle || originPage); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> g77udikaaff4pjd5bwn83q0omxwahm1 740280 740279 2026-05-03T09:11:07Z কমলেশ মন্ডল 72403 Undid revision [[Special:Diff/740277|740277]] by [[Special:Contributions/কমলেশ মন্ডল|কমলেশ মন্ডল]] ([[User talk:কমলেশ মন্ডল|talk]]) 740280 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') === SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { outline: none; border-color: #3366cc; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /* --- Wikitext helpers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); return body.length > 0 || sec.heading !== null; }) .map(sec => { if (sec.heading === null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }) .join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /* --- Count bar --- */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp; &nbsp; ' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp; &nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /* --- API helpers --- */ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiObj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiObj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* --- Main tool --- */ function loadTool() { document.title = 'পাশাপাশি তুলনা - বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar'); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('আগে'); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid: col-headers + two scroll panels */ const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const srcEl = source[0]; const tgtEl = target[0]; const ratio = srcEl.scrollTop / Math.max(1, srcEl.scrollHeight - srcEl.clientHeight); tgtEl.scrollTop = ratio * (tgtEl.scrollHeight - tgtEl.clientHeight); isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('locked'); syncScroll(panelEn, panelBn); } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; getAllTAs().forEach(ta => { let idx = 0, text = ta.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); const taTop = m.ta.getBoundingClientRect().top; const panelTop = panelBn[0].getBoundingClientRect().top; if (taTop < panelTop + 40 || taTop > panelTop + panelBn[0].clientHeight - 40) { panelBn[0].scrollTop += taTop - panelTop - 120; } fnrMatch.text(toBengaliNum(fnrCurrent + 1) + '/' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const needle = fnrFind.val(); const repl = fnrRepl.val(); m.ta.value = m.ta.value.slice(0, m.start) + repl + m.ta.value.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; getAllTAs().forEach(ta => { const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const hits = (ta.value.match(new RegExp(esc, 'g')) || []).length; if (hits) { count += hits; ta.value = ta.value.split(needle).join(repl); $(ta).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + ' টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* Undo / Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [] }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function (idx) { return function () { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { if (phase === 'load') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> 9ldolmkn4i8fbkkhtq544bckd5sryzu 740290 740280 2026-05-03T09:48:50Z কমলেশ মন্ডল 72403 740290 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') == SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { outline: none; border-color: #3366cc; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /*--- Wikitext helpers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec ? sec.content.join('\n').trim() : ""; } function sectionsToWikitext(sections) { return sections .filter(sec => { const body = sec.content.join('\n').trim(); // FIX: Filter out sections that are completely empty (no heading AND no body) return body.length > 0 || (sec.heading !== null && sec.heading.trim() !== ""); }) .map(sec => { if (sec.heading == null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }) .join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } /*--- API helpers --- */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html('<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp; &nbsp; ' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp; &nbsp; ' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি').show(); } async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiobj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiobj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* --- Main tool --- */ function loadTool() { document.title = 'পাশাপাশি তুলনা বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap').appendTo('#mw-content-text'); const topbar = $('<div>').addClass('sbs-topbar').appendTo(wrap); const bnField = $('<div>').addClass('sbs-field').appendTo(topbar); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম').appendTo(bnField); bnField.prepend($('<label>').text('বাংলা নিবন্ধ')); const enField = $('<div>').addClass('sbs-field').appendTo(topbar); const enInput = $('<input type="text">').attr('placeholder', 'English title').appendTo(enField); enField.prepend($('<label>').text('ইংরেজি নিবন্ধ')); const btnGroup = $('<div>').addClass('sbs-btn-group').appendTo(topbar); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন').appendTo(btnGroup); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide().appendTo(btnGroup); const undoGroup = $('<div>').addClass('sbs-undo-group').hide().appendTo(btnGroup); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;').appendTo(undoGroup); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;').appendTo(undoGroup); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').text('স্ক্রল মুক্ত').hide().appendTo(btnGroup); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide().appendTo(btnGroup); const status = $('<div>').addClass('sbs-status').appendTo(wrap); const countBar = $('<div>').addClass('sbs-count-bar').appendTo(wrap); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar').appendTo(wrap); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...').appendTo(fnrBar); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...').appendTo(fnrBar); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('আগে').appendTo(fnrBar); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে').appendTo(fnrBar); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান').appendTo(fnrBar); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান').appendTo(fnrBar); const fnrMatch = $('<span>').addClass('sbs-fnr-match').appendTo(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid */ const gridWrap = $('<div>').addClass('sbs-grid-wrap').appendTo(wrap); const colHeaders = $('<div>').addClass('sbs-col-headers').appendTo(gridWrap); colHeaders.append($('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)')); const panels = $('<div>').addClass('sbs-panels').appendTo(gridWrap); const panelEn = $('<div>').addClass('sbs-panel-en').appendTo(panels); const panelBn = $('<div>').addClass('sbs-panel-bn').appendTo(panels); /* Scroll lock logic */ let scrollLocked = false, isSyncing = false; // FIX: Scroll Snapping based on Section Headers function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const sourceHeaders = source.find('[class^="sbs-sec-hdr"]').toArray(); let visibleIndex = 0; for (let i = 0; i < sourceHeaders.length; i++) { if (sourceHeaders[i].getBoundingClientRect().top >= source[0].getBoundingClientRect().top) { visibleIndex = i; break; } } const targetHeaders = target.find('[class^="sbs-sec-hdr"]').toArray(); if (targetHeaders[visibleIndex]) { target[0].scrollTop = targetHeaders[visibleIndex].offsetTop - target[0].offsetTop; } setTimeout(() => { isSyncing = false; }, 50); } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; scrollLockBtn.text(scrollLocked ? 'স্ক্রল লক' : 'স্ক্রল মুক্ত').toggleClass('locked', scrollLocked); if (scrollLocked) syncScroll(panelEn, panelBn); }); /* State Variables */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = "", activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace Logic */ let fnrMatches = [], fnrCurrent = -1; function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; panelBn.find('textarea').each(function() { let idx = 0, text = this.value; while ((idx = text.indexOf(needle, idx)) !== -1) { fnrMatches.push({ ta: this, start: idx, end: idx + needle.length }); idx += needle.length; } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); fnrMatch.text(toBengaliNum(fnrCurrent + 1) + '/' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrNext.on('click', () => { if (fnrMatches.length) { fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } }); fnrPrev.on('click', () => { if (fnrMatches.length) { fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } }); // FIX: Find and Replace with Bengali cluster awareness fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Check that the match is NOT followed by a Bengali diacritic (Unicode range \u09BE-\u09D7) const regex = new RegExp(esc + "(?![\u09BE-\u09D7\u0981-\u0983\u09BC-\u09CD])", 'g'); panelBn.find('textarea').each(function() { const hits = (this.value.match(regex) || []).length; if (hits) { count += hits; this.value = this.value.replace(regex, repl); $(this).trigger('input'); } }); fnrSearch(); mw.notify(toBengaliNum(count) + 'টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); }); /* Undo Redo Events */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()).trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()).trigger('input'); }); /* Phase Control */ function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); bnInput.prop('readonly', false); enInput.prop('readonly', false); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); countBar.show(); fnrToggle.show(); scrollLockBtn.show(); bnInput.prop('readonly', true); enInput.prop('readonly', true); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); bnInput.prop('readonly', true); enInput.prop('readonly', true); } } function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const max = Math.max(enSections.length, bnSections.length); const displayPairs = []; for (let i = 0; i < max; i++) { displayPairs.push({ en: enSections[i] || null, bn: bnSections[i] || null }); } displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = pair.bn || { heading: enSec ? enSec.heading : null, level: enSec ? enSec.level : 2, content: [] }; if (!bnSections[i]) bnSections[i] = bnSec; // Sync state const num = toBengaliNum(i + 1); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + (enSec ? (enSec.heading || '(ভূমিকা)') : '(অনুপস্থিত)'))).appendTo(panelEn); $('<div>').addClass('sbs-cell-en').text(sectionToText(enSec)).appendTo(panelEn); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + (bnSec.heading || (enSec && enSec.heading ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)')))).appendTo(panelBn); const bnCell = $('<div>').addClass('sbs-cell-bn').appendTo(panelBn); const ta = $('<textarea>').val(sectionToText(bnSec)).attr('placeholder', 'অনুবাদ লিখুন...').appendTo(bnCell); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', () => { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[i])); redoStack = []; bnSections[i].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (phase === 'back') setPhase('save'); }); setTimeout(() => resizeTA(ta[0]), 0); }); updateCountBar(bnSections, countBar); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button execution */ mainBtn.on('click', async () => { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (phase === 'load') { if (!bnTitle || !enTitle) return status.text('দুটি শিরোনামই লিখুন।'); mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); try { const [enWT, bnWT] = await Promise.all([fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false)]); enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); currentBnTitle = bnTitle; buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> f8cgctqb3kv0079o04vap1py0064sun 740293 740290 2026-05-03T09:57:22Z কমলেশ মন্ডল 72403 740293 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') == SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /* --- CSS --- */ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; box-sizing: border-box; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-weight: bold; cursor: pointer; transition: all 0.15s; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; display: flex; align-items: center; justify-content: center; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; padding: 10px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; margin-bottom: 10px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; flex: 1; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; text-transform: uppercase; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { overflow-y: scroll; max-height: 76vh; scroll-behavior: auto; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 1px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; } .sbs-cell-en, .sbs-cell-bn { padding: 20px 18px; line-height: 1.75; min-height: 100px; border-bottom: 1px solid #eaecf0; } .sbs-cell-bn textarea { width: 100%; border: none; font-size: 1em; line-height: 1.75; resize: none; background: transparent; outline: none; display: block; padding: 0; } `).appendTo('head'); } /*--- Wikitext helpers --- */ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec ? sec.content.join('\n').trim() : ""; } function sectionsToWikitext(sections) { return sections .filter(sec => { // FIX: Ensure we only save sections that have actual text content. // If the section is empty and was only created for alignment, it is dropped. const hasBody = sec.content.join('').trim().length > 0; return hasBody; }) .map(sec => { if (sec.heading == null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }) .join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content] })); } function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; $bar.html('<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট &nbsp; <strong style="color:#14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ').show(); } async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || !page.pageprops || !page.pageprops.wikibase_item) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: page.pageprops.wikibase_item, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[page.pageprops.wikibase_item].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiobj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiobj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } function loadTool() { document.title = 'পাশাপাশি তুলনা বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap').appendTo('#mw-content-text'); const topbar = $('<div>').addClass('sbs-topbar').appendTo(wrap); const bnInput = $('<input type="text">').val(originPage).appendTo($('<div>').addClass('sbs-field').append($('<label>').text('বাংলা নিবন্ধ')).appendTo(topbar)); const enInput = $('<input type="text">').appendTo($('<div>').addClass('sbs-field').append($('<label>').text('ইংরেজি নিবন্ধ')).appendTo(topbar)); const btnGroup = $('<div>').addClass('sbs-btn-group').appendTo(topbar); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন').appendTo(btnGroup); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide().appendTo(btnGroup); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').text('স্ক্রল মুক্ত').hide().appendTo(btnGroup); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide().appendTo(btnGroup); const status = $('<div>').addClass('sbs-status').appendTo(wrap); const countBar = $('<div>').addClass('sbs-count-bar').appendTo(wrap); const fnrBar = $('<div>').addClass('sbs-fnr-bar').appendTo(wrap); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...').appendTo(fnrBar); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...').appendTo(fnrBar); const fnrReplAll = $('<button>').addClass('sbs-btn primary').text('সব বদলান').appendTo(fnrBar); const gridWrap = $('<div>').addClass('sbs-grid-wrap').appendTo(wrap); $('<div>').addClass('sbs-col-headers').append($('<div>').addClass('sbs-col-header').text('ইংরেজি'), $('<div>').addClass('sbs-col-header').text('বাংলা')).appendTo(gridWrap); const panels = $('<div>').addClass('sbs-panels').appendTo(gridWrap); const panelEn = $('<div>').addClass('sbs-panel-en').appendTo(panels); const panelBn = $('<div>').addClass('sbs-panel-bn').appendTo(panels); /* FIXED SCROLL LOCK LOGIC */ let scrollLocked = false, isSyncing = false, scrollOffset = 0; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; // Maintain original pixel orientation if (source[0] === panelEn[0]) { target[0].scrollTop = source[0].scrollTop + scrollOffset; } else { target[0].scrollTop = source[0].scrollTop - scrollOffset; } // Minimal delay to prevent scroll-bounce loops setTimeout(() => { isSyncing = false; }, 20); } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { // FIX: Capture the exact pixel difference at the moment of locking. scrollOffset = panelBn[0].scrollTop - panelEn[0].scrollTop; scrollLockBtn.text('স্ক্রল লক').addClass('locked'); } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('locked'); } }); fnrToggle.on('click', () => fnrBar.toggle()); let enSections = [], bnSections = [], baselineSections = [], currentBnTitle = ""; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; // FIX: Regex to avoid breaking Bengali clusters const regex = new RegExp(needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + "(?![\u09BE-\u09D7\u0981-\u0983\u09BC-\u09CD])", 'g'); panelBn.find('textarea').each(function() { if (this.value.includes(needle)) { const hits = (this.value.match(regex) || []).length; count += hits; this.value = this.value.replace(regex, repl); $(this).trigger('input'); } }); mw.notify(toBengaliNum(count) + 'টি প্রতিস্থাপন করা হয়েছে।'); }); function buildGrid() { panelEn.empty(); panelBn.empty(); const max = Math.max(enSections.length, bnSections.length); for (let i = 0; i < max; i++) { const enSec = enSections[i] || { heading: "(অনুপস্থিত)", content: [] }; const bnSec = bnSections[i] || { heading: enSec.heading, level: enSec.level, content: [] }; if (!bnSections[i]) bnSections[i] = bnSec; $('<div>').addClass('sbs-sec-hdr-en').text(toBengaliNum(i + 1) + '. ' + (enSec.heading || '(ভূমিকা)')).appendTo(panelEn); $('<div>').addClass('sbs-cell-en').text(sectionToText(enSec)).appendTo(panelEn); $('<div>').addClass('sbs-sec-hdr-bn').text(toBengaliNum(i + 1) + '. ' + (bnSec.heading || '(ভূমিকা)')).appendTo(panelBn); const cell = $('<div>').addClass('sbs-cell-bn').appendTo(panelBn); const ta = $('<textarea>').val(sectionToText(bnSec)).appendTo(cell); ta.on('input', function() { resizeTA(this); bnSections[i].content = this.value.split('\n'); updateCountBar(bnSections, countBar); }); setTimeout(() => resizeTA(ta[0]), 50); } updateCountBar(bnSections, countBar); } if (originPage) { getEnTitle(originPage, api).then(t => { if (t) enInput.val(t); }); } mainBtn.on('click', async () => { if (mainBtn.text() === 'লোড করুন') { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (!bnTitle || !enTitle) return status.text('দুটি শিরোনামই লিখুন।'); mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); try { const [enWT, bnWT] = await Promise.all([fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false)]); enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); currentBnTitle = bnTitle; buildGrid(); gridWrap.show(); discardBtn.show(); scrollLockBtn.show(); fnrToggle.show(); mainBtn.prop('disabled', false).text('সংরক্ষণ করুন').addClass('success'); status.text('সম্পাদনা শুরু করুন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); mainBtn.prop('disabled', false).text('লোড করুন'); } } else { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।'); location.reload(); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mainBtn.prop('disabled', false); } } }); discardBtn.on('click', () => { if(confirm('বাতিল করবেন?')) location.reload(); }); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> ih3rr7pkj7h1mcb2uxyjmwgjn4nehx4 740313 740293 2026-05-03T10:39:05Z কমলেশ মন্ডল 72403 740313 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') == SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /*--- CSS ---*/ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { outline: none; border-color: #3366cc; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { position: relative; overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /*--- Wikitext helpers ---*/ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections.filter(sec => { const body = sec.content.join('\n').trim(); // Do not save sections that are completely empty AND were only created as placeholders if (sec.isPlaceholder && body.length === 0) return false; return body.length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading == null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content], isPlaceholder: s.isPlaceholder })); } /* Count bar */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ মোট' + '&nbsp;&nbsp;|&nbsp;&nbsp;' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্য সহ' + '&nbsp;&nbsp;|&nbsp;&nbsp;' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /*--- API helpers ---*/ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiobj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiobj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* Main tool */ function loadTool() { document.title = 'পাশাপাশি তুলনা – বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar'); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('আগে'); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid: col-headers + two scroll panels */ const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const sourceNodes = source.children('.sbs-sec-hdr-en, .sbs-sec-hdr-bn'); const targetNodes = target.children('.sbs-sec-hdr-en, .sbs-sec-hdr-bn'); let topIdx = 0; const sourceScrollTop = source[0].scrollTop; // Find the heading closest to the top of the viewport sourceNodes.each(function(i) { if (this.offsetTop <= sourceScrollTop + 5) { topIdx = i; } else { return false; } }); const srcElem = sourceNodes[topIdx]; const tgtElem = targetNodes[topIdx]; if (srcElem && tgtElem) { const srcCell = $(srcElem).next()[0]; const tgtCell = $(tgtElem).next()[0]; const scrolledPastElem = sourceScrollTop - srcElem.offsetTop; const srcHeight = (srcElem.offsetHeight + (srcCell ? srcCell.offsetHeight : 0)) || 1; const ratio = Math.max(0, scrolledPastElem / srcHeight); const tgtHeight = tgtElem.offsetHeight + (tgtCell ? tgtCell.offsetHeight : 0); target[0].scrollTop = tgtElem.offsetTop + (tgtHeight * ratio); } else { // Fallback to basic proportional scrolling const ratio = source[0].scrollTop / Math.max(1, source[0].scrollHeight - source[0].clientHeight); target[0].scrollTop = ratio * (target[0].scrollHeight - target[0].clientHeight); } isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('locked'); syncScroll(panelBn, panelEn); // Immediately snap to align with current Bengali view } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Negative lookahead avoids matching if character is followed by Nukta, Vowel signs or Virama const regex = new RegExp(esc + '(?![\\u09BC\\u09BE-\\u09CC\\u09CD])', 'g'); getAllTAs().forEach(ta => { let match; while ((match = regex.exec(ta.value)) !== null) { fnrMatches.push({ ta, start: match.index, end: match.index + match[0].length }); } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); const taTop = m.ta.getBoundingClientRect().top; const panelTop = panelBn[0].getBoundingClientRect().top; if (taTop < panelTop + 40 || taTop > panelTop + panelBn[0].clientHeight - 40) { panelBn[0].scrollTop += (taTop - panelTop - 120); } fnrMatch.text(toBengaliNum(fnrCurrent + 1) + ' / ' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const repl = fnrRepl.val(); m.ta.value = m.ta.value.slice(0, m.start) + repl + m.ta.value.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(esc + '(?![\\u09BC\\u09BE-\\u09CC\\u09CD])', 'g'); getAllTAs().forEach(ta => { const hits = (ta.value.match(regex) || []).length; if (hits) { count += hits; ta.value = ta.value.replace(regex, repl); $(ta).trigger('input'); } }); if (count) { fnrSearch(); mw.notify(toBengaliNum(count) + 'টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); } }); /* Undo Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [], isPlaceholder: true // Flag to identify auto-generated blanks }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function(idx) { return function() { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else { status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); } }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (phase === 'load') { if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> 93tcdug3boe1ywzqnpgct9ctz14fv6o 740323 740313 2026-05-03T10:57:56Z কমলেশ মন্ডল 72403 740323 javascript text/javascript // <nowiki> (function ($, mw) { 'use strict'; const SPECIAL_PAGE_NAME = 'বিশেষ:খালি_পাতা/SideBySide'; const toBengaliNum = n => String(n).replace(/\d/g, d => '০১২৩৪৫৬৭৮৯'[d]); function init() { mw.loader.using(['mediawiki.util'], function () { mw.util.addPortletLink( 'p-tb', mw.util.getUrl(SPECIAL_PAGE_NAME) + '?origin=' + encodeURIComponent(mw.config.get('wgPageName')), 'পাশাপাশি তুলনা', 't-sidebyside', 'বাংলা ও ইংরেজি নিবন্ধ পাশাপাশি তুলনা করুন' ); if (mw.config.get('wgPageName') == SPECIAL_PAGE_NAME) { mw.loader.using(['mediawiki.api', 'mediawiki.util'], loadTool); } }); } /*--- CSS ---*/ function injectCSS() { if ($('#sbs-styles').length) return; $('<style id="sbs-styles">').text(` .sbs-wrap { max-width: 100%; box-sizing: border-box; font-family: apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #202122; } .sbs-topbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-bottom: 12px; padding: 16px; background: #fff; border: 1px solid #a2a9b1; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); } .sbs-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 180px; } .sbs-field label { font-size: 0.8em; font-weight: bold; color: #54595d; text-transform: uppercase; letter-spacing: 0.5px; } .sbs-field input { padding: 8px 10px; border: 1px solid #a2a9b1; border-radius: 4px; font-family: inherit; font-size: 1em; width: 100%; box-sizing: border-box; transition: border-color 0.25s, box-shadow 0.25s; } .sbs-field input:focus { border-color: #3366cc; outline: none; box-shadow: 0 0 0 2px rgba(51,102,204,0.2); } .sbs-field input:read-only { background: #f8f9fa; color: #72777d; cursor: default; } .sbs-btn-group { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; } .sbs-btn { padding: 8px 18px; border: 1px solid transparent; border-radius: 4px; font-size: 0.95em; font-weight: bold; cursor: pointer; transition: all 0.15s; white-space: nowrap; line-height: 1.4; } .sbs-btn:disabled { opacity: 0.45; cursor: not-allowed; } .sbs-btn.primary { background: #3366cc; color: #fff; } .sbs-btn.primary:hover:not(:disabled) { background: #2a4b8d; } .sbs-btn.success { background: #14866d; color: #fff; } .sbs-btn.success:hover:not(:disabled) { background: #0f6b56; } .sbs-btn.neutral { background: #f8f9fa; color: #202122; border-color: #a2a9b1; } .sbs-btn.neutral:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-btn.danger { background: #fff; color: #d33; border-color: #d33; } .sbs-btn.danger:hover:not(:disabled) { background: #fee7e6; } .sbs-btn.locked { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-undo-group { display: flex; gap: 6px; align-items: flex-end; } .sbs-icon-btn { width: 38px; height: 38px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; cursor: pointer; font-size: 1.3em; display: flex; align-items: center; justify-content: center; transition: all 0.15s; color: #202122; flex-shrink: 0; font-weight: bold; line-height: 1; } .sbs-icon-btn:hover:not(:disabled) { background: #fff; border-color: #3366cc; color: #3366cc; } .sbs-icon-btn:disabled { opacity: 0.4; cursor: not-allowed; } .sbs-status { font-size: 0.9em; color: #54595d; margin-bottom: 10px; min-height: 1.4em; font-weight: 500; } .sbs-count-bar { display: none; font-size: 0.88em; color: #3366cc; font-weight: 600; margin-bottom: 10px; padding: 7px 14px; background: #eaf3fb; border-radius: 4px; border: 1px solid #c8d8f0; } .sbs-fnr-bar { display: none; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; padding: 10px 14px; background: #fff8e6; border: 1px solid #e6c87a; border-radius: 4px; } .sbs-fnr-bar input { padding: 6px 9px; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 0.92em; font-family: inherit; min-width: 140px; flex: 1; box-sizing: border-box; } .sbs-fnr-bar input:focus { outline: none; border-color: #3366cc; box-shadow: 0 0 0 2px rgba(51,102,204,0.15); } .sbs-fnr-btn { padding: 6px 12px; border: 1px solid #a2a9b1; border-radius: 4px; background: #f8f9fa; font-size: 0.88em; font-weight: bold; cursor: pointer; white-space: nowrap; transition: all 0.15s; color: #202122; } .sbs-fnr-btn:hover { background: #eaecf0; border-color: #72777d; } .sbs-fnr-btn.fnr-repl-all { background: #3366cc; color: #fff; border-color: #3366cc; } .sbs-fnr-btn.fnr-repl-all:hover { background: #2a4b8d; } .sbs-fnr-match { font-size: 0.82em; color: #54595d; white-space: nowrap; align-self: center; min-width: 80px; } .sbs-grid-wrap { display: none; border: 1px solid #a2a9b1; border-radius: 4px; background: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.05); overflow: hidden; } .sbs-col-headers { display: grid; grid-template-columns: 1fr 1fr; background: #eaecf0; border-bottom: 2px solid #c8ccd1; position: relative; z-index: 5; } .sbs-col-header { padding: 10px 16px; font-size: 0.82em; font-weight: bold; color: #202122; text-transform: uppercase; letter-spacing: 0.4px; } .sbs-col-header:first-child { border-right: 1px solid #c8ccd1; } .sbs-panels { display: grid; grid-template-columns: 1fr 1fr; max-height: 76vh; overflow: hidden; } .sbs-panel-en, .sbs-panel-bn { position: relative; overflow-y: scroll; overflow-x: hidden; max-height: 76vh; box-sizing: border-box; } .sbs-panel-en { border-right: 1px solid #a2a9b1; background: #f8f9fa; } .sbs-panel-bn { background: #fff; } .sbs-sec-hdr-en, .sbs-sec-hdr-bn { padding: 9px 16px; font-size: 0.92em; font-weight: bold; color: #3366cc; background: #eaf3fb; border-top: 2px solid #a2a9b1; border-bottom: 1px solid #c8d8f0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sbs-sec-num { display: inline-block; background: #3366cc; color: #fff; border-radius: 10px; padding: 0 6px; font-size: 0.75em; margin-right: 4px; vertical-align: middle; font-weight: bold; line-height: 1.7; } .sbs-cell-en { padding: 20px 18px; font-size: 1em; line-height: 1.75; color: #202122; white-space: pre-wrap; word-break: break-word; box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn { box-sizing: border-box; border-bottom: 1px solid #eaecf0; min-height: 100px; } .sbs-cell-bn textarea { width: 100%; border: none; font-family: inherit; font-size: 1em; line-height: 1.75; resize: none; background: transparent; padding: 20px 18px; color: #202122; outline: none; box-sizing: border-box; overflow: hidden; min-height: 100px; display: block; } .sbs-cell-bn textarea:focus { background: #fffff8; } @media (max-width: 768px) { .sbs-col-headers, .sbs-panels { grid-template-columns: 1fr; } .sbs-panel-en { border-right: none; border-bottom: 1px solid #a2a9b1; max-height: 40vh; } .sbs-panel-bn { max-height: 50vh; } } `).appendTo('head'); } /*--- Wikitext helpers ---*/ function parseByHeadings(wikitext) { const lines = wikitext.split('\n'); const sections = []; let current = { heading: null, level: 0, content: [] }; for (const line of lines) { const m = line.match(/^(={1,6})\s*(.+?)\s*\1\s*$/); if (m) { sections.push(current); current = { heading: m[2].trim(), level: m[1].length, content: [] }; } else { current.content.push(line); } } sections.push(current); return sections.filter(s => s.heading !== null || s.content.join('\n').trim().length > 0); } function sectionToText(sec) { return sec.content.join('\n').trim(); } function sectionsToWikitext(sections) { return sections.filter(sec => { const body = sec.content.join('\n').trim(); // Do not save sections that are completely empty AND were only created as placeholders if (sec.isPlaceholder && body.length === 0) return false; return body.length > 0 || sec.heading !== null; }).map(sec => { if (sec.heading == null) return sec.content.join('\n').trimEnd(); const h = '='.repeat(sec.level); return h + ' ' + sec.heading + ' ' + h + '\n' + sec.content.join('\n').trimEnd(); }).join('\n\n'); } function deepClone(sections) { return sections.map(s => ({ heading: s.heading, level: s.level, content: [...s.content], isPlaceholder: s.isPlaceholder })); } /* Count bar */ function updateCountBar(bnSections, $bar) { const total = bnSections.length; const withText = bnSections.filter(s => sectionToText(s).length > 0).length; const empty = total - withText; $bar.html( '<strong>' + toBengaliNum(total) + '</strong> টি বিভাগ' + '&nbsp;&nbsp;|&nbsp;&nbsp;' + '<strong style="color: #14866d">' + toBengaliNum(withText) + '</strong> টি পাঠ্যসহ' + '&nbsp;&nbsp;|&nbsp;&nbsp;' + '<strong style="color:#d33">' + toBengaliNum(empty) + '</strong> টি খালি' ).show(); } /*--- API helpers ---*/ async function getEnTitle(bnTitle, api) { try { const r = await api.get({ action: 'query', titles: bnTitle, prop: 'pageprops', ppprop: 'wikibase_item', formatversion: 2 }); const page = r.query.pages[0]; if (!page || page.missing) return null; const qid = page.pageprops && page.pageprops.wikibase_item; if (!qid) return null; const wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php'); const wd = await wdApi.get({ action: 'wbgetentities', ids: qid, props: 'sitelinks', sitefilter: 'enwikibooks', formatversion: 2 }); const sl = wd.entities[qid] && wd.entities[qid].sitelinks && wd.entities[qid].sitelinks.enwikibooks; return sl ? sl.title : null; } catch (e) { return null; } } async function fetchWikitext(title, isEn) { const apiobj = isEn ? new mw.ForeignApi('https://en.wikibooks.org/w/api.php') : new mw.Api(); const data = await apiobj.get({ action: 'query', titles: title, prop: 'revisions', rvprop: 'content', rvslots: 'main', formatversion: 2 }); const page = data.query.pages[0]; if (page.missing) throw new Error('পাতা পাওয়া যায়নি: ' + title); return page.revisions[0].slots.main.content; } /* Main tool */ function loadTool() { document.title = 'পাশাপাশি তুলনা – বাংলা উইকিবই'; $('#firstHeading').text('পাশাপাশি তুলনা সরঞ্জাম'); $('#mw-content-text').empty(); injectCSS(); const api = new mw.Api(); const urlParams = new URLSearchParams(window.location.search); const originPage = urlParams.get('origin') || ''; const wrap = $('<div>').addClass('sbs-wrap'); $('#mw-content-text').append(wrap); /* Top bar */ const topbar = $('<div>').addClass('sbs-topbar'); const bnField = $('<div>').addClass('sbs-field'); const bnInput = $('<input type="text">').val(originPage).attr('placeholder', 'বাংলা শিরোনাম'); bnField.append($('<label>').text('বাংলা নিবন্ধ'), bnInput); const enField = $('<div>').addClass('sbs-field'); const enInput = $('<input type="text">').attr('placeholder', 'English title'); enField.append($('<label>').text('ইংরেজি নিবন্ধ'), enInput); const btnGroup = $('<div>').addClass('sbs-btn-group'); const mainBtn = $('<button>').addClass('sbs-btn primary').text('লোড করুন'); const discardBtn = $('<button>').addClass('sbs-btn danger').text('বাতিল').hide(); const undoGroup = $('<div>').addClass('sbs-undo-group').hide(); const undoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পূর্বাবস্থায় ফেরান').html('&#8592;'); const redoBtn = $('<button>').addClass('sbs-icon-btn').attr('title', 'পুনরায় করুন').html('&#8594;'); undoGroup.append(undoBtn, redoBtn); const scrollLockBtn = $('<button>').addClass('sbs-btn neutral').attr('title', 'স্ক্রল লক').text('স্ক্রল মুক্ত').hide(); const fnrToggle = $('<button>').addClass('sbs-btn neutral').text('খুঁজুন/বদলান').hide(); btnGroup.append(mainBtn, discardBtn, undoGroup, scrollLockBtn, fnrToggle); topbar.append(bnField, enField, btnGroup); wrap.append(topbar); const status = $('<div>').addClass('sbs-status'); wrap.append(status); const countBar = $('<div>').addClass('sbs-count-bar'); wrap.append(countBar); /* Find & Replace bar */ const fnrBar = $('<div>').addClass('sbs-fnr-bar'); const fnrFind = $('<input type="text">').attr('placeholder', 'খুঁজুন...'); const fnrRepl = $('<input type="text">').attr('placeholder', 'বদলান...'); const fnrPrev = $('<button>').addClass('sbs-fnr-btn').text('আগে'); const fnrNext = $('<button>').addClass('sbs-fnr-btn').text('পরে'); const fnrReplace = $('<button>').addClass('sbs-fnr-btn').text('একটি বদলান'); const fnrReplAll = $('<button>').addClass('sbs-fnr-btn fnr-repl-all').text('সব বদলান'); const fnrMatch = $('<span>').addClass('sbs-fnr-match'); fnrBar.append(fnrFind, fnrRepl, fnrPrev, fnrNext, fnrReplace, fnrReplAll, fnrMatch); wrap.append(fnrBar); fnrToggle.on('click', () => { const visible = fnrBar.css('display') !== 'none'; fnrBar.css('display', visible ? 'none' : 'flex'); if (!visible) fnrFind.focus(); }); /* Grid: col-headers + two scroll panels */ const gridWrap = $('<div>').addClass('sbs-grid-wrap'); const colHeaders = $('<div>').addClass('sbs-col-headers').append( $('<div>').addClass('sbs-col-header').text('ইংরেজি (শুধু পড়ুন)'), $('<div>').addClass('sbs-col-header').text('বাংলা (সম্পাদনাযোগ্য)') ); const panels = $('<div>').addClass('sbs-panels'); const panelEn = $('<div>').addClass('sbs-panel-en'); const panelBn = $('<div>').addClass('sbs-panel-bn'); panels.append(panelEn, panelBn); gridWrap.append(colHeaders, panels); wrap.append(gridWrap); /* Scroll lock */ let scrollLocked = false; let isSyncing = false; function syncScroll(source, target) { if (!scrollLocked || isSyncing) return; isSyncing = true; const sourceNodes = source.children('.sbs-sec-hdr-en, .sbs-sec-hdr-bn'); const targetNodes = target.children('.sbs-sec-hdr-en, .sbs-sec-hdr-bn'); let topIdx = 0; const sourceScrollTop = source[0].scrollTop; // Find the heading closest to the top of the viewport sourceNodes.each(function(i) { if (this.offsetTop <= sourceScrollTop + 5) { topIdx = i; } else { return false; } }); const srcElem = sourceNodes[topIdx]; const tgtElem = targetNodes[topIdx]; if (srcElem && tgtElem) { const srcCell = $(srcElem).next()[0]; const tgtCell = $(tgtElem).next()[0]; const scrolledPastElem = sourceScrollTop - srcElem.offsetTop; const srcHeight = (srcElem.offsetHeight + (srcCell ? srcCell.offsetHeight : 0)) || 1; const ratio = Math.max(0, scrolledPastElem / srcHeight); const tgtHeight = tgtElem.offsetHeight + (tgtCell ? tgtCell.offsetHeight : 0); target[0].scrollTop = tgtElem.offsetTop + (tgtHeight * ratio); } else { // Fallback to basic proportional scrolling const ratio = source[0].scrollTop / Math.max(1, source[0].scrollHeight - source[0].clientHeight); target[0].scrollTop = ratio * (target[0].scrollHeight - target[0].clientHeight); } isSyncing = false; } panelEn.on('scroll', () => syncScroll(panelEn, panelBn)); panelBn.on('scroll', () => syncScroll(panelBn, panelEn)); scrollLockBtn.on('click', () => { scrollLocked = !scrollLocked; if (scrollLocked) { scrollLockBtn.text('স্ক্রল লক').addClass('locked'); syncScroll(panelBn, panelEn); // Immediately snap to align with current Bengali view } else { scrollLockBtn.text('স্ক্রল মুক্ত').removeClass('locked'); } }); /* State */ let enSections = [], bnSections = [], baselineSections = []; let currentBnTitle = ''; let activeTA = null, undoStack = [], redoStack = []; let phase = 'load'; function resizeTA(ta) { ta.style.height = 'auto'; ta.style.height = ta.scrollHeight + 'px'; } /* Find & Replace */ let fnrMatches = []; let fnrCurrent = -1; function getAllTAs() { return panelBn.find('textarea').toArray(); } function fnrClear() { fnrMatches = []; fnrCurrent = -1; fnrMatch.text(''); } function fnrSearch() { fnrClear(); const needle = fnrFind.val(); if (!needle) return; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Negative lookahead avoids matching if character is followed by Nukta, Vowel signs or Virama const regex = new RegExp(esc + '(?![\\u09BC\\u09BE-\\u09CC\\u09CD])', 'g'); getAllTAs().forEach(ta => { let match; while ((match = regex.exec(ta.value)) !== null) { fnrMatches.push({ ta, start: match.index, end: match.index + match[0].length }); } }); if (fnrMatches.length) { fnrCurrent = 0; fnrFocus(); } else { fnrMatch.text('কোনো মিল নেই'); } } function fnrFocus() { if (!fnrMatches.length || fnrCurrent < 0) return; const m = fnrMatches[fnrCurrent]; m.ta.focus(); m.ta.setSelectionRange(m.start, m.end); const taTop = m.ta.getBoundingClientRect().top; const panelTop = panelBn[0].getBoundingClientRect().top; if (taTop < panelTop + 40 || taTop > panelTop + panelBn[0].clientHeight - 40) { panelBn[0].scrollTop += (taTop - panelTop - 120); } fnrMatch.text(toBengaliNum(fnrCurrent + 1) + ' / ' + toBengaliNum(fnrMatches.length) + 'টি মিল'); } fnrFind.on('input', fnrSearch); fnrFind.on('keydown', e => { if (e.key === 'Enter') { e.preventDefault(); fnrGoNext(); } }); fnrNext.on('click', fnrGoNext); fnrPrev.on('click', fnrGoPrev); function fnrGoNext() { if (!fnrMatches.length) { fnrSearch(); return; } fnrCurrent = (fnrCurrent + 1) % fnrMatches.length; fnrFocus(); } function fnrGoPrev() { if (!fnrMatches.length) return; fnrCurrent = (fnrCurrent - 1 + fnrMatches.length) % fnrMatches.length; fnrFocus(); } fnrReplace.on('click', () => { if (!fnrMatches.length || fnrCurrent < 0) { fnrSearch(); return; } const m = fnrMatches[fnrCurrent]; const repl = fnrRepl.val(); m.ta.value = m.ta.value.slice(0, m.start) + repl + m.ta.value.slice(m.end); $(m.ta).trigger('input'); fnrSearch(); }); fnrReplAll.on('click', () => { const needle = fnrFind.val(); const repl = fnrRepl.val(); if (!needle) return; let count = 0; const esc = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(esc + '(?![\\u09BC\\u09BE-\\u09CC\\u09CD])', 'g'); getAllTAs().forEach(ta => { const hits = (ta.value.match(regex) || []).length; if (hits) { count += hits; ta.value = ta.value.replace(regex, repl); $(ta).trigger('input'); } }); if (count) { fnrSearch(); mw.notify(toBengaliNum(count) + 'টি প্রতিস্থাপন করা হয়েছে।', { type: 'success' }); } }); /* Undo Redo */ undoBtn.on('click', () => { if (!activeTA || !undoStack.length) return; redoStack.push(activeTA.val()); activeTA.val(undoStack.pop()); activeTA.trigger('input'); }); redoBtn.on('click', () => { if (!activeTA || !redoStack.length) return; undoStack.push(activeTA.val()); activeTA.val(redoStack.pop()); activeTA.trigger('input'); }); function lockInputs() { bnInput.prop('readonly', true); enInput.prop('readonly', true); } function unlockInputs() { bnInput.prop('readonly', false); enInput.prop('readonly', false); } function setPhase(p) { phase = p; if (p === 'load') { mainBtn.text('লোড করুন').removeClass('success neutral').addClass('primary'); discardBtn.hide(); undoGroup.hide(); gridWrap.hide(); countBar.hide(); fnrBar.hide(); fnrToggle.hide(); scrollLockBtn.hide(); unlockInputs(); } else if (p === 'save') { mainBtn.text('সংরক্ষণ করুন').removeClass('primary neutral').addClass('success'); discardBtn.show(); undoGroup.show(); gridWrap.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } else if (p === 'back') { mainBtn.text('মূল পাতায় ফিরুন').removeClass('primary success').addClass('neutral'); discardBtn.show(); undoGroup.show(); fnrToggle.show(); scrollLockBtn.show(); lockInputs(); } } /* Build grid */ function buildGrid() { panelEn.empty(); panelBn.empty(); fnrClear(); activeTA = null; undoStack = []; redoStack = []; const isLead = s => s.heading === null; const isHeading = s => s.heading !== null; const enLeads = enSections.filter(isLead); const bnLeads = bnSections.filter(isLead); const enHeads = enSections.filter(isHeading); const bnHeads = bnSections.filter(isHeading); const displayPairs = []; const maxLeads = Math.max(enLeads.length, bnLeads.length); for (let i = 0; i < maxLeads; i++) displayPairs.push({ en: enLeads[i] || null, bn: bnLeads[i] || null }); const maxHeads = Math.max(enHeads.length, bnHeads.length); for (let i = 0; i < maxHeads; i++) displayPairs.push({ en: enHeads[i] || null, bn: bnHeads[i] || null }); bnSections = displayPairs.map(pair => { if (pair.bn) return pair.bn; return { heading: pair.en ? pair.en.heading : null, level: pair.en ? pair.en.level : 2, content: [], isPlaceholder: true // Flag to identify auto-generated blanks }; }); updateCountBar(bnSections, countBar); displayPairs.forEach((pair, i) => { const enSec = pair.en; const bnSec = bnSections[i]; const enText = enSec ? sectionToText(enSec) : ''; const bnText = sectionToText(bnSec); const num = toBengaliNum(i + 1); const enTitle = enSec ? (enSec.heading !== null ? enSec.heading : '(ভূমিকা)') : '(অনুপস্থিত)'; const bnTitle = bnSec.heading !== null ? bnSec.heading : (enSec && enSec.heading !== null ? enSec.heading + ' (অনুপস্থিত)' : '(ভূমিকা)'); const numBadge = () => $('<span>').addClass('sbs-sec-num').text(num); const enHdr = $('<div>').addClass('sbs-sec-hdr-en').append(numBadge(), document.createTextNode(' ' + enTitle)); const enCell = $('<div>').addClass('sbs-cell-en').text(enText); panelEn.append(enHdr, enCell); const bnHdr = $('<div>').addClass('sbs-sec-hdr-bn').append(numBadge(), document.createTextNode(' ' + bnTitle)); const bnCell = $('<div>').addClass('sbs-cell-bn'); const ta = $('<textarea>').val(bnText).attr('placeholder', 'অনুবাদ লিখুন...'); ta.on('focus', () => { if (activeTA && activeTA[0] !== ta[0]) { undoStack = []; redoStack = []; } activeTA = ta; }); ta.on('input', (function(idx) { return function() { resizeTA(ta[0]); undoStack.push(sectionToText(bnSections[idx])); redoStack = []; bnSections[idx].content = ta.val().split('\n'); updateCountBar(bnSections, countBar); if (fnrFind.val()) fnrSearch(); if (phase === 'back') setPhase('save'); }; })(i)); bnCell.append(ta); panelBn.append(bnHdr, bnCell); setTimeout(() => resizeTA(ta[0]), 0); }); } /* Wikidata auto-fetch */ if (originPage) { status.text('উইকিডেটা থেকে ইংরেজি শিরোনাম খোঁজা হচ্ছে...'); getEnTitle(originPage, api).then(t => { if (t) { enInput.val(t); status.text('ইংরেজি শিরোনাম পাওয়া গেছে।'); } else { status.text('উইকিডেটায় সংযোগ পাওয়া যায়নি। নিজে লিখুন।'); } }); } /* Discard */ discardBtn.on('click', () => { if (!confirm('পরিবর্তনগুলো বাতিল করবেন?')) return; bnSections = deepClone(baselineSections); buildGrid(); setPhase('back'); mw.notify('পরিবর্তন বাতিল করা হয়েছে।', { type: 'info' }); }); /* Main button */ mainBtn.on('click', async () => { const bnTitle = bnInput.val().trim(); const enTitle = enInput.val().trim(); if (phase === 'load') { if (!bnTitle || !enTitle) { status.text('দুটি শিরোনামই লিখুন।'); return; } try { mainBtn.prop('disabled', true).text('লোড হচ্ছে...'); status.text('নিবন্ধ লোড হচ্ছে...'); const [enWT, bnWT] = await Promise.all([ fetchWikitext(enTitle, true), fetchWikitext(bnTitle, false) ]); currentBnTitle = bnTitle; enSections = parseByHeadings(enWT); bnSections = parseByHeadings(bnWT); baselineSections = deepClone(bnSections); buildGrid(); setPhase('save'); status.text('লোড সম্পন্ন।'); } catch (e) { status.text('ত্রুটি: ' + e.message); } mainBtn.prop('disabled', false); } else if (phase === 'save') { mainBtn.prop('disabled', true).text('সংরক্ষণ করা হচ্ছে...'); try { await api.postWithToken('csrf', { action: 'edit', title: currentBnTitle, text: sectionsToWikitext(bnSections), summary: 'পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট)', minor: true }); baselineSections = deepClone(bnSections); setPhase('back'); status.text('সংরক্ষণ সম্পন্ন হয়েছে।'); mw.notify('সংরক্ষণ সম্পন্ন হয়েছে।', { type: 'success' }); } catch (e) { status.text('সংরক্ষণ ব্যর্থ: ' + e); mw.notify('সংরক্ষণ ব্যর্থ: ' + e, { type: 'error' }); } mainBtn.prop('disabled', false); } else if (phase === 'back') { const ret = originPage || currentBnTitle; if (ret) window.location.href = mw.util.getUrl(ret); } }); setPhase('load'); } $(document).ready(init); })(jQuery, mediaWiki); // </nowiki> ab94j05ial5y9cge0xrpb7el9952mpu Usuario discusión:Tgr (WMF) 0 171583 740326 724999 2026-05-03T10:59:27Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740326 wikitext text/x-wiki {{sust:Aviso traslado al taller|Test-sdofdsf|Test-sdofdsf|razón=}} [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 16:48, 25 January 2026 (UTC) == Aviso de solicitud de restauración del artículo [[Lincoln Lee]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[Lincoln Lee]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual#Solicitud de restauración de Lincoln Lee|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:59, 3 May 2026 (UTC) lwaaylpzp5kp11ulp4fja2xjpwe3jqe File:Trumpeter Swan at Akron Zoo 2.jpg 6 174480 740319 735562 2026-05-03T10:53:11Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740320 740319 2026-05-03T10:53:46Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740330 740320 2026-05-03T11:10:04Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740331 740330 2026-05-03T11:10:21Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740332 740331 2026-05-03T11:11:22Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740334 740332 2026-05-03T11:12:59Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 740338 740334 2026-05-03T11:23:00Z Kevin Payravi 37563 Kevin Payravi uploaded a new version of [[File:Trumpeter Swan at Akron Zoo 2.jpg]] 735249 wikitext text/x-wiki =={{int:filedesc}}== {{Information |description={{en|1=Testing swan}} |date=2009-09-07 |source={{own}} |author=[[User:Kevin Payravi]] |permission= |other versions= }} =={{int:license-header}}== {{self|cc-by-sa-4.0}} 4esx2k3934hxmd4j57pgy1o0d37fg82 Module:Eventyay schedule 828 175003 740242 739214 2026-05-03T06:36:14Z Robertsky 51025 740242 Scribunto text/plain local p = {} local DEFAULT_DATA_PAGE = 'User:Robertsky/ESEAPConf2026-scehdule.json' local ROOM_ORDER = { { key = 'Main room', label = 'Main room' }, { key = 'Room 1 - Workshop', label = 'Room 1 (Workshop)' }, { key = 'Room 2 - Women/Youth/ESEAP Hub', label = 'Room 2 (Women)' }, { key = 'Out of venue', label = 'Out of venue' }, } local function trim(s) if type(s) ~= 'string' then return s end return mw.text.trim(s) end local function isBlank(s) return s == nil or trim(s) == '' end local function esc(s) if s == nil then return '' end return tostring(s) end local function getArgs(frame) local args = {} for k, v in pairs(frame.args or {}) do args[k] = v end local parent = frame:getParent() if parent then for k, v in pairs(parent.args or {}) do if args[k] == nil or args[k] == '' then args[k] = v end end end return args end local function normalizeDayKey(day) if not day then return nil end day = mw.ustring.lower(tostring(trim(day))) if day == '1' or day == 'day-1' or day == 'day 1' then return '1' elseif day == '2' or day == 'day-2' or day == 'day 2' then return '2' elseif day == '3' or day == 'day-3' or day == 'day 3' then return '3' end return mw.ustring.match(day, '(%d+)') end local function splitDuration(duration) if isBlank(duration) then return nil, nil end local h, m = tostring(duration):match('^(%d%d):(%d%d)$') if not h then return nil, nil end return tonumber(h), tonumber(m) end local function splitTime(t) if isBlank(t) then return nil, nil end local h, m = tostring(t):match('^(%d%d):(%d%d)$') if not h then return nil, nil end return tonumber(h), tonumber(m) end local function timeToMinutes(t) local h, m = splitTime(t) if not h then return nil end return h * 60 + m end local function minutesToTime(total) total = total % (24 * 60) if total < 0 then total = total + (24 * 60) end local h = math.floor(total / 60) local m = total % 60 return string.format('%02d:%02d', h, m) end local function addMinutesToTime(startTime, minutes) local base = timeToMinutes(startTime) if not base then return '' end return minutesToTime(base + minutes) end local function durationToMinutes(duration) local h, m = splitDuration(duration) if not h then return nil end return h * 60 + m end local function addDuration(startTime, duration) local dm = durationToMinutes(duration) if not dm then return '' end return addMinutesToTime(startTime, dm) end local function formatTimeRange(startTime, endTime) if not isBlank(startTime) and not isBlank(endTime) then return startTime .. '–' .. endTime end if not isBlank(startTime) then return startTime end return '' end local function formatUtcRange(startTime, endTime) if isBlank(startTime) then return '' end local utcStart = addMinutesToTime(startTime, -8 * 60) local utcEnd = '' if not isBlank(endTime) then utcEnd = addMinutesToTime(endTime, -8 * 60) end if not isBlank(utcStart) and not isBlank(utcEnd) then return utcStart .. '–' .. utcEnd end return utcStart end local function buildTrackColorMap(data) local map = {} if data and data.conference and type(data.conference.tracks) == 'table' then for _, track in ipairs(data.conference.tracks) do if track.name and track.color then map[track.name] = track.color end end end return map end local function getSpeakers(event) if type(event.person_names) == 'table' and #event.person_names > 0 then return table.concat(event.person_names, ', ') end if type(event.persons) == 'table' and #event.persons > 0 then local names = {} for _, person in ipairs(event.persons) do if type(person) == 'table' and not isBlank(person.name) then table.insert(names, person.name) elseif type(person) == 'string' and not isBlank(person) then table.insert(names, person) end end return table.concat(names, ', ') end return '' end local function makeExternalLink(url, label) if isBlank(url) then return mw.text.nowiki(label or '') end return '[' .. tostring(url) .. ' ' .. mw.text.nowiki(label or url) .. ']' end local function makeEventCellWikitext(event, trackColorMap) local title = event.title or '(Untitled)' local track = event.track or '' local speakers = getSpeakers(event) local trackColor = '#999' if not isBlank(track) and trackColorMap and trackColorMap[track] then trackColor = trackColorMap[track] end local parts = {} if not isBlank(track) then table.insert( parts, string.format( '<span style="font-size: 12px;color: %s;">●<span style="color:#666;">%s</span></span>', trackColor, mw.text.nowiki(track) ) ) end local titleText = mw.text.nowiki(title) if not isBlank(event.url) then titleText = makeExternalLink(event.url, title) end table.insert(parts, '<b>' .. titleText .. '</b>') if not isBlank(speakers) then table.insert(parts, mw.text.nowiki(speakers)) end return table.concat(parts, '<br>') end local function loadDataPage(pageName) pageName = pageName or DEFAULT_DATA_PAGE local ok, data = pcall(mw.loadJsonData, pageName) if ok and type(data) == 'table' then return data end if mw.ext and mw.ext.data and mw.ext.data.get then local title = mw.ustring.gsub(pageName, '^Data:', '') local ok2, data2 = pcall(mw.ext.data.get, title) if ok2 and type(data2) == 'table' then return data2 end end error('Unable to load schedule data from ' .. tostring(pageName)) end local function getDayData(data, wantedDay) if type(data) ~= 'table' or type(data.days) ~= 'table' then return nil end local wanted = normalizeDayKey(wantedDay) for _, dayObj in ipairs(data.days) do local idx = normalizeDayKey(dayObj.index) local label = normalizeDayKey(dayObj.day_label) if wanted == idx or wanted == label then return dayObj end end return nil end local function collectRoomEvents(dayObj) local roomEvents = {} for _, roomDef in ipairs(ROOM_ORDER) do roomEvents[roomDef.key] = {} end if type(dayObj) ~= 'table' or type(dayObj.rooms) ~= 'table' then return roomEvents end for _, room in ipairs(dayObj.rooms) do local roomName = room.name or '' if roomEvents[roomName] and type(room.events) == 'table' then for _, event in ipairs(room.events) do local startMin = timeToMinutes(event.start) local endTime = addDuration(event.start, event.duration) local endMin = timeToMinutes(endTime) if startMin and endMin then local eventCopy = {} for k, v in pairs(event) do eventCopy[k] = v end eventCopy._startMin = startMin eventCopy._endMin = endMin eventCopy._endTime = endTime table.insert(roomEvents[roomName], eventCopy) end end end end for _, roomDef in ipairs(ROOM_ORDER) do table.sort(roomEvents[roomDef.key], function(a, b) if a._startMin == b._startMin then return tostring(a.id or '') < tostring(b.id or '') end return a._startMin < b._startMin end) end return roomEvents end local function collectBoundaries(roomEvents) local boundaries = {} local seen = {} for _, roomDef in ipairs(ROOM_ORDER) do local events = roomEvents[roomDef.key] or {} for _, event in ipairs(events) do if not seen[event._startMin] then seen[event._startMin] = true table.insert(boundaries, event._startMin) end if not seen[event._endMin] then seen[event._endMin] = true table.insert(boundaries, event._endMin) end end end table.sort(boundaries) return boundaries end local function countSegmentsCovered(boundaries, startMin, endMin) local count = 0 for i = 1, #boundaries - 1 do local segStart = boundaries[i] local segEnd = boundaries[i + 1] if segStart >= startMin and segEnd <= endMin then count = count + 1 end end return count end local function findStartingEvent(events, segmentStart) for _, event in ipairs(events) do if event._startMin == segmentStart then return event end end return nil end local function hasOngoingEvent(events, segmentStart) for _, event in ipairs(events) do if event._startMin < segmentStart and event._endMin > segmentStart then return true end end return false end local function buildRowspans(dayObj, trackColorMap) local roomEvents = collectRoomEvents(dayObj) local boundaries = collectBoundaries(roomEvents) local rows = {} if #boundaries < 2 then return rows end for i = 1, #boundaries - 1 do local segStart = boundaries[i] local segEnd = boundaries[i + 1] local row = { startMin = segStart, endMin = segEnd, local_time = formatTimeRange(minutesToTime(segStart), minutesToTime(segEnd)), utc_time = formatUtcRange(minutesToTime(segStart), minutesToTime(segEnd)), cells = {}, } for _, roomDef in ipairs(ROOM_ORDER) do local events = roomEvents[roomDef.key] or {} local startingEvent = findStartingEvent(events, segStart) if startingEvent then row.cells[roomDef.key] = { render = true, rowspan = countSegmentsCovered(boundaries, startingEvent._startMin, startingEvent._endMin), content = makeEventCellWikitext(startingEvent, trackColorMap), } elseif hasOngoingEvent(events, segStart) then row.cells[roomDef.key] = { render = false, } else row.cells[roomDef.key] = { render = true, rowspan = 1, content = '', } end end table.insert(rows, row) end return rows end local function renderPivotTable(dayObj, trackColorMap) local rows = buildRowspans(dayObj, trackColorMap) local root = mw.html.create('table') root:addClass('wikitable') root:css('width', '100%') local header = root:tag('tr') header:tag('th'):wikitext('Time (UTC+8)') for _, roomDef in ipairs(ROOM_ORDER) do header:tag('th'):wikitext(roomDef.label) end header:tag('th'):wikitext('Time (UTC)') if #rows == 0 then local tr = root:tag('tr') tr:tag('td') :attr('colspan', #ROOM_ORDER + 2) :wikitext("''No sessions found for this day.''") return tostring(root) end for _, row in ipairs(rows) do local tr = root:tag('tr') tr:tag('td'):wikitext(row.local_time) for _, roomDef in ipairs(ROOM_ORDER) do local cell = row.cells[roomDef.key] if cell and cell.render then local td = tr:tag('td') if cell.rowspan and cell.rowspan > 1 then td:attr('rowspan', cell.rowspan) end td:wikitext(cell.content or '') end end tr:tag('td'):wikitext(row.utc_time) end return tostring(root) end function p.day(frame) local args = getArgs(frame) local day = args.day or args[1] local dataPage = args.data or DEFAULT_DATA_PAGE if isBlank(day) then return '<strong class="error">Missing day parameter.</strong>' end local data = loadDataPage(dataPage) local dayObj = getDayData(data, day) if not dayObj then return '<strong class="error">No data found for day ' .. esc(day) .. '.</strong>' end local trackColorMap = buildTrackColorMap(data) local out = {} table.insert( out, "'''" .. esc((data.conference and data.conference.title) or 'Conference schedule') .. ' — Day ' .. esc(dayObj.index) .. "'''" ) if not isBlank(dayObj.date) then table.insert(out, '<div>' .. esc(dayObj.date) .. '</div>') end table.insert(out, renderPivotTable(dayObj, trackColorMap)) return table.concat(out, '\n') end function p.days(frame) local args = getArgs(frame) local dataPage = args.data or DEFAULT_DATA_PAGE local data = loadDataPage(dataPage) if type(data) ~= 'table' or type(data.days) ~= 'table' then return '<strong class="error">Invalid schedule data.</strong>' end local trackColorMap = buildTrackColorMap(data) local out = {} for _, dayObj in ipairs(data.days) do table.insert(out, '== Day ' .. esc(dayObj.index) .. ' ==') if not isBlank(dayObj.date) then table.insert(out, '<div>' .. esc(dayObj.date) .. '</div>') end table.insert(out, renderPivotTable(dayObj, trackColorMap)) end return table.concat(out, '\n') end function p.debug(frame) local args = getArgs(frame) local dataPage = args.data or DEFAULT_DATA_PAGE local data = loadDataPage(dataPage) return mw.text.jsonEncode(data) end return p 56pw6fi2umcc0n74bp1bw4xfq9uft4r Narcistic Personality Disorder (song) 0 175019 740153 739896 2026-05-02T14:51:58Z Cryptocurrency777 73698 740153 wikitext text/x-wiki {{Infobox song|Name=Narcisstic Personality Disorder|cover=Testnpd.jpeg|cover size=250px|Artist=Odetari|Album=XIII Sorrows|Released=April 1, 2023|Writer=Odetari}} '''Narcisstic Personality Disorder''' is a 2023 song by Odetari as the last single on XIII sorrows. It is named after the actual disorder It has xemnas from Kingdom hearts on the cover that's all guess mry10jy7p5vtbva7otwhe2itxstpxjb User:Sam Sailor/test.js/comrade-lib.js 2 175022 740142 740139 2026-05-02T12:24:21Z Sam Sailor 26820 Test 740142 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getWikitextDates = (text) => { const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i); if (match) return `(${match[1]}–${match[2]})`; const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; const containsDates = currentSD.includes('(') && currentSD.includes(')'); if (containsDates) return; let finalSD = currentSD; const words = currentSD.split(' '); if (words.length === 1 && !hasDate) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${currentSD} ${dateStr}`; } } else if (!hasDate) { finalSD = `${currentSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short Description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> rcj873igjwvnmzyagp5724m5si47oye 740143 740142 2026-05-02T12:47:37Z Sam Sailor 26820 Test 740143 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) { if (!currentSD.includes("(") || !currentSD.includes(")")) { return; } } const getWikitextDates = (text) => { const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i); if (match) return `(${match[1]}–${match[2]})`; const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; let finalSD = currentSD; const words = currentSD.split(' '); if (hasDate) { finalSD = currentSD.replace(/\s*\(\d{4}[–\-\–]\d{4}\)$/, ""); finalSD = `${finalSD} ${dateStr}`; } else if (words.length === 1) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${currentSD} ${dateStr}`; } } else { finalSD = `${currentSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short Description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Dates missing: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 3hct95aorsdzg29bgtvhlj1mjsotvf3 740144 740143 2026-05-02T12:58:02Z Sam Sailor 26820 Test 740144 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) { if (!currentSD.includes("(") || !currentSD.includes(")")) { return; } } // Attempt to parse the lead paragraph's definition from wikitext const getArticleLeadDefinition = (text) => { const lines = text.split('\n'); for (const line of lines) { // Ignore templates, infoboxes, and hidden meta-content if (line.trim().startsWith('|') || line.trim().startsWith('{') || line.trim().startsWith('!')) { continue; } // Look for the bolded subject and the string "was a" or "is a" const match = line.match(/'''(.*?)'''\s*(?:–|-|\(|\s)*.*?\s*(?:was|is)\s+a\s+(.+?)(?:\.|\()/i); if (match) { // Return the text between 'is/was a' and the punctuation return match[2].trim(); } } return null; }; const wikitextDef = getArticleLeadDefinition(wikitext); const getWikitextDates = (text) => { const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i); if (match) return `(${match[1]}–${match[2]})`; const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; let targetBase = currentSD; // If the existing short description doesn't contain a date, extract a definition from wikitext if (!hasDate && wikitextDef) { targetBase = wikitextDef; } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short Description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 7aapbjvsq2e6rzc00q3y96090birdqa 740145 740144 2026-05-02T13:09:18Z Sam Sailor 26820 Test 740145 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) { if (!currentSD.includes("(") || !currentSD.includes(")")) { return; } } const getArticleLeadDefinition = (text) => { const lines = text.split('\n'); for (const line of lines) { if (line.trim().startsWith('|') || line.trim().startsWith('{') || line.trim().startsWith('!')) { continue; } const match = line.match(/'''(.*?)'''\s*(?:–|-|\(|\s)*.*?\s*(?:was|is)\s+a\s+(.+?)(?:\.|\()/i); if (match) { let fullDefinition = match[2].trim(); const breakTokens = [',', ' and ', ' who', ' which']; for (const token of breakTokens) { if (fullDefinition.indexOf(token) !== -1) { fullDefinition = fullDefinition.split(token)[0].trim(); break; } } return fullDefinition; } } return null; }; const wikitextDef = getArticleLeadDefinition(wikitext); const getWikitextDates = (text) => { const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i) || text.match(/\(\s*born\s*(\d{1,2}\s+\w+\s+\d{4})\s*[–\–—]\s*(\d{1,2}\s+\w+\s+\d{4})\s*\)/i); if (match) { const firstYear = match[1].match(/\d{4}/); const secondYear = match[3] ? match[3].match(/\d{4}/) : match[2].match(/\d{4}/); if (firstYear && secondYear) { return `(${firstYear[0]}–${secondYear[0]})`; } } const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; let targetBase = currentSD.replace(/\s*\(.*?\)$/, "").trim(); if (!hasDate && wikitextDef) { targetBase = wikitextDef; } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short Description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> dy413z00v0r6j6ecbaswcvepf7n9mut 740146 740145 2026-05-02T13:21:46Z Sam Sailor 26820 Test 740146 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) { if (!currentSD.includes("(") || !currentSD.includes(")")) { return; } } const getWikitextDates = (text) => { const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i) || text.match(/\(\s*born\s*(\d{1,2}\s+\w+\s+\d{4})\s*[–\–—]\s*(\d{1,2}\s+\w+\s+\d{4})\s*\)/i); if (match) { const firstYear = match[1].match(/\d{4}/); const secondYear = match[3] ? match[3].match(/\d{4}/) : match[2].match(/\d{4}/); if (firstYear && secondYear) { return `(${firstYear[0]}–${secondYear[0]})`; } } const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\(.*?\)$/, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 8jxi7bsl94ryt4rn5zfyn2mdnesgc52 740147 740146 2026-05-02T13:31:34Z Sam Sailor 26820 Restored revision 740139 by [[Special:Contributions/Sam Sailor|Sam Sailor]] ([[User talk:Sam Sailor|talk]]): Test (TwinkleGlobal) 740147 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let finalSD = currentSD; const words = currentSD.split(' '); if (words.length === 1 && !hasDate) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${currentSD} ${dateStr}`; } } else if (!hasDate) { finalSD = `${currentSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short Description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> cj7281t7na53i76oavhh2k0ch8k0vhd 740148 740147 2026-05-02T13:38:13Z Sam Sailor 26820 Test 740148 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) { if (!currentSD.includes("(") || !currentSD.includes(")")) { return; } } const getWikitextDates = (text) => { const firstParaMatch = text.match(/'''(.*?)'''\s*\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/); if (firstParaMatch) { return `(${firstParaMatch[2]}–${firstParaMatch[3]})`; } const match = text.match(/\(\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*\)/) || text.match(/\(\s*born\s*(\d{4})\s*[–\–—]\s*(\d{4})\s*died\s*\)/i) || text.match(/\(\s*born\s*(\d{1,2}\s+\w+\s+\d{4})\s*[–\–—]\s*(\d{1,2}\s+\w+\s+\d{4})\s*\)/i); if (match) { const firstYear = match[1].match(/\d{4}/); const secondYear = match[3] ? match[3].match(/\d{4}/) : match[2].match(/\d{4}/); if (firstYear && secondYear) { return `(${firstYear[0]}–${secondYear[0]})`; } } const bornMatch = text.match(/\(\s*born\s*(\d{4})\s*\)/i); if (bornMatch) return `(born ${bornMatch[1]})`; const diedMatch = text.match(/\(\s*died\s*(\d{4})\s*\)/i); if (diedMatch) return `(died ${diedMatch[1]})`; return null; }; let dateStr = getWikitextDates(wikitext); if (!dateStr) { const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\(.*?\)$/, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> k00xgnjzovoqs7s3zm7jhdlnvfjiahm 740221 740148 2026-05-03T04:57:17Z Sam Sailor 26820 Test 740221 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\)$/, "").trim(); } const words = finalSD.split(' '); if (words.length === 1 && !hasDate) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${finalSD} ${dateStr}`; } } else if (!hasDate || finalSD === currentSD) { finalSD = `${finalSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> f739odqun6ba5yp9wgyppjgn0ivush9 740222 740221 2026-05-03T05:00:34Z Sam Sailor 26820 Test 740222 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]+\)$/, "").trim(); } const words = finalSD.split(' '); if (words.length === 1 && !hasDate) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${finalSD} ${dateStr}`; } } else if (!hasDate || finalSD === currentSD) { finalSD = `${finalSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> fit549izlx01uv44zvs3npjffwjlvv1 740223 740222 2026-05-03T05:03:18Z Sam Sailor 26820 Test 740223 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]+\)$/, "").trim(); } const words = finalSD.split(' '); if (words.length === 1 && !hasDate) { const occupationId = entity.claims?.P106?.[0]?.mainsnak?.datavalue?.value?.id; if (occupationId) { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); const occLabel = occRes.entities[occupationId]?.labels?.en?.value; if (occLabel) { finalSD = `${occLabel.charAt(0).toLowerCase() + occLabel.slice(1)} ${dateStr}`; } } else { finalSD = `${finalSD} ${dateStr}`; } } else { finalSD = `${finalSD} ${dateStr}`; } if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> iswz1jqxnivjzhloikx869pxvbrrpy5 740225 740223 2026-05-03T05:06:29Z Sam Sailor 26820 Test 740225 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); if (hasDate && currentSD.length > 15) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\(\d{4}[–\s\–\—]+\d{4}\)$/, "").trim(); targetBase = targetBase.replace(/\s*\(.*?\)$/, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> pdcai9wmkjzp2biiaaoy8j1nr8l567n 740228 740225 2026-05-03T05:15:25Z Sam Sailor 26820 Test 740228 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\(\d{4}[–\s\–\—]+\d{4}\)$/, "").trim(); targetBase = targetBase.replace(/\s*\(.*?\)$/, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> qgb6hsg6mfuitsgdbenk1xve1tg5915 740230 740228 2026-05-03T05:27:54Z Sam Sailor 26820 Test 740230 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\((?:born |died |fl\. )?\d{3,4}(?:\s*[–—-]\s*\d{3,4}|s)?\)\s*$/i, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> 1oxom7zavb42igvcvrrg1ixicje239h 740231 740230 2026-05-03T05:30:28Z Sam Sailor 26820 Test 740231 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(dateRegex, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> iav7n0b1doa8nt2mqhk9q8q2zs7mg77 740233 740231 2026-05-03T05:36:44Z Sam Sailor 26820 Test 740233 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; let targetBase = currentSD; if (hasDate) { targetBase = currentSD.replace(/\s*\((?:born |died |fl\. )?\d{3,4}(?:\s*[–—-]\s*\d{3,4})?(?:s)?\)$/i, "").trim(); } let finalSD = `${targetBase} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> 0c4mr6rf93n22nsihh1tk3tinhbvm1q 740236 740233 2026-05-03T05:51:43Z Sam Sailor 26820 Test 740236 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text('Dates missing: '), $('<code>').text(newSD)); const $btn = $('<button>').text('Update').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${newSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description: +dates/role per [[WP:SDFORMAT]]`, nocreate: true }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; //</nowiki> q9jwgan351ga5oz7pykn5vm37qal76k 740239 740236 2026-05-03T06:00:44Z Sam Sailor 26820 Test 740239 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 5ernzjseqyt4hmwslzwpd07szmehr8b 740243 740239 2026-05-03T07:53:04Z Sam Sailor 26820 Test 740243 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*[Ss]hort description\s*\|/.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const occupations = entity.claims?.P106; if (!occupations?.length) return; const occupationId = occupations[0].mainsnak?.datavalue?.value?.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch { return; } if (!occLabel) return; const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 7tp464bmlq267o7l7hwi7t1z4ghgd5m 740244 740243 2026-05-03T07:57:33Z Sam Sailor 26820 Test 740244 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*[Ss]hort description\s*\|/.test(wikitext); if (hasSD) return; const wdDesc = entity.descriptions?.en?.value; if (wdDesc) { ComradeLib.renderSDNudge("", wdDesc); return; } const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const occupations = entity.claims?.P106; if (!occupations?.length) return; const occupationId = occupations[0].mainsnak?.datavalue?.value?.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch { return; } if (!occLabel) return; const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> srxfa3kban5hu2pxmvqf1q20p11edlg 740245 740244 2026-05-03T08:08:47Z Sam Sailor 26820 Test 740245 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationId = occupations[0].mainsnak?.datavalue?.value?.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); return; } if (!occLabel) { console.log("No label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("FINAL SD:", newSD); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); content = content.replace(/(\{\{[Ss]hort description\|)[^|}]+/, `$1${updatedSD}`); await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> koz2rvdeh29jdsfmv56ip819u669qm1 740252 740245 2026-05-03T08:30:36Z Sam Sailor 26820 Test 740252 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { const wdDesc = entity.descriptions?.en?.value; if (wdDesc) { console.log("Fallback WD desc:", wdDesc); ComradeLib.renderSDNudge("", wdDesc); } else { console.log("No label and no WD description"); } return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 4zv8zo2jmmpebycj7l06icvfio5k40c 740274 740252 2026-05-03T09:04:43Z Sam Sailor 26820 Test 740274 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wdDesc = entity.descriptions?.en?.value; if (wdDesc && wdDesc.length > 10 && !/^(human|person)$/i.test(wdDesc)) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc} ${dateStr}` : wdDesc; ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> btla5jruua9wp8uuhoq4xkfs0qq4g57 740282 740274 2026-05-03T09:22:19Z Sam Sailor 26820 Test 740282 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wdDesc = entity.descriptions?.en?.value; if (wdDesc && !/^(human|person)$/i.test(wdDesc.trim())) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc.trim()} ${dateStr}` : wdDesc.trim(); ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> meqdq4p979dlpu2w9w30kkwjacd0nm9 740286 740282 2026-05-03T09:43:11Z Sam Sailor 26820 Test 740286 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wdDesc = entity.descriptions?.en?.value; if (wdDesc && wdDesc.length > 10 && !/^(human|person)$/i.test(wdDesc.trim())) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc.trim()} ${dateStr}` : wdDesc.trim(); ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 4e90bl2jtgw0mmsv6e2scnu4oa2hbgj 740294 740286 2026-05-03T09:58:14Z Sam Sailor 26820 Test 740294 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wikidataDescriptions = entity.descriptions || {}; const wdDesc = wikidataDescriptions.en ? wikidataDescriptions.en.value : ''; if (wdDesc && wdDesc.length > 10 && !/^(human|person)$/i.test(wdDesc.trim())) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc.trim()} ${dateStr}` : wdDesc.trim(); ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> 0yvw5numxf7epr4jimku9sehw9xy48j 740296 740294 2026-05-03T10:05:34Z Sam Sailor 26820 Test 740296 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wdDesc = entity.descriptions?.en?.value?.trim(); if (wdDesc && wdDesc.length > 10 && !/^(human|person)$/i.test(wdDesc.trim())) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc.trim()} ${dateStr}` : wdDesc.trim(); ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> fudpr64j4yanmseg6ho4a1mn2z9562c 740297 740296 2026-05-03T10:08:39Z Sam Sailor 26820 Test 740297 javascript text/javascript //<nowiki> /* global mw, $, ComradeLib */ /** * Comrade-Lib * Helper functions */ mw.util.addCSS(` .ambox-Orphan { display: block !important; } .comrade-container { box-shadow: 0 1px 3px rgba(0,0,0,0.1); border-radius: 2px; padding: 10px 15px; margin: 10px 0; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; border: 1px solid #a2a9b1; background: #fcfcfc; line-height: 1.5; } .comrade-header { display: flex; align-items: center; justify-content: space-between; width: 100%; } .comrade-content { display: flex; flex-direction: column; gap: 5px; width: 100%; } .comrade-success { background-color: #d5f5e3 !important; border-left: 5px solid #27ae60 !important; color: #1b5e20 !important; } .comrade-nudge { background: #fff9ea; border-left: 5px solid #f0ad4e; } .comrade-info, .comrade-status { background: #eaf3ff; border-left: 5px solid #36c; } .comrade-container button:not(.comrade-dismiss) { background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 2px; padding: 2px 10px; cursor: pointer; font-weight: bold; font-size: 0.95em; margin-left: 10px; } .comrade-container button:not(.comrade-dismiss):hover { border-color: #36c; color: #36c; background: #fff; } .comrade-dismiss { background: transparent; border: none; color: #d33; font-weight: bold; cursor: pointer; font-size: 0.9em; } .comrade-dismiss:hover { text-decoration: underline; } .comrade-code-block { background: #f1f1f1; padding: 4px 8px; border-radius: 3px; font-family: monospace; display: inline-block; margin-top: 4px; } `); window.ComradeLib = window.ComradeLib || {}; window.ComradeLib.api = new mw.Api(); window.ComradeLib.appendDismiss = function($el) { $('<button>').addClass('comrade-dismiss').text('Dismiss').on('click', function() { $(this).closest('.comrade-container').fadeOut(); }).appendTo($el.find('.comrade-header')); $("#siteSub").after($el); }; // Category audit window.ComradeLib.arrayChunk = function(arr, size) { const result = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; }; window.ComradeLib.fetchOresData = async function(revIds) { const scores = {}; const BATCH = 1; for (let i = 0; i < revIds.length; i += BATCH) { const rid = revIds[i]; try { const response = await fetch('https://api.wikimedia.org/service/lw/inference/v1/models/enwiki-articlequality:predict', { method: 'POST', body: JSON.stringify({ rev_id: parseInt(rid, 10) }) }); if (!response.ok) { console.warn(`Comrade: Lift Wing ${response.status} for rev ${rid}`); continue; } const data = await response.json(); const prediction = data?.enwiki?.scores?.[String(rid)]?.articlequality?.score?.prediction ?? data?.output?.prediction ?? null; if (prediction) scores[String(rid)] = prediction; } catch (e) { console.warn(`Comrade: Lift Wing fetch error for rev ${rid}`, e); } } return scores; }; window.ComradeLib.performCategoryAudit = async function() { let timerInterval; const api = new mw.Api(); const $links = $('#mw-pages li a').filter(function() { const title = $(this).attr('title') || ''; if (title.startsWith('Talk:') || title.startsWith('Template:')) { return false; } return true; }); const titles = $links.map((i, el) => $(el).attr('title')).get(); if (!titles.length) return; const $btn = $('#comrade-audit-btn'); const totalPages = titles.length; let remainingTime = Math.ceil((totalPages * 400) / 1000); $btn.prop('disabled', true).text(`Auditing (${remainingTime}s)...`); timerInterval = setInterval(() => { remainingTime -= 1; if (remainingTime > 0) { $btn.text(`Auditing (${remainingTime}s)...`); } else { clearInterval(timerInterval); } }, 1000); const chunks = ComradeLib.arrayChunk(titles, 25); const results = {}; try { for (const chunk of chunks) { const talkTitles = chunk.map(t => 'Talk:' + t); const res = await api.get({ action: 'query', titles: chunk.concat(talkTitles).join('|'), prop: 'revisions', rvprop: 'content|ids', rvslots: 'main', formatversion: 2 }); const pages = res.query.pages; const getContent = pg => { if (!pg || pg.missing || !pg.revisions) return ''; const rev = pg.revisions[0]; return rev.slots?.main?.content ?? rev.content ?? ''; }; const revIds = []; const titleToRevId = {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); if (mainPg?.revisions?.[0]?.revid) { const rid = String(mainPg.revisions[0].revid); revIds.push(rid); titleToRevId[title] = rid; } }); const oresScores = revIds.length ? await ComradeLib.fetchOresData(revIds) : {}; chunk.forEach(title => { const mainPg = pages.find(p => p.title.toLowerCase() === title.toLowerCase() && !p.missing); const talkPg = pages.find(p => p.title.toLowerCase() === ('talk:' + title).toLowerCase() && !p.missing); const talkContent = getContent(talkPg); const mainContent = getContent(mainPg); const classMatch = talkContent.match(/\|\s*class\s*=\s*([^|{}\n\r]+)/i); const rawClass = classMatch ? classMatch[1].trim() : ''; const talkClass = rawClass ? rawClass.charAt(0).toUpperCase() + rawClass.slice(1).toLowerCase() : 'Unrated'; const hasStubTags = /\{\{[^}]*stub[^}]*\}\}/i.test(mainContent); const rid = titleToRevId[title]; const predicted = rid ? (oresScores[rid] ?? null) : null; results[title] = { talkClass, predicted, hasStubTags }; }); } Object.entries(results).forEach(([title, { talkClass, predicted, hasStubTags }]) => { ComradeLib.renderCategoryAuditUI(title, talkClass, predicted, hasStubTags); }); clearInterval(timerInterval); $btn.text('Audit complete').prop('disabled', true); } catch (error) { clearInterval(timerInterval); console.error('Comrade: Audit error', error); $btn.text('Audit failed').prop('disabled', false); } }; window.ComradeLib.renderCategoryAuditUI = function(title, talkClass, predicted, hasStub) { const $link = $(`#mw-pages li a[title="${title}"]`).first(); if (!$link.length) { return; } let label = ""; let style = "font-size: 0.85em; margin-left: 3px; font-weight: normal;"; if (talkClass !== "Stub" && talkClass !== "Unrated" && hasStub) { label = `${talkClass} (stub tag present) : ${predicted || "?"}`; style += " color: #f0ad4e;"; } else if (talkClass === "Stub" && predicted && predicted !== "Stub") { label = `Stub : ${predicted}`; style += " color: #27ae60;"; } else if (predicted && predicted !== talkClass) { label = `${talkClass} : ${predicted}`; style += " color: #36c;"; } if (label) { const $parent = $link.parent(); $parent.find(".comrade-audit-label").remove(); const $span = $("<span>").addClass("comrade-audit-label").attr("style", style).text(` [${label}]`); $link.after($span); } }; // Category audit END // Deorphanizer // performDeorphan window.ComradeLib.performDeorphan = async function() { try { await ComradeLib.api.edit(mw.config.get('wgPageName'), function(rev) { let text = rev.content; const summary = 'Article has backlinks; removed [[Template:Orphan|{{Orphan}}]]'; text = text.replace(/\{\{Orphan\s*(?:\|[^}]*)?\}\}\s*/gi, ''); text = text.replace(/(\{\{Multiple[ _]issues\s*)\|\s*\|/gi, '$1|'); text = ComradeLib.replaceMI(text); text = text.replace(/\n{3,}/g, '\n\n').trim(); return { text, summary, minor: true }; }); mw.notify('Orphan tag removed!', { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to remove orphan tag.', { type: 'error' }); } }; // replaceMI (Multiple Issues) window.ComradeLib.replaceMI = function(text) { const miRegex = /\{\{Multiple[ _]issues\s*\|/gi; let result = ''; let lastIndex = 0; let match; while ((match = miRegex.exec(text)) !== null) { const start = match.index; result += text.slice(lastIndex, start); let depth = 0; let i = start; while (i < text.length) { if (text[i] === '{' && text[i + 1] === '{') { depth++; i += 2; } else if (text[i] === '}' && text[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } const end = i; const full = text.slice(start, end); const pipeIdx = full.indexOf('|'); const inner = full.slice(pipeIdx + 1, full.length - 2).trim(); const topLevel = ComradeLib.extractTopLevelTemplates(inner); if (topLevel.length === 0) { result += ''; } else if (topLevel.length === 1) { result += topLevel[0].trim(); } else { result += full; } lastIndex = end; } result += text.slice(lastIndex); return result; }; // extractTopLevelTemplates window.ComradeLib.extractTopLevelTemplates = function(inner) { const templates = []; let i = 0; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { let depth = 0; const start = i; while (i < inner.length) { if (inner[i] === '{' && inner[i + 1] === '{') { depth++; i += 2; } else if (inner[i] === '}' && inner[i + 1] === '}') { depth--; i += 2; if (depth === 0) break; } else { i++; } } templates.push(inner.slice(start, i)); } else { i++; } } return templates; }; // Lead capitalization window.ComradeLib.checkLeadCapitalization = function(currentTitle) { if (mw.config.get("wgNamespaceNumber") !== 0) return; const titleElement = document.querySelector("#mw-content-text > div > p:not([class]) b"); if (!titleElement) return; const leadTitle = titleElement.textContent.trim(); const articleTitle = currentTitle.trim(); if (leadTitle !== articleTitle && leadTitle.toLowerCase() === articleTitle.toLowerCase()) { ComradeLib.renderLeadCapitalizationNudge(titleElement, leadTitle, articleTitle); } }; window.ComradeLib.renderLeadCapitalizationNudge = function(element, leadTitle, articleTitle) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Lead Capitalization:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'row', 'align-items': 'center', 'flex-wrap': 'wrap', 'gap': '10px' }); $content.append($('<span>').text(`Lead title uses incorrect casing (${leadTitle}). Correct to `), $('<code>').text(articleTitle), '?'); const $btn = $('<button>').text('Fix lead casing').on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const escaped = leadTitle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const searchRegex = new RegExp(`'''${escaped}'''`, 'g'); content = content.replace(searchRegex, `'''${articleTitle}'''`); await api.postWithToken('csrf', { action: 'edit', title: title, text: content, summary: `Fix bold lead title capitalization per [[MOS:LEADTITLE]]`, nocreate: true }); mw.notify('Lead capitalization corrected!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update lead title capitalization.', { type: 'error' }); console.error(e); } }); $content.append($btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }; // Quality suite // getOresPrediction window.ComradeLib.getOresPrediction = async function() { const pageName = mw.config.get('wgPageName'); try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'ids', formatversion: 2 }); const page = pageData.query.pages[0]; const revId = page?.revisions?.[0]?.revid; if (!revId) return null; const scores = await ComradeLib.fetchOresData([String(revId)]); const pred = scores[String(revId)]; if (!pred) return null; return pred.charAt(0).toUpperCase() + pred.slice(1); } catch (e) { console.warn("Comrade: getOresPrediction failed to fetch via LiftWing", e); return null; } }; // checkQualityConsistency window.ComradeLib.checkQualityConsistency = async function() { const oresClass = await ComradeLib.getOresPrediction(); if (!oresClass || oresClass === 'Stub') return; const talkTitle = 'Talk:' + mw.config.get('wgPageName'); try { const [talkRes, pageRes] = await Promise.all([ ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkTitle, rvprop: 'content', formatversion: 2 }), ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }) ]); const talkPage = talkRes.query.pages[0]; const mainWikitext = pageRes.query.pages[0].revisions[0].content; const hasStubTag = /\{\{[^}|]*stub[^}]*\}\}/i.test(mainWikitext); let talkClass = null; if (!talkPage.missing && talkPage.revisions) { const classMatch = talkRes.query.pages[0].revisions[0].content.match(/\|\s*\n?\s*class\s*=\s*([^|}\s]+)/i); if (classMatch) { const rawClass = classMatch[1].trim().toLowerCase(); if (rawClass === 'ga') talkClass = 'Ga'; else if (rawClass === 'fa') talkClass = 'Fa'; else talkClass = rawClass.charAt(0).toUpperCase() + rawClass.slice(1); } } console.log("Comrade Quality Check ORES vs Talk:", oresClass, talkClass); const isStubRated = talkClass === 'Stub'; const isStartRated = talkClass === 'Start'; const needsPromotionNudge = (isStubRated && (oresClass === 'Start' || oresClass === 'C')) || (isStartRated && oresClass === 'C'); const needsHighQualNudge = (oresClass !== talkClass) && !needsPromotionNudge; const lingeringStub = (talkClass && !isStubRated && hasStubTag); if (oresClass.toLowerCase() === talkClass?.toLowerCase() && !lingeringStub) return; if (lingeringStub) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `Article is ${talkClass}-class, but stub tags remain. `; const $btnRemove = $('<button>').text('Remove stub tags').on('click', () => ComradeLib.performStubRemoval()); $content.append(message, $btnRemove); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (talkPage.missing || !talkClass) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = talkPage.missing ? `Talk page missing; ORES suggests <b>${oresClass}</b>. ` : `Talk page exists but is unassessed; ORES suggests <b>${oresClass}</b>. `; const $btnRater = $('<button>').text('Open Rater').on('click', () => $('#ca-rater, #t-rater').find('a')[0].click()); $content.append(message, $btnRater); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsPromotionNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES suggests <b>${oresClass}</b>. `; const $btnTarget = $('<button>').text(`Promote to ${oresClass}`).on('click', () => ComradeLib.performPromotion(oresClass)); $content.append(message, $btnTarget); if (isStubRated && oresClass === 'C') { const $btnStart = $('<button>').text(`Promote to Start`).on('click', () => ComradeLib.performPromotion('Start')); $content.append("\u00A0or\u00A0", $btnStart); } $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } else if (needsHighQualNudge) { const $container = $('<div>').addClass('comrade-container comrade-info'); const $content = $('<div>').append($('<strong>').text('Quality:'), " "); const message = `ORES predicts <b>${oresClass}</b>. Please assess manually. `; const $btnOkay = $('<button>').text('OK').on('click', () => { window.location.hash = "#content"; mw.notify("Review the criteria for " + oresClass + "-class."); $container.find('.comrade-dismiss').click(); }); $content.append(message, $btnOkay); $container.append($('<div>').addClass('comrade-header').append($content)); $('#content').prepend($container); ComradeLib.appendDismiss($container); } } catch (e) { console.error("Comrade quality check failed", e); } }; // performStubRemoval window.ComradeLib.performStubRemoval = async function() { try { const pageData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: mw.config.get("wgPageName"), rvprop: 'content', formatversion: 2 }); let wikitext = pageData.query.pages[0].revisions[0].content; // 'g' flag is appropriate here for replacement const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const newWikitext = wikitext.replace(stubRegex, '').trim(); if (wikitext === newWikitext) { mw.notify("No stub tags found to remove."); return; } await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: mw.config.get("wgPageName"), text: newWikitext, summary: `Removing lingering stub tags per ORES/Talk assessment`, nocreate: true }); location.reload(); } catch (err) { console.error("Comrade failed to remove stub tags:", err); mw.notify("Error removing stub tags.", { type: 'error' }); } }; // performPromotion window.ComradeLib.performPromotion = async function(newClass) { const classLinks = { 'Start': '[[WP:STARTCLASS|Start-Class]]', 'C': '[[WP:CCLASS|C-Class]]', 'B': '[[WP:BCLASS|B-Class]]' }; const linkedClass = classLinks[newClass] || newClass; const pageName = mw.config.get('wgPageName'); const talkName = 'Talk:' + pageName; try { const talkData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: talkName, rvprop: 'content', formatversion: 2 }); let talkWikitext = talkData.query.pages[0].revisions[0].content; const newTalkWikitext = talkWikitext.replace(/(\|class\s*=\s*)([^|}\s]+)/i, `$1${newClass}`); if (talkWikitext !== newTalkWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: talkName, text: newTalkWikitext, summary: `Promoting article to ${linkedClass} per review and [[WP:ORES]]` }); } const artData = await ComradeLib.api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }); let artWikitext = artData.query.pages[0].revisions[0].content; const stubRegex = /\{\{[^}|]*stub[^}]*\}\}\s*\n?/gi; const cleanArtWikitext = artWikitext.replace(stubRegex, ''); if (artWikitext !== cleanArtWikitext) { await ComradeLib.api.postWithToken('csrf', { action: 'edit', title: pageName, text: cleanArtWikitext, summary: `Removing stub tags; article promoted to ${linkedClass}`, nocreate: true }); } location.reload(); } catch (e) { console.error("Promotion failed:", e); mw.notify("Promotion failed during multi-step edit.", { type: 'error' }); } }; // Quality suite END // Redirects // checkAndRenderRedirect window.ComradeLib.checkAndRenderRedirect = async function(redirTitle, targetTitle, rCategory, labelText, customWikitext) { const res = await ComradeLib.api.get({ action: 'query', titles: redirTitle, formatversion: 2 }); if (res.query.pages[0].missing) { const safeId = "comrade-redir-" + redirTitle.replace(/[^a-z0-9]/gi, '-'); const $container = $('<div>').addClass('comrade-container comrade-info').attr('id', safeId); const $header = $('<div>').addClass('comrade-header'); const summary = `Creating redirect to [[${targetTitle}]] (${labelText.toLowerCase()})`; const $btn = $('<button>').text('Create redirect').on('click', () => ComradeLib.createModernRedirect(redirTitle, targetTitle, rCategory, summary, safeId, customWikitext)); $header.append($('<div>').append($('<strong>').text(`${labelText}: `), `Create redirect from `, $('<code>').text(redirTitle), $btn)); $container.append($header); ComradeLib.appendDismiss($container); } }; // createModernRedirect window.ComradeLib.createModernRedirect = async function(redirTitle, targetTitle, rCategory, customSummary, elementId, customWikitext) { const api = ComradeLib.api; const content = customWikitext || `#REDIRECT [[${targetTitle}]]\n\n{{Redirect category shell|\n{{${rCategory}}}\n}}`; const summary = customSummary || `Creating redirect to [[${targetTitle}]]`; try { await api.postWithEditToken({ action: 'edit', title: redirTitle, text: content, summary: summary, createonly: true }); mw.notify("Redirect created!", { type: 'success', tag: 'comrade', classes: ['comrade-success'] }); $(`#${elementId}`).fadeOut(); } catch (e) { mw.notify("Failed to create redirect.", { type: 'error' }); } }; // Domain name window.ComradeLib.checkDomainRedirect = async function(qid, currentTitle) { let domainCandidate = ""; if (qid) { try { const url = new URL("https://www.wikidata.org/w/api.php"); url.search = new URLSearchParams({ action: 'wbgetclaims', entity: qid, property: 'P856', format: 'json', origin: '*' }); const res = await fetch(url).then(r => r.json()); if (res.claims?.P856) { domainCandidate = res.claims.P856[0].mainsnak.datavalue.value; } } catch (e) { console.warn("Comrade: Wikidata API call failed."); } } if (!domainCandidate) { domainCandidate = $(".infobox .url a").last().attr("href") || $(".official-website a").first().attr("href"); } if (domainCandidate) { try { const url = new URL(domainCandidate); let domain = url.hostname.replace(/^www\d*\./, ""); if (domain.includes(".") && url.pathname === "/") { const citationURL = '/api/rest_v1/data/citation/mediawiki/' + encodeURIComponent(domainCandidate); try { const response = await fetch(citationURL); if (response.ok) { await ComradeLib.checkAndRenderRedirect(domain, currentTitle, "R from domain name", "Domain"); } } catch (e) { console.warn("Comrade: Citation API check failed."); } } } catch (e) { console.warn("Comrade: Error parsing URL object."); } } }; // Long name window.ComradeLib.getLongNameFromWikitext = function(wikitext) { const firstLine = wikitext.split('\n').find(l => l.includes("'''")); if (!firstLine) return null; const boldMatch = firstLine.match(/'''(.+?)'''/); if (!boldMatch) return null; return boldMatch[1].replace(/\s*([“"«《„‹「『'].+?[”"»》”›」』']|\([^)\n]*\))\s*/g, ' ').replace(/\s+/g, ' ').trim(); }; // Expanded normalization window.ComradeLib.getNormalizedTitles = function(currentTitle) { const maps = { all: { 'æ': 'ae', 'Æ': 'Ae', 'œ': 'oe', 'Œ': 'Oe', 'ij': 'ij', 'IJ': 'Ij', 'ß': 'ss', 'ẞ': 'SS', 'ð': 'd', 'Ð': 'D', 'ø': 'o', 'Ø': 'O', 'ł': 'l', 'Ł': 'L', 'þ': 'th', 'Þ': 'Th', 'ŋ': 'ng', 'Ŋ': 'Ng' } }; let cleanAscii = currentTitle.split('').map((char, index) => { let rep = maps.all[char]; if (rep) { return (index > 0 && rep.length > 1) ? rep.toLowerCase() : rep; } return char; }).join(''); cleanAscii = cleanAscii.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); return { ascii: (cleanAscii.toLowerCase() !== currentTitle.toLowerCase()) ? cleanAscii : null }; }; // Redirects END // SD window.ComradeLib.checkShortDescDates = async function(wikitext, entity) { const sdMatch = wikitext.match(/\{\{[Ss]hort description\|([^|{}]+)(?:\|[^}]*)?\}\}/); if (!sdMatch) return; const currentSD = sdMatch[1].trim(); const dateRegex = /\((?:born |died |fl\. )?\d{3,4}(?:–\d{3,4}|s)?\)/i; const hasDate = dateRegex.test(currentSD); const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1]); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } if (!dateStr) return; const normalizedSD = currentSD.replace(/\((\d{3,4})\s*[–—-]\s*(\d{3,4})\)/, "($1–$2)"); if (normalizedSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, normalizedSD); return; } let finalSD = currentSD; if (hasDate) { finalSD = currentSD.replace(/\s*\([^)]*\d{3,4}[^)]*\)\s*$/, "").trim(); } finalSD = `${finalSD} ${dateStr}`; if (finalSD !== currentSD) { ComradeLib.renderSDNudge(currentSD, finalSD); } }; window.ComradeLib.checkNoShortDesc = async function(wikitext, entity) { const hasSD = /\{\{\s*short description\b/i.test(wikitext); if (hasSD) return; const getYear = (val) => { if (!val || !val.time) return null; const yearMatch = val.time.match(/[+-](\d{4,})/); if (!yearMatch) return null; let year = parseInt(yearMatch[1], 10); if (val.time.startsWith('-')) return year + " BC"; if (val.precision === 8) return year + "s"; return year; }; let dateStr = ""; const bYear = getYear(entity.claims?.P569?.[0]?.mainsnak?.datavalue?.value); const dYear = getYear(entity.claims?.P570?.[0]?.mainsnak?.datavalue?.value); if (bYear && dYear) dateStr = `(${bYear}–${dYear})`; else if (bYear) dateStr = `(born ${bYear})`; else if (dYear) dateStr = `(died ${dYear})`; else { const flYear = getYear(entity.claims?.P1317?.[0]?.mainsnak?.datavalue?.value); if (flYear) dateStr = `(fl. ${flYear})`; } const wdDesc = entity.descriptions?.en?.value?.trim(); if (wdDesc && !/^(human|person)$/i.test(wdDesc)) { console.log("Using WD desc:", wdDesc); const newWdSD = dateStr ? `${wdDesc} ${dateStr}` : wdDesc; ComradeLib.renderSDNudge("", newWdSD); return; } const occupations = entity.claims?.P106; if (!occupations?.length) { console.log("No occupations"); return; } const occupationClaim = occupations.find(c => c.mainsnak?.snaktype === "value"); if (!occupationClaim) { console.log("No valid occupation claim"); return; } const occupationId = occupationClaim.mainsnak.datavalue.value.id; if (!occupationId) return; let occLabel; try { const occRes = await fetch(`https://www.wikidata.org/w/api.php?action=wbgetentities&ids=${occupationId}&props=labels&languages=en&format=json&origin=*`).then(r => r.json()); occLabel = occRes.entities[occupationId]?.labels?.en?.value; } catch (e) { console.log("Fetch failed", e); } if (!occLabel) { console.log("No occupation label found"); return; } const newSD = dateStr ? `${occLabel} ${dateStr}` : occLabel; console.log("Calling renderSDNudge for occupation"); ComradeLib.renderSDNudge("", newSD); }; window.ComradeLib.renderSDNudge = function(oldSD, newSD) { const $container = $('<div>').addClass('comrade-container comrade-nudge'); const $header = $('<div>').addClass('comrade-header').append($('<strong>').text('Short description:')); const $content = $('<div>').addClass('comrade-content').css({ 'flex-direction': 'column', 'align-items': 'flex-start', 'gap': '10px', 'padding': '10px' }); const $msgSpan = $('<span>').text(`Suggested description update: `); mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions']).then(function() { const descriptionInput = new OO.ui.TextInputWidget({ value: newSD, classes: ['comrade-input'], id: 'sdh-descriptionbox', style: { width: '400px' } }); const $btn = $('<button>').text('Update').css({ 'margin-top': '5px', 'margin-left': '0' }).on('click', async function() { const api = new mw.Api(); try { const title = mw.config.get("wgPageName"); const res = await api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }); let content = res.query.pages[0].revisions[0].content; const updatedSD = descriptionInput.getValue(); if (/\{\{\s*[Ss]hort description\b/.test(content)) { content = content.replace(/(\{\{\s*[Ss]hort description\s*\|)[^|}]+/, `$1${updatedSD}`); } else { content = `{{Short description|${updatedSD}}}\n` + content; } await api.postWithEditToken({ action: 'edit', title: title, text: content, summary: `Updating short description per [[WP:SDFORMAT]]`, nocreate: true, minor: false }); mw.notify('Short description updated!'); setTimeout(() => location.reload(), 700); } catch (e) { mw.notify('Failed to update SD.', { type: 'error' }); } }); $content.append($msgSpan, descriptionInput.$element, $btn); $container.append($header, $content); ComradeLib.appendDismiss($container); }); }; //</nowiki> f27vqjk8dg0kln0var5enog2wcora12 Grevel 0 175063 740266 739849 2026-05-03T08:59:01Z Agamya SamueI 72130 Adding contest categories (via WikiContest submission) 740266 wikitext text/x-wiki {{Begriffsklärungshinweis}} {{Infobox Ortsteil einer Gemeinde in Deutschland | Ortsteil = Grevel | Gemeindeart = Stadt | Gemeindename = Dortmund | Alternativanzeige-Gemeindename = | Ortswappen = | Breitengrad = 51.565 | Längengrad = 7.550 | Bundesland = Nordrhein-Westfalen | Höhe-Präfix = ca. | Höhe = 90 <!--www.tim-online.nrw.de--> | Höhe-Bezug = NHN | Fläche = 4.33 | Einwohner = 633 | Einwohner-Stand-Datum = 2013-12-31 | Eingemeindungsdatum = 1928-04-01 | Postleitzahl1 = 44329 | Postleitzahl2 = | Vorwahl1 = 0231 {{!}}- class="hintergrundfarbe1" {{!}} [[Statistischer Bezirk|Unterbezirk]]: {{!}} 221 | Lagekarte = | Lagekarte-Beschreibung = }} '''Grevel''' ([[niederdeutsch]]: Griëwel<ref>Wilhelm Schleef: ''Dortmunder Wörterbuch.'' 1967. XXII, 298 S. Ln. ([https://www.lwl.org/komuna/pdf/Bd_15.pdf lwl.org] PDF; 3,9 MB).</ref>) ist ein dorfähnlicher Stadtteil im [[Dortmund]]er Nordosten und gehört zum [[Stadtbezirk Scharnhorst]]. == Geschichte == Grevel wurde erstmals im Jahre 1193 mit ''curtes Marsuelde et Greuele et Wande'' urkundlich erwähnt. In den Jahren 1197 bis 1305 wird der Ort urkundlich ''Griuele, Greuilo, Greuele'' oder ''Grevele'' genannt. 1281 bis 1313 wurde ein ''Theodericus [[Ritter|miles]] dictus Vridach curtim in Grevele'' mit dem Ort [[Lehnswesen|belehnt]] sowie weitere Mitglieder der [[Adel]]sfamilie [[Frydag (Adelsgeschlecht)|von Frydag]] mit Grevel von 1317 bis 1400 belehnt. 1380 wird ein ''Thilemannus de Grevele'' im Dortmunder Urkundenbuch genannt. Im Jahr 1398 ein ''Johannes Grivel'' im [[Volmestein|Volmarsteiner]] Lehnsregister geführt. Grevel gehörte im [[Spätmittelalter]] und der [[Frühe Neuzeit|Frühen Neuzeit]] in eigener [[Bauerschaft]] (''Grevelkuylre'') im [[Kirchspiel]] [[Kurl]] und Amt Unna (historisch) zur [[Grafschaft Mark]]. Laut dem [[Schatzbuch der Grafschaft Mark]] von 1486 hatten in der Bauerschaft 22 Steuerpflichtige Hofbesitzer zwischen 1 oirt und 6 [[Rheinischer Gulden|Goldgulden]] an Abgabe zu leisten.<ref>[[Aloys Meister]]: ''Die Grafschaft Mark'', Festschrift zum Gedächtnis der 300-jährigen Vereinigung mit Brandenburg-Preußen. 2. Band, Dortmund 1909, S.&nbsp;22 – Auszug aus dem Schatzbuch der Grafschaft Mark von 1486 (Bauerschaft Grevel/Kurl)</ref> Im Jahr 1705 waren in der ''Baurschafft Grevel'' 18 Steuerpflichtige mit Abgaben an die Rentei Unna im [[Kataster]] verzeichnet.<ref>''Westfälisches Schatzungs- und Steuerregister'', Band 6, Münster 1980. Darin: ''Kataster der Kontribuablen Güter in der Grafschaft Mark 1705'', Bearb. von Willy Timm, S.&nbsp;75</ref> Die Deutung des Ortsnamens bleibt unklar. Es ist mit einer Motivation durch eine Gegebenheit des Geländes, etwa einen Graben oder eine Grube, zu rechnen, die möglicherweise nicht mehr existiert.<ref>Michael Flöer: ''Die Ortsnamen der Stadt Dortmund und der Stadt Hagen'', in: Westfälisches Ortsnamenbuch, Band 16, Bielefeld 2021, S.&nbsp;105–108</ref> Im 19. Jahrhundert war Grevel eine Landgemeinde im [[Landkreis Dortmund]] und [[Amt Brackel]]. 1885 hatte die Gemeinde (plus 4 [[Wohnplatz|Wohnplätze]]) eine Fläche von 4,33 km², davon 241 [[Hektar|ha]] Ackerland, 19 ha Wiesen und 76 ha Holzungen. Es gab 53 Wohngebäude mit 67 Haushaltungen und 378 Einwohner.<ref>Gemeindelexikon für die Provinz Westfalen. Berlin 1887, S.&nbsp;80/81, Online-Ausgabe Münster, Universitäts- und Landesbibliothek 2014</ref> Grevel wurde am 1. April 1928 nach Dortmund eingemeindet.<ref>{{BibISBN|3402058758|Seite=237}}</ref> Der heutige Stadtteil Grevel ist dünn besiedelt und besitzt mit seiner Vielzahl an Bauernhöfen einen ländlichen Charakter. Zu den Sehenswürdigkeiten des kleinen Ortes zählen der [[Wasserturm]] ''[[Lanstroper Ei]]'' und der [[Luftschacht Rote Fuhr]] im Rahmen der [[Route der Industriekultur]] sowie die [[Alte Mühle Grevel|Alte Mühle]]. Zu Grevel gehört auch der Hienberg, der sich an die [[Deponie]] Nord-Ost anschließt. Die südlich anschließende Großsiedlung [[Scharnhorst-Ost]] entstand ab 1965 auf einem Areal, das bei Baubeginn noch zum Stadtteil Grevel gehörte, dann aber dem 1931 gebildeten Stadtteil Scharnhorst ([[Alt-Scharnhorst]]) zugeschlagen wurde. Grevel verlor durch die Großsiedlung zwar fast die Hälfte seiner Fläche, behielt durch die Abtretung jedoch seine ländliche Prägung. Im Gegensatz zu den meisten Dortmunder Stadtteilen stehen in Grevel noch eine hohe Anzahl an sehenswerten Fachwerkhäusern, und der Ort hat besonders an der ''Greveler Straße'' und dem ''Werzenkamp'' seinen dörflichen Charakter erhalten. == Bevölkerung == {{PanoViewer|Grevel Panorama 360.jpg|Grevel 360° Panorama}} Sozialstruktur der Greveler Bevölkerung: * Bevölkerungsdichte: 76 Einwohner pro [[Hektar]] Siedlungsfläche. * Minderjährigenquote: 17,7 %, leicht unterhalb des Dortmunder Durchschnittes. * Altenquote: 31,9 %, leicht oberhalb des Dortmunder Durchschnittes. * Ausländeranteil: 1,1 %, einer der niedrigsten Dortmunder Werte. * Arbeitslosenquote: 7,4 %, deutlich unterhalb des Dortmunder Durchschnittes. Das durchschnittliche Einkommen liegt etwa 20 % oberhalb des Dortmunder Durchschnittes. {| class="wikitable" style="text-align:center;" |+ Bevölkerungsentwicklung |- ! style="text-align:left;"| '''Jahr'''|| 2003|| 2008|| 2009|| 2013 |- |style="text-align:left;"| '''Einwohner'''|| 632|| 633|| 632|| 633<ref>{{Internetquelle|url=https://www.dortmund.de/media/p/statistik_3/statistik/veroeffentlichungen/jahresberichte/Statistikatlas_2015.pdf#page=15|titel=Statistikatlas 2015|hrsg=Stadt Dortmund – Stabsstelle Dortmunder Statistik|seiten=15|datum=2015-07|format=PDF; 24,2&nbsp;MB|offline=1|archiv-url=https://web.archive.org/web/20160914110041/https://www.dortmund.de/media/p/statistik_3/statistik/veroeffentlichungen/jahresberichte/Statistikatlas_2015.pdf#page=15|archiv-datum=2016-09-14|archiv-bot=2019-09-08 08:17:30 InternetArchiveBot|abruf=2016-06-29}}</ref> |} <gallery> Hienberg.jpg|Der Hienberg von [[Lanstrop]] aus gesehen Lei5.jpg|Der Wasserturm ''[[Lanstroper Ei]]'' BlickDerne.jpg|Blick vom Hienberg auf [[Derne]] und die [[Zeche Gneisenau]] Dortmund-Scharnhorst, Luftschacht Rote Fuhr, Totale.jpg|Der Luftschacht ''Rote Fuhr'' DSW405Grevel.jpg|Stadtbahn an der Endstation Grevel </gallery> == Verkehr == Grevel ist der nördliche Endpunkt der Linie U42 der [[Stadtbahn Dortmund]]. Sie verbindet Grevel alle zehn Minuten mit [[Scharnhorst-Ost|Scharnhorst]], [[Kirchderne]], [[Eving]], [[City (Dortmund)|Innenstadt]] und den südlichen Stadtteilen [[Barop]] und [[Hombruch]]. Am U-Bahnhof Grevel besteht ein Übergang zur Buslinie 423 nach [[Lanstrop]]. Es ist auch geplant, die U42 nach Lanstrop zu verlängern, um diesen Ort besser an die Innenstadt anzubinden. Dies soll aber erst langfristig umgesetzt werden. {| class="wikitable" |- class="hintergrundfarbe6" ! Linie ! Verlauf ! Takt {{Linienverlauf SPNV Rhein-Ruhr|U42}} |} Über die Anschlussstelle „Dortmund-Lanstrop“ ist Grevel an die [[Bundesautobahn 2]] und damit an das Fernstraßennetz angeschlossen, allerdings nur in Richtung Hannover. == Einzelnachweise == <references /> {{Navigationsleiste Stadtteile von Dortmund}} {{Normdaten|TYP=g|GND=4402970-6|VIAF=236097878}} [[Kategorie:Unterbezirk von Dortmund]] [[Kategorie:Ehemalige Gemeinde (Dortmund)]] [[Kategorie:Gemeindeauflösung 1928]] [[Kategorie:Ersterwähnung 1193]] [[Category:2026_disasters_in_Indonesia]] p5x4o9z9tphgx6b28sl2mo45s2mvtjn DaniDV 0 175071 740215 740000 2026-05-02T22:53:29Z Cryptocurrency777 73698 740215 wikitext text/x-wiki ''{{InfoboxTest|DaniDV|image=TestDaniDV.jpg|alias=Darkphobia|years active=2024+|agent=-}}'' '''DaniDV''' (also known as Darkphobia), is a producer who made a song called ''[[Decay (song)|Decay]]''. He is known for EDM music. huh {{Did you mean/box}} {{Welcome-copyright}} [[Category:Living people]] aqbftfkqu0pgcvt2ona5kcki176x87n Anna Kournikova 0 175078 740212 739974 2026-05-02T22:52:33Z Cryptocurrency777 73698 740212 wikitext text/x-wiki {{Infobox person |name = Anna Kournikova |image = Anna Kournikova-Bagram Airfield 2009.jpg |caption = Kournikova at [[Bagram Air Base]] during a 2009 [[United Service Organization|USO]] tour |native_name = {{nobold|Анна Курникова}} |native_name_lang = ru |birth_date = {{birth date and age|df=y|1981|06|07}} |birth_place = Moscow, [[Russian Soviet Federative Socialist Republic|Russian SFSR]], Soviet Union |height = {{convert|1.73|m|ftin|abbr=on}} |partner = [[Enrique Iglesias]] (2001–present) |module = {{Infobox tennis biography | embed=yes |fullname = |country = Russia |turnedpro = October 1995 |retired = May 2003 |plays = Right-handed (two-handed backhand) |careerprizemoney = US$3,584,662 |singlesrecord = {{tennis record|won=209|lost=129}} |singlestitles = 0 |highestsinglesranking = No. 8 (20 November 2000) |AustralianOpenresult = QF ([[2001 Australian Open – Women's singles|2001]]) |FrenchOpenresult = 4R ([[1998 French Open – Women's singles|1998]], [[1999 French Open – Women's singles|1999]]) |Wimbledonresult = SF ([[1997 Wimbledon Championships – Women's singles|1997]]) |USOpenresult = 4R ([[1996 US Open – Women's singles|1996]], [[1998 US Open – Women's singles|1998]]) |Othertournaments = yes |WTAChampionshipsresult = SF ([[2000 WTA Tour Championships|2000]]) |Olympicsresult = 1R ([[Tennis at the 1996 Summer Olympics – Women's singles|1996]]) |doublesrecord = 200–71 |doublestitles = 16 |highestdoublesranking = [[List of WTA number 1 ranked doubles tennis players|No. '''1''']] (22 November 1999) |AustralianOpenDoublesresult = '''W''' ([[1999 Australian Open – Women's doubles|1999]], [[2002 Australian Open – Women's doubles|2002]]) |FrenchOpenDoublesresult = F ([[1999 French Open – Women's doubles|1999]]) |WimbledonDoublesresult = SF ([[2000 Wimbledon Championships – Women's doubles|2000]], [[2002 Wimbledon Championships – Women's doubles|2002]]) |USOpenDoublesresult = QF ([[1996 US Open – Women's doubles|1996]], [[2002 US Open – Women's doubles|2002]]) |OthertournamentsDoubles = yes |WTAChampionshipsDoublesresult = '''W''' ([[1999 WTA Tour Championships – Doubles|1999]], [[2000 WTA Tour Championships – Doubles|2000]]) |Mixed = yes |mixedrecord = 24–14 |mixedtitles = |AustralianOpenMixedresult = SF ([[1997 Australian Open – Mixed doubles|1997]], [[2000 Australian Open – Mixed doubles|2000]]) |FrenchOpenMixedresult = QF ([[1997 French Open – Mixed doubles|1997]]) |WimbledonMixedresult = F ([[1999 Wimbledon Championships – Mixed doubles|1999]]) |USOpenMixedresult = F ([[2000 US Open – Mixed doubles|2000]]) }} }} '''Anna Sergeyevna Kournikova Iglesias''' ({{nee|'''Kournikova'''}}; {{langx|ru|Анна Сергеевна Курникова}}; {{IPA|ru|ˈanːə sʲɪrˈɡʲejɪvnə ˈkurnʲɪkəvə|lang|Anna_kournikova.ogg}}; born 7 June 1981) is a Russian model and television personality, and former professional tennis player. Her appearance <!-- Per WP:NPOV, do not label her appearance as "beauty" or anything else --> and celebrity status made her one of the best known tennis stars worldwide. At the peak of her fame, fans looking for images of Kournikova made her name one of the most common search strings on [[Google Search]].<ref name=2001EOY>{{cite web|url=http://www.google.com/press/zeitgeist2001.html|title=2001 Year-End Google Zeitgeist: Search patterns, trends, and surprises|access-date=8 July 2009}}</ref><ref name=2002EOY>{{cite web|url=http://www.google.com/press/zeitgeist2002.html|title=2002 Year-End Google Zeitgeist: Search patterns, trends, and surprises|access-date=8 July 2009}}</ref><ref name=2003EOY>{{cite web|url=http://www.google.com/intl/en/press/zeitgeist2003.html|title=2003 Year-End Google Zeitgeist: Search patterns, trends, and surprises|access-date=9 July 2009}}</ref> [[Category:Living people]] n7eaw9jk35v1zesqkpicxyabmwc514c Yak 0 175088 740150 740010 2026-05-02T14:39:22Z Cryptocurrency777 73698 740150 wikitext text/x-wiki {{featured article}} A domestic bovine animal ...................... [[File:Yak in Khövsgöl 01.jpg|thumb]] k2ulzpd24clwixs301yht3ktla6it95 Wikipedia:Requests/Permissions/Namoroka 4 175096 740281 740050 2026-05-03T09:18:03Z EPIC 44279 done 740281 wikitext text/x-wiki {{Request-done|1=[[User:EPIC|EPIC]] ([[User talk:EPIC|talk]]) 09:18, 3 May 2026 (UTC)|2=Seems reasonable, IA on a production wiki. Granted for 3 months to begin, please re-apply if still needed in the future.}} === [[User:Namoroka|Namoroka]] === * {{User3|Namoroka}}, [[Special:CentralAuth/Namoroka|global contribs]] 17:47, 1 May 2026 (UTC) * '''Motive for request:''' <!-- Important! Please include a good motive for your request here. --> To test changes to gadgets * '''Requested rights:''' <!-- Please include the rights requested (example: Administrator, Bureaucrat, etc.) --> Interface administrator * '''Comments:''' <!-- Comments of other users -->Hi, I'm an admin and interface administrator on kowikisource, and I want to test some gadgets before they go live. <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ {{Request closed}} pjwmi6s3z7nt01y9fx8n22s2jyuapui Halsey 0 175097 740213 740120 2026-05-02T22:52:48Z Cryptocurrency777 73698 740213 wikitext text/x-wiki [[G-Eazy]] ex [[Category:Living people]] ooryvi63st0thquubclb4u4b327ux8w User talk:CGoubert-WMF 3 175105 740141 2026-05-02T12:23:16Z CGoubert-WMF 57230 Created page with "This is a test message, the quick brown fox blah blah" 740141 wikitext text/x-wiki This is a test message, the quick brown fox blah blah 4flalbwu8elcc705pbox2api07kbk4n Talk:TESTTESTTEST 1 175106 740149 2026-05-02T14:02:05Z ~2026-26797-55 73782 /* Hindi */ new section 740149 wikitext text/x-wiki == Hindi == Md ASIF [[Special:Contributions/&#126;2026-26797-55|&#126;2026-26797-55]] ([[User talk:&#126;2026-26797-55|talk]]) 14:02, 2 May 2026 (UTC) nnenhevge5azxdvvk0jmxy3kbf3gwpr .DB 0 175107 740151 2026-05-02T14:44:52Z Cryptocurrency777 73698 Created page with ".db is a file extension used for Database files on Microsoft Windows computers. Most .db files are usually built using SQLite and they store data in tables. .db files are often important and one is advised not to delete random ones from their folder." 740151 wikitext text/x-wiki .db is a file extension used for Database files on Microsoft Windows computers. Most .db files are usually built using SQLite and they store data in tables. .db files are often important and one is advised not to delete random ones from their folder. jleaamn7pt4xx96k56lzbu7ldkd5qk9 File:Testnpd.jpeg 6 175108 740152 2026-05-02T14:49:47Z Cryptocurrency777 73698 image not mine. under fair use and the copyright is held by Odetari and the Artist Partner Group (APG) 740152 wikitext text/x-wiki == Summary == image not mine. under fair use and the copyright is held by Odetari and the Artist Partner Group (APG) == Licensing == {{Fair use}} sfujgo4oya960z9vk0koquemztj523g Bussin 0 175109 740154 2026-05-02T15:10:25Z Cryptocurrency777 73698 Created page with "{{Infobox song|Name=Bussin|Type=Single|Artist=Moneybagg Yo and Rob49|Album=Speak Now|Released=March 2024|Label=CMG|Producer=* Wheezy * Tay Kieth}} '''Bussin''' is a song by Moneybagg Yo and Rob49. It was released in March 2024." 740154 wikitext text/x-wiki {{Infobox song|Name=Bussin|Type=Single|Artist=Moneybagg Yo and Rob49|Album=Speak Now|Released=March 2024|Label=CMG|Producer=* Wheezy * Tay Kieth}} '''Bussin''' is a song by Moneybagg Yo and Rob49. It was released in March 2024. kfnjzqw8veckovjq4yw62m1zran1z09 Whitewater 0 175110 740155 2026-05-02T15:18:35Z Cryptocurrency777 73698 Created page with "[[File:ll.jpg|250px]] Unstable currents and rapids in water, making it appear white" 740155 wikitext text/x-wiki [[File:ll.jpg|250px]] Unstable currents and rapids in water, making it appear white 6dozge425o193zdq7it3j9bvox63s14 740156 740155 2026-05-02T15:19:23Z Cryptocurrency777 73698 740156 wikitext text/x-wiki Unstable currents and rapids in water, making it appear white [[File:ll.jpg|250px]] ko86lj91mxm45wijapqovlx83luvbw0 Test.SideBySide 0 175111 740158 2026-05-02T16:37:49Z কমলেশ মন্ডল 72403 Created page with "== সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন..." 740158 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে। লেখিকার মতে রনের জন্মদিন ১লা মার্চ ১৯৮০। হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। ইউনিকর্ন পবিত্রতা, পুণ্য এবং মন ও শারীরিক শক্তির প্রতীক। যদিও জাদুদণ্ড সাধারণত সেই জাদুকরের জন্য কম কার্যকর হয় যাকে দণ্ডটি নিজে "বেছে নেয়নি" অথবা যে লড়াই করে এটি ছিনিয়ে নেয়নি। তবে ঘনিষ্ঠ রক্ত সম্পর্কের আত্মীয়ের (এক্ষেত্রে রন) কাছে উপহার হিসেবে আসা কাঠি সম্ভবত তার নতুন মালিকের প্রতি আনুগত্য প্রকাশ করে। কাঠিটি চার্লির জন্য আরও ভালো কাজ করত কিনা তা কখনোই জানা যায়নি। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। তার নতুন উইলো দণ্ডটি অবশ্য তার জন্ম তারিখকে প্রতিফলিত করে না। bmvthowgne98khex22mr8a3nh3dvipn 740159 740158 2026-05-02T16:42:43Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740159 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে। লেখিকার মতে রনের জন্মদিন ১লা মার্চ ১৯৮০। হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। nbe0tdmtfgdl5fuvejkw9fwea42po4p 740162 740159 2026-05-02T17:19:16Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740162 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। ihn71hdieta7l90eiraove49suq1vzz 740226 740162 2026-05-03T05:08:15Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740226 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == === [[Muggles' Guide to Harry Potter/Books/Philosopher's Stone|Philosopher's Stone]] === === [[Muggles' Guide to Harry Potter/Books/Chamber of Secrets|Chamber of Secrets]] === === [[Muggles' Guide to Harry Potter/Books/Prisoner of Azkaban|Prisoner of Azkaban]] === === [[Muggles' Guide to Harry Potter/Books/Goblet of Fire|Goblet of Fire]] === === [[Muggles' Guide to Harry Potter/Books/Order of the Phoenix|Order of the Phoenix]] === === [[Muggles' Guide to Harry Potter/Books/Half-Blood Prince|Half-Blood Prince]] === === [[Muggles' Guide to Harry Potter/Books/Deathly Hallows|Deathly Hallows]] === == Strengths == == Weaknesses == == Relationships with other characters == == Analysis == == Questions == == Greater picture == aw2i4qbsls41si2xptvo6om74oz3hs0 740227 740226 2026-05-03T05:08:37Z কমলেশ মন্ডল 72403 Undid revision [[Special:Diff/740226|740226]] by [[Special:Contributions/কমলেশ মন্ডল|কমলেশ মন্ডল]] ([[User talk:কমলেশ মন্ডল|talk]]) 740227 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। ihn71hdieta7l90eiraove49suq1vzz 740232 740227 2026-05-03T05:31:02Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740232 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। bhx9kp8gjtns4viofm6ovc6juqz57g6 740235 740232 2026-05-03T05:51:36Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740235 wikitext text/x-wiki Testing second save 2. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == === [[Muggles' Guide to Harry Potter/Books/Philosopher's Stone|Philosopher's Stone]] === === [[Muggles' Guide to Harry Potter/Books/Chamber of Secrets|Chamber of Secrets]] === === [[Muggles' Guide to Harry Potter/Books/Prisoner of Azkaban|Prisoner of Azkaban]] === === [[Muggles' Guide to Harry Potter/Books/Goblet of Fire|Goblet of Fire]] === === [[Muggles' Guide to Harry Potter/Books/Order of the Phoenix|Order of the Phoenix]] === === [[Muggles' Guide to Harry Potter/Books/Half-Blood Prince|Half-Blood Prince]] === === [[Muggles' Guide to Harry Potter/Books/Deathly Hallows|Deathly Hallows]] === == Strengths == == Weaknesses == == Relationships with other characters == == Analysis == == Questions == == Greater picture == hphnxaoser1ghikuyk7n3fwbqg11h7a 740237 740235 2026-05-03T05:51:56Z কমলেশ মন্ডল 72403 Undid revision [[Special:Diff/740235|740235]] by [[Special:Contributions/কমলেশ মন্ডল|কমলেশ মন্ডল]] ([[User talk:কমলেশ মন্ডল|talk]]) 740237 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। bhx9kp8gjtns4viofm6ovc6juqz57g6 740253 740237 2026-05-03T08:38:53Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740253 wikitext text/x-wiki == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রনিি" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রনি একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনিের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনিকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রনি তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনিের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনিো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনিের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনিের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == === [[Muggles' Guide to Harry Potter/Books/Philosopher's Stone|Philosopher's Stone]] === === [[Muggles' Guide to Harry Potter/Books/Chamber of Secrets|Chamber of Secrets]] === === [[Muggles' Guide to Harry Potter/Books/Prisoner of Azkaban|Prisoner of Azkaban]] === === [[Muggles' Guide to Harry Potter/Books/Goblet of Fire|Goblet of Fire]] === === [[Muggles' Guide to Harry Potter/Books/Order of the Phoenix|Order of the Phoenix]] === === [[Muggles' Guide to Harry Potter/Books/Half-Blood Prince|Half-Blood Prince]] === === [[Muggles' Guide to Harry Potter/Books/Deathly Hallows|Deathly Hallows]] === == Strengths == == Weaknesses == == Relationships with other characters == == Analysis == == Questions == == Greater picture == e5u8cjlvr3ve4rmnv6svv4m8ld7vudl 740254 740253 2026-05-03T08:39:12Z কমলেশ মন্ডল 72403 Undid revision [[Special:Diff/740253|740253]] by [[Special:Contributions/কমলেশ মন্ডল|কমলেশ মন্ডল]] ([[User talk:কমলেশ মন্ডল|talk]]) 740254 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। bhx9kp8gjtns4viofm6ovc6juqz57g6 740291 740254 2026-05-03T09:53:40Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740291 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রনি" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রনি একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনিকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রনি তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == Test section save. === [[Muggles' Guide to Harry Potter/Books/Philosopher's Stone|Philosopher's Stone]] === === [[Muggles' Guide to Harry Potter/Books/Chamber of Secrets|Chamber of Secrets]] === === [[Muggles' Guide to Harry Potter/Books/Prisoner of Azkaban|Prisoner of Azkaban]] === === [[Muggles' Guide to Harry Potter/Books/Goblet of Fire|Goblet of Fire]] === === [[Muggles' Guide to Harry Potter/Books/Order of the Phoenix|Order of the Phoenix]] === === [[Muggles' Guide to Harry Potter/Books/Half-Blood Prince|Half-Blood Prince]] === === [[Muggles' Guide to Harry Potter/Books/Deathly Hallows|Deathly Hallows]] === == Strengths == == Weaknesses == == Relationships with other characters == == Analysis == == Questions == == Greater picture == mca5quajgwyznjo9mvb4b26umt1fcec 740292 740291 2026-05-03T09:53:59Z কমলেশ মন্ডল 72403 Undid revision [[Special:Diff/740291|740291]] by [[Special:Contributions/কমলেশ মন্ডল|কমলেশ মন্ডল]] ([[User talk:কমলেশ মন্ডল|talk]]) 740292 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়ের মধ্যে সর্বকনিষ্ঠ এবং তার [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। bhx9kp8gjtns4viofm6ovc6juqz57g6 740316 740292 2026-05-03T10:44:21Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740316 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়েনা মধ্যে সর্বকনিষ্ঠ এবং তা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == Test empty block. nfcby5y7ugo749457a3kdu66ixf8epl 740317 740316 2026-05-03T10:47:52Z কমলেশ মন্ডল 72403 পাশাপাশি সরঞ্জাম (স্ক্রিপ্ট) 740317 wikitext text/x-wiki Testing second save. == সংক্ষিপ্ত বিবরণ == '''''রোনাল্ড "রন" বিলিয়াস উইজলি''''' ছয় ভাইয়েনা মধ্যে সর্বকনিষ্ঠ এবং তা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/জিনি উইজলি|জিনি]] নামে এক ছোট বোন রয়েছে। রন একটি দরিদ্র কিন্তু অত্যন্ত সম্মানিত জাদুকর পরিবার থেকে এসেছে। এই বড় এবং ঘনিষ্ঠ বংশটি মূলত তাদের লাল চুল এবং অদ্ভুত কর্মকাণ্ডের জন্য পরিচিত। রনের বাবা [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/আর্থার উইজলি|আর্থার উইজলি]] [[মাগলস গাইড টু হ্যারি পটার/জাদু/জাদু মন্ত্রণালয়|জাদু মন্ত্রণালয়ে]] কাজ করেন এবং মাগল ও মাগলদের ব্যবহার্য জিনিসের প্রতি তার বেশ অস্বাভাবিক আগ্রহ রয়েছে। পরিবারের স্বল্প আয় এবং মাগলদের প্রতি বন্ধুসুলভ আচরণের জন্য রনকে কিছু শিক্ষার্থী (মূলত স্লিদারিনরা) নিচু চোখে দেখে। বিপদের সময়ে রন তার দুই পরম বন্ধু [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হ্যারি পটার|হ্যারি পটার]] এবং তার ভবিষ্যৎ স্ত্রী [[মাগলস গাইড টু হ্যারি পটার/চরিত্র/হারমায়োনি গ্রেঞ্জার|হারমায়োনি গ্রেঞ্জারের]] ওপর ভরসা রাখতে পারে হগওয়ার্টসে পড়াশোনা শুরু করার আগের বছর তার বয়স ১১ পূর্ণ হয়েছিল। সে হ্যারির চেয়ে পাঁচ মাসের বড় এবং হারমায়োনির চেয়ে ছয় মাসের ছোট। পুরো ধারাবাহিকে রনের দুটি জাদুদণ্ড ছিল। প্রথমটি তার ভাই চার্লির কাছ থেকে পাওয়া পুরনো কাঠি, যা অ্যাশ কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। তার দ্বিতীয় কাঠিটি, যা সম্ভবত তাকে নিজে থেকেই "বেছে নিয়েছিল", উইলো কাঠ এবং ইউনিকর্নের লোম দিয়ে তৈরি। উইলো কাঠ জ্ঞানার্জন, ব্যক্তিগত বৃদ্ধি, নিরাময় এবং অশুভকে প্রতিহত করার সাথে যুক্ত। এটি মৃত্যু এবং শোকের প্রতীকও হতে পারে। রনের দুটি দণ্ডই কেল্টিক বৃক্ষ পঞ্জিকার সাথে সামঞ্জস্যপূর্ণ, যা তেরোটি চান্দ্র-পর্যায়ে বিভক্ত এবং প্রতিটি পর্যায় ভিন্ন ভিন্ন কাঠ দ্বারা চিহ্নিত। রনের ১লা মার্চের জন্মদিন ১৮ই ফেব্রুয়ারি – ১৭ই মার্চের অ্যাশ চক্রের মধ্যে পড়ে। == Role in the books == Test empty block. === [[Muggles' Guide to Harry Potter/Books/Chamber of Secrets|Chamber of Secrets]] === Test section save 2. j562yc0y2je7te9vrvyyhq1u75aymc3 Uno (song) 0 175112 740163 2026-05-02T18:14:16Z Cryptocurrency777 73698 Created page with "'''Uno''' (stylized in all caps; Spanish for "one") is a Spanglish song recorded by Russian rave group Little Big. It was selected to represent Russia in the Eurovision Song Contest 2020 before its cancellation. The song was released as a digital download and for streaming on 13 March 2020. In the chorus, the line "Uno, dos, cuatro" (transl. One, two, four) is repeated constantly, which was identified by media as a joke reference to the middle finger. The music video w..." 740163 wikitext text/x-wiki '''Uno''' (stylized in all caps; Spanish for "one") is a Spanglish song recorded by Russian rave group Little Big. It was selected to represent Russia in the Eurovision Song Contest 2020 before its cancellation. The song was released as a digital download and for streaming on 13 March 2020. In the chorus, the line "Uno, dos, cuatro" (transl. One, two, four) is repeated constantly, which was identified by media as a joke reference to the middle finger. The music video was released on March 12. It went viral, reaching 11 million views in a day. Within two months, the music video amassed 100 million views, beating the record of Netta's "Toy" as the most-viewed video in the Eurovision YouTube channel. Critics had mixed reactions to the song. The song was added to Just Dance 2021. ijuqns426gk56tdmu1uwgok0tujj7pj Grover 0 175113 740210 2026-05-02T22:49:04Z Cryptocurrency777 73698 Created page with "'''Grover''' is a blue Muppet character on the PBS/HBO children's television show Sesame Street" 740210 wikitext text/x-wiki '''Grover''' is a blue Muppet character on the PBS/HBO children's television show Sesame Street j9ocvyuk9tw8jdtngkecb63maezvxh6 NSYNC 0 175114 740211 2026-05-02T22:50:29Z Cryptocurrency777 73698 Created page with "bye bye bye" 740211 wikitext text/x-wiki bye bye bye bkfqnursrfzbu8rnh21dx9kr7p65764 Summar 0 175115 740219 2026-05-03T04:00:36Z ~2026-26892-05 73787 jk;alfjsd'loadf;fa'dafdkkre 740219 wikitext text/x-wiki Test bop1vj5i98maix36pjrpgep1w6hnxfe Wikipedia:Requests/Permissions/Valcio 4 175116 740246 2026-05-03T08:11:45Z Valcio 46860 + 740246 wikitext text/x-wiki <!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> === [[User:Valcio|Valcio]] === * {{User3|Valcio}}, [[Special:CentralAuth/Valcio|global contribs]] 08:11, 3 May 2026 (UTC) * '''Motive for request:''' Need to test gadgets and abuse filter configurations. I am admin and interface admin on itwiki. <!-- Important! Please include a good motive for your request here. --> * '''Requested rights:''' Administrator, Interface administrator, Abuse filter editor<!-- Please include the rights requested (example: Administrator, Bureaucrat, etc.) --> * '''Comments:''' <!-- Comments of other users --> <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ bi1zvw0l7czgo6dl9t7n5k7cnatfzo3 740248 740246 2026-05-03T08:19:33Z Valcio 46860 /* Valcio */ ping 740248 wikitext text/x-wiki <!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> === [[User:Valcio|Valcio]] === * {{User3|Valcio}}, [[Special:CentralAuth/Valcio|global contribs]] 08:11, 3 May 2026 (UTC) * '''Motive for request:''' Need to test gadgets and abuse filter configurations. I am admin and interface admin on itwiki. <!-- Important! Please include a good motive for your request here. --> * '''Requested rights:''' Administrator, Interface administrator, Abuse filter editor<!-- Please include the rights requested (example: Administrator, Bureaucrat, etc.) --> * '''Comments:''' <!-- Comments of other users --> {{ping|Barras|EPIC}} sorry for the ping but would need it today for the hackathon. --[[User:Valcio|Valcio]] ([[User talk:Valcio|talk]]) 08:19, 3 May 2026 (UTC) <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ tgok7v1wrb6fouiei4kengn6raohs0w 740249 740248 2026-05-03T08:27:06Z TheresNoTime 9999 /* Valcio */ d 740249 wikitext text/x-wiki <!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> {{Request-done|1=— [[User:TheresNoTime|TheresNoTime]] ([[User talk:TheresNoTime|talk]] • they/them) 08:26, 3 May 2026 (UTC)|per request}} === [[User:Valcio|Valcio]] === * {{User3|Valcio}}, [[Special:CentralAuth/Valcio|global contribs]] 08:11, 3 May 2026 (UTC) * '''Motive for request:''' Need to test gadgets and abuse filter configurations. I am admin and interface admin on itwiki. <!-- Important! Please include a good motive for your request here. --> * '''Requested rights:''' Administrator, Interface administrator, Abuse filter editor<!-- Please include the rights requested (example: Administrator, Bureaucrat, etc.) --> * '''Comments:''' <!-- Comments of other users --> {{ping|Barras|EPIC}} sorry for the ping but would need it today for the hackathon. --[[User:Valcio|Valcio]] ([[User talk:Valcio|talk]]) 08:19, 3 May 2026 (UTC) <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ iwkvj92bz7jxrido77ij5n845zrxrcp 740250 740249 2026-05-03T08:27:33Z TheresNoTime 9999 740250 wikitext text/x-wiki <!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> {{Request-done|1=— [[User:TheresNoTime|TheresNoTime]] ([[User talk:TheresNoTime|talk]] • they/them) 08:26, 3 May 2026 (UTC)|2=per request}} === [[User:Valcio|Valcio]] === * {{User3|Valcio}}, [[Special:CentralAuth/Valcio|global contribs]] 08:11, 3 May 2026 (UTC) * '''Motive for request:''' Need to test gadgets and abuse filter configurations. I am admin and interface admin on itwiki. <!-- Important! Please include a good motive for your request here. --> * '''Requested rights:''' Administrator, Interface administrator, Abuse filter editor<!-- Please include the rights requested (example: Administrator, Bureaucrat, etc.) --> * '''Comments:''' <!-- Comments of other users --> {{ping|Barras|EPIC}} sorry for the ping but would need it today for the hackathon. --[[User:Valcio|Valcio]] ([[User talk:Valcio|talk]]) 08:19, 3 May 2026 (UTC) <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ 98cxvy3evdqgccmjpuksmdako9b6gvs MediaWiki:Abusefilter-warning-accessibility-color 8 175117 740300 2026-05-03T10:27:48Z Valcio 46860 + 740300 wikitext text/x-wiki '''Attenzione:''' sono stati rilevati colori impostati manualmente (ad esempio <code>red</code>, <code>#ff0000</code>) nei contenuti o negli stili. L’uso di colori "fissi" può creare problemi di accessibilità e contrasto, soprattutto per utenti con difficoltà visive o che utilizzano temi personalizzati. Ti consigliamo di usare variabili CSS (<code>var(...)</code>) o gli stili predefiniti dell’interfaccia. [[Qui]] trovi una lista completa dei colori utilizzabili. Se possibile, evita di impostare colori direttamente nel codice. p9scuxdsevazad6ncyihr8zswmrhe1a 740318 740300 2026-05-03T10:53:01Z Valcio 46860 + 740318 wikitext text/x-wiki '''Attenzione: colori fissi nella modifica''' La tua modifica contiene uno o più colori espressi in forma fissa (ad esempio <code>red</code>, <code>#ff0000</code>) all'interno di un attributo <code>style</code>, di un attributo <code>color</code>/<code>bgcolor</code>, di un parametro di template o di una cella di tabella. Per garantire la corretta resa con il [[Aiuto:Aspetto#Tema scuro|tema scuro]] e l'[[Wikipedia:Accessibilità|accessibilità]], usa esclusivamente [[:en:CSS variable|variabili CSS]] tramite la funzione <code>var()</code>. Ad esempio: : <code><nowiki>style="background:var(--background-color-warning-subtle); color:var(--color-base)"</nowiki></code> Per l'elenco delle variabili disponibili vedi [[MediaWiki:Common.css]] e la documentazione di [[mw:Codex/Design Tokens|Codex]]. Se ritieni che la modifica sia comunque corretta, premi nuovamente '''Pubblica modifiche''' per ignorare questo avviso. dazgz0s2j1znnhuhe1ri3vc92wp5y7x MediaWiki:Abusefilter-warning-accessibility-alt 8 175118 740301 2026-05-03T10:29:40Z Valcio 46860 + 740301 wikitext text/x-wiki '''Attenzione''': alcune immagini inserite non contengono il testo alternativo (<code>alt</code>). Il testo alternativo è importante per l’accessibilità: permette alle persone che usano screen reader o tecnologie assistive di comprendere il contenuto dell’immagine. <u>Il testo alternativo non deve essere uan semplice didascalia, ma deve descrivere nel dettaglio l'immagine per renderne disponibile il contenuto senza la necessità di visualizzarla.</u> Ti consigliamo di aggiungere sempre un attributo <code>alt</code> descrittivo oppure una didascalia esplicativa. [[Qui]] trovi più informazioni su come inserirlo Puoi comunque salvare la modifica, ma ti invitiamo a correggerla. 9aliwpuym9uemrjbvt2o2atawnw3ap7 740321 740301 2026-05-03T10:54:31Z Valcio 46860 + 740321 wikitext text/x-wiki '''Attenzione: immagine senza testo alternativo''' La tua modifica aggiunge un'immagine priva di [[Aiuto:Markup_immagini#Testo_alternativo|testo alternativo]] (parametro <code>alt=</code>). Il testo alternativo è essenziale per gli utenti che usano gli [[Wikipedia:Accessibilità|screen reader]] e nei casi in cui l'immagine non riesca a caricarsi. La didascalia '''non''' lo sostituisce: nelle immagini con <code>thumb</code> o <code>miniatura</code> il parser ignora del tutto la didascalia ai fini dell'<code>alt</code>. Aggiungi <code>alt=</code> alla sintassi dell'immagine, ad esempio: : <code><nowiki>[[File:Esempio.jpg|thumb|alt=Veduta della cattedrale di Milano dal sagrato|La cattedrale di Milano]]</nowiki></code> Se l'immagine è '''puramente decorativa''' e non aggiunge informazione al testo, dichiaralo esplicitamente con <code>alt=</code> (valore vuoto): in quel modo gli screen reader la salteranno. Se ritieni che la modifica sia comunque corretta, premi nuovamente '''Pubblica modifiche''' per ignorare questo avviso. dki24yzmu6oipfxsbe3worixvjhd2yc Usuario discusión:TheresNoTime 0 175119 740304 2026-05-03T10:33:13Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740304 wikitext text/x-wiki == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[|Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) l6aqu7t0dqrt356wdzjkro5ekjpxip0 740307 740304 2026-05-03T10:35:51Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740307 wikitext text/x-wiki == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[|Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) i6o6kngpc9wjfbwjifz6cvcl264stdn 740310 740307 2026-05-03T10:36:17Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740310 wikitext text/x-wiki == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[|Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) 8pv7my8jhlgo6hyz4znpky34k81i06u 740312 740310 2026-05-03T10:38:39Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740312 wikitext text/x-wiki == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[|Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual#Solicitud de restauración de GoodEqualsExample|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:38, 3 May 2026 (UTC) tmdlsay2ohjr0mj2xy9iaq83miz97cc 740315 740312 2026-05-03T10:42:38Z Nacaru 54746 Aviso de solicitud de restauración mediante [[WP:TL|Twinkle Lite]] 740315 wikitext text/x-wiki == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[|Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:33, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:35, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual/Solicitud de restauración de [[GoodEqualsExample]]|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:36, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual#Solicitud de restauración de GoodEqualsExample|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:38, 3 May 2026 (UTC) == Aviso de solicitud de restauración del artículo [[GoodEqualsExample]] == ''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])'' He creado una solicitud para la restauración de un artículo que creaste: [[GoodEqualsExample]]. Puedes consultarla en el [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Solicitudes de restauración/Actual#Solicitud de restauración de GoodEqualsExample|tablón correspondiente]]. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 10:42, 3 May 2026 (UTC) aouawg375acsh1fsx5awy3ib3rflx5l User:Chaotic Enby/afghan.js 2 175120 740305 2026-05-03T10:34:53Z Chaotic Enby 58843 from [[en:User:MSK/afghan ethnicity.js]] for testing 740305 javascript text/javascript let ethnic_categories = [ "Pashtuns", "Pashtun tribes", "Theories of Pashtun origin", "List of Pashtuns", "Tajiks", "Farsiwans", "List of Tajik people", "Hazaras", "List of Hazara tribes", "Aimaq Hazara", "List of Hazara people", "Uzbeks", "List of Uzbeks", "Afghan Turkmens", "Turkmen tribes", "Afghan Turkestan", "Baloch of Afghanistan", "Baloch people", "List of Baloch tribes", "Aimaq people", "Nuristanis", "Kalash people", "History of Arabs in Afghanistan", "Afghan Qizilbash", "Pashayi people", "Sayyid", "Kyrgyz people", "Gurjar", "Muslim Gujjars", "List of Gurjars", "Pamiris", "Wakhi people", "Shughni people", "Yidgha-Munji people", "Brahui people", "Afghan Tatars", "Kazakh people", "Parachi", "Ormuri", "Moghols", "Jat people in South Asia", "Peripatetic groups of Afghanistan", "Hinduism in Afghanistan", "Sikhism in Afghanistan", "Jews in Afghanistan", ]; // "Turkmen" was removed, since it was a disamb let provinces = [ "Badakhshan Province", "Badghis Province", "Baghlan Province", "Balkh Province", "Bamyan Province", "Daikundi Province", "Farah Province", "Faryab Province", "Ghazni Province", "Ghor Province", "Helmand Province", "Herat Province", "Jowzjan Province", "Kabul Province", "Kandahar Province", "Kapisa Province", "Khost Province", "Kunar Province", "Kunduz Province", "Laghman Province", "Logar Province", "Maidan Wardak Province", "Nangarhar Province", "Nimruz Province", "Nuristan Province", "Paktia Province", "Paktika Province", "Panjshir Province", "Parwan Province", "Samangan Province", "Sar-e-Pol Province", "Takhar Province", "Uruzgan Province", "Zabul Province", ]; let province_capitals = [ "Fayzabad, Badakhshan", "Qala e Naw", "Puli Khumri", "Mazar-i-Sharif", "Bamyan", "Nili, Daikundi", "Farah, Afghanistan", "Maymana", "Ghazni", "Firuzkoh", "Lashkargah", "Herat", "Sheberghan", "Kabul", "Kandahar", "Mahmud Raqi", "Khost", "Asadabad, Afghanistan", "Kunduz", "Mihtarlam", "Puli Alam", "Jalalabad", "Zaranj", "Parun", "Gardez", "Sharana", "Bazarak", "Charikar", "Aybak, Samangan", "Sar-e-Pol, Afghanistan", "Taloqan", "Tarinkot", "Maidan Shar", "Qalati Ghilji", ]; // had to manually do this so there might be redirects, idk let semiprotect = [...ethnic_categories, ...provinces, ...province_capitals]; // BEGIN pages to pending changes protect const districts = [ "Badakhshan Province", "Arghanj Khwa District", "Argo District", "Baharak District, Badakhshan", "Darayim District", "Fayzabad District, Badakhshan", "Ishkashim District", "Jurm District", "Khash District", "Khwahan District", "Kishim District", "Kohistan District, Badakhshan", "Kuf Ab District", "Kuran wa Munjan District", "Maimay District", "Nusay District", "Raghistan District", "Shahri Buzurg District", "Shighnan District", "Shekay District", "Shuhada District", "Tagab District, Badakhshan", "Tishkan District", "Wakhan District", "Wurduj District", "Yaftali Sufla District", "Yamgan District", "Yawan District", "Zebak District", "Badghis Province", "Ab Kamari", "Ghormach District", "Jawand District", "Muqur District, Badghis", "Bala Murghab District", "Qadis District", "Qala i Naw District", "Baghlan Province", "Andarab District", "Baghlani Jadid District", "Burka District", "Dahana i Ghuri District", "Dih Salah District", "Dushi District", "Farang wa Gharu District", "Guzargahi Nur District", "Khinjan District", "Khost wa Fereng District", "Khwaja Hijran District", "Nahrin District", "Puli Hisar District", "Puli Khumri District", "Tala wa Barfak District", "Balkh Province", "Balkh District", "Charbolak District", "Charkint District", "Chimtal District", "Dawlatabad District", "Dihdadi District", "Kaldar District", "Khulm District", "Kishindih District", "Marmul District", "Nahri Shahi District", "Sholgara District", "Shortepa District", "Zari District", "Bamyan Province", "Bamyan District", "Kahmard District", "Panjab District", "Sayghan District", "Shibar District", "Waras District", "Yakawlang District", "Daykundi Province", "Ishtarlay District", "Kajran District", "Khadir District", "Kiti District", "Miramor District", "Nili District", "Sangi Takht District", "Shahristan District", "Farah Province", "Anar Dara District", "Bakwa District", "Bala Buluk District", "Farah City District", "Gulistan District", "Khaki Safed District", "Lash wa Juwayn District", "Pur Chaman District", "Pusht Rod District", "Qala i Kah District", "Shib Koh District", "Faryab Province", "Almar District", "Andkhoy District", "Bilchiragh District", "Dawlat Abad District", "Gurziwan District", "Khani Chahar Bagh", "Khwaja Sabz Posh District", "Kohistan District, Faryab", "Maymana", "Pashtun Kot District", "Qaramqol District", "Qaysar District", "Qurghan District", "Shirin Tagab District", "Ghazni Province", "Ab Band District", "Ajristan District", "Andar District", "Dih Yak District", "Gelan District", "Ghazni District", "Giro District", "Jaghori District", "Jaghatu District, Ghazni", "Khogyani District (Ghazni)", "Khwaja Umari District", "Malistan District", "Muqur District, Ghazni", "Nawa District", "Nawur District", "Qarabagh District, Ghazni", "Rashidan District", "Waghaz District", "Zana Khan District", "Ghor Province", "Chaghcharan District", "Charsada, Afghanistan", "Dawlat Yar District", "Du Layna District", "Lal wa Sarjangal District", "Marghab District", "Pasaband District", "Saghar District", "Shahrak District", "Taywara District", "Tulak District", "Helmand Province", "Baghran District", "Dishu District", "Garmsir District", "Kajaki District", "Khanashin District", "Lashkargah District", "Majrah District", "Musa Qala District", "Nad Ali District", "Grishk District", "Nawa-I-Barakzayi District", "Nawzad District", "Sangin District", "Washir District", "Herat Province", "Adraskan District", "Chishti Sharif District", "Farsi District", "Ghoryan District", "Gulran District", "Guzara District", "Herat District", "Injil District", "Karukh District", "Kohsan District", "Kushk District", "Kushki Kuhna District", "Obe District", "Pashtun Zarghun District", "Shindand District", "Zinda Jan District", "Jowzjan Province", "Aqcha District", "Darzab District", "Fayzabad District, Jowzjan", "Khamyab District", "Khaniqa District", "Khwaja Du Koh District", "Mardyan District", "Mingajik District", "Qarqin District", "Qush Tepa District", "Sheberghan District", "Kabul Province", "Bagrami District", "Chahar Asyab District", "Deh Sabz District", "Farza District", "Guldara District", "Istalif District", "Kabul District", "Kalakan District", "Khaki Jabbar District", "Mir Bacha Kot District", "Mussahi District", "Paghman District", "Qarabagh District, Kabul", "Shakardara District", "Surobi District (Kabul)", "Kandahar Province", "Arghandab District", "Arghistan District", "Daman District, Afghanistan", "Ghorak District", "Kandahar District", "Khakrez District", "Maruf District", "Maiwand District", "Miyanishin District", "Nesh District", "Panjwayi District", "Reg District (Kandahar)", "Shah Wali Kot District", "Shorabak District", "Spin Boldak District", "Zhari District", "Dand District", "Kapisa Province", "Alasay District", "Hesa Awal Kohistan District", "Hesa Duwum Kohistan District", "Koh Band District", "Mahmud Raqi District", "Nijrab District", "Tagab District (Kapisa Province)", "Khost Province", "Bak District", "Gurbuz District", "Jaji Maydan District", "Khost District", "Mandozayi District", "Musakhel District, Afghanistan", "Nadir Shah Kot District", "Qalandar District", "Sabari District", "Shamal District", "Spera District", "Tani District", "Tirazayi District", "Kunar Province", "Asadabad District", "Bar Kunar District", "Chapa Dara District", "Chawkay District", "Dangam District", "Dara-I-Pech District", "Ghaziabad District, Kunar Province", "Khas Kunar District", "Marawara District", "Narang Aw Badil District", "Nari District", "Nurgal District", "Shaigal District", "Shultan District", "Sirkani District", "Wata Pur District", "Kunduz Province", "Ali Abad District", "Archi District", "Chardara District", "Imam Sahib District", "Khan Abad District", "Kunduz District", "Qalay-I-Zal District", "Laghman Province", "Alingar District", "Alishing District", "Dawlat Shah District", "Mihtarlam District", "Qarghayi District", "Logar Province", "Azra District", "Baraki Barak District", "Charkh District", "Kharwar District", "Khoshi District", "Mohammad Agha District", "Puli Alam District", "Nangarhar Province", "Jalalabad District", "Haska Meyna", "Shinwar District", "Achin District", "Bihsud District", "Chaparhar District", "Darai Nur District", "Bati Kot District", "Dur Baba District", "Goshta District", "Hisarak District", "Kama District", "Khogyani District (Nangarhar)", "Kot District", "Kuz Kunar District", "Lal Pur District", "Momand Dara District", "Nazyan District", "Pachir Aw Agam District", "Rodat District", "Sherzad District", "Surkh Rod District", "Nimruz Province", "Chahar Burjak District", "Chakhansur District", "Kang District", "Khash Rod District", "Zaranj District", "Nuristan Province", "Barg-i Matal District", "Du Ab District", "Kamdesh District", "Mandol District", "Nurgram District", "Parun District", "Wama District", "Waygal District", "Paktia Province", "Ahmad Aba District", "Ahmadkhel District", "Dand Aw Patan District", "Gardez District", "Gerda Serai District", "Janikhel District (Paktia)", "Laja Mangal District", "Mirzaka District", "Said Karam District", "Shwak District", "Chamkani District", "Zadran District", "Zazi District", "Zurmat District", "Paktika Province", "Barmal District", "Dila District, Afghanistan", "Gayan District", "Gomal District", "Janikhel District (Paktika)", "Khairkot District", "Mata Khan District", "Nika District", "Omna District", "Sar Hawza District", "Surobi District (Paktika)", "Sharana District", "Terwa District", "Urgun District", "Wazakhwa District", "Wor Mamay District", "Yahyakhel District", "Yusufkhel District", "Zerok District", "Panjshir Province", "Abshar District", "Anaba District", "Bazarak District", "Darah District", "Khenj District", "Paryan District", "Rokha District", "Shotul District", "Parwan Province", "Bagram District", "Charikar", "Ghorband District", "Jabal Saraj District", "Kohi Safi District", "Salang District", "Sayed Khel District", "Sheikh Ali District", "Shinwari District", "Surkhi Parsa District", "Samangan Province", "Aybak District", "Darah Sof Balla District", "Darah Sof Payan District", "Feroz Nakhchir District", "Hazrati Sultan District", "Khuram Wa Sarbagh District", "Ruyi Du Ab District", "Sar-e Pol Province", "Balkhab District", "Gosfandi District", "Kohistanat District", "Sancharak District", "Sar-e Pol District", "Sayyad District", "Sozma Qala District", "Takhar Province", "Baharak District, Takhar", "Bangi District", "Chah Ab District", "Chal District", "Darqad District", "Dashti Qala District", "Farkhar District", "Hazar Sumuch District", "Ishkamish District", "Kalafgan District", "Khwaja Bahauddin District", "Khwaja Ghar District", "Namak Ab District", "Rustaq District", "Taluqan District", "Warsaj District", "Yangi Qala District", "Uruzgan Province", "Shahidi Hassas District", "Chora District", "Deh Rawood District", "Gizab District", "Khas Uruzgan District", "Tarinkot District", "Maidan Wardak Province", "Chaki Wardak District", "Day Mirdad District", "Hisa-I-Awali Bihsud District", "Jaghatu District (Wardak)", "Jalrez District", "Markazi Bihsud District", "Maidan Shar District", "Nirkh District", "Saydabad District", "Zabul Province", "Arghandab District, Zabul", "Atghar District", "Daychopan District", "Kakar District", "Mezana District", "Naw Bahar District", "Qalat District", "Shah Joy District", "Shamulzayi District", "Shinkay District", "Tarnak Aw Jaldak District", "Afghanistan", ]; const district_capitals = [ "Baharak, Afghanistan", "Fayzabad, Badakhshan", "Ishkashim, Afghanistan", "Jorm, Afghanistan", "Khwahan, Afghanistan", "Mashhad, Afghanistan", "Qal`eh-ye Kuf", "Koran va Monjan", "Jamarj-e Bala", "Nusay", "Ziraki, Badakhshan", "Shahri Buzurg", "Shughnan", "Jarf", "Khandud", "Zebak, Afghanistan", "Baghlan", "Puli Khumri", "Mazar-e-Sharif", "Bamyan", "Kahmard", "Panjab, Afghanistan", "Sayghan", "Shibar", "Waras", "Yakawlang", "Nili, Afghanistan", "Farah, Afghanistan", "Andkhoy (city)", "Maymana", "Haji Khel", "Sangar, Afghanistan", "Miray", "Ramak", "Janda, Afghanistan", "Ghazni", "Pana, Afghanistan", "Sang-e-Masha", "Gulbawri", "Khogyani, Ghazni", "Khwaja Umari, Afghanistan", "Mir Adina", "Muqur, Ghazni", "Nawa, Afghanistan", "Du Abi", "Qarabagh, Afghanistan", "Waghaz (town)", "Dado, Afghanistan", "Lashkargah", "Marjah", "Musa Qala", "Sangin", "Herat", "Shindand", "Bagrami", "Qalai Naeem", "Tarakhel", "Dehnawe Farza", "Guldara", "Istalif", "Kabul", "Kalakan", "Khak-i Jabbar", "Mir Bacha Kot", "Mussahi", "Paghman", "Qara Bagh, Kabul Province", "Shakar Dara", "Surobi, Kabul", "Kandahar", "Mahmud-i-Raqi", "Nijrab", "Tagab, Kapisa Province", "Khost", "Asadabad, Afghanistan", "Chapa Dara", "Sherkhan Bandar", "Kunduz", "Mihtarlam", "Puli Alam", "Jalalabad", "Haska Meyna", "Kaga, Afghanistan", "Nayzan", "Chakhansur (village)", "Khash, Nimruz", "Zaranj", "Kamdesh", "Parun", "Angur Ada", "Shkin", "Khairkot", "Sharana, Afghanistan", "Urgun", "Wazakhwa", "Zerok", "Bazarak, Panjshir", "Taluqan", "Tarinkot", "Chaki Wardak", "Miran, Afghanistan", "Behsud, Maidan Wardak", "Maidan Shar", "Saydabad", "Qalat, Zabul Province", ]; let cities = [ "Kabul", "Kandahar", "Herat", "Mazar-i-Sharif", "Kunduz", "Jalalabad", "Taloqan", "Puli Khumri", "Charikar", "Baghlan", "Sheberghan", "Ghazni", "Lashkargah", "Khost", "Mehtarlam", "Balkh", "Farah, Afghanistan", "Sar-e-Pol, Afghanistan", "Puli Alam", "Aybak, Samangan", "Firuzkoh", "Tarinkot", "Spin Boldak", "Maimana", "Gardez", "Bamyan", ]; let historic = [ "Sistan", "Badakhshan", "Afghan Turkestan", "Qataghan and Badakhshan Province", "High Governorate of the East", "High Governorate of the South", "High Governorate of Farah", "High Governorate of Maimana", ]; let pcp = [...districts, ...district_capitals, ...cities, ...historic]; let api = new mw.Api(); async function followURL(page) { let r = await fetch( "https://en.wikipedia.org/wiki/" + encodeURIComponent(page), ); return decodeURIComponent(r.url.split("/").pop()); } async function cleanArray(arr) { let res = []; for (const i of arr) { let cleaned = await followURL(i); if (!res.includes(cleaned)) { res.push(cleaned); } } return res; } async function getProtection(page) { const r = await api.get({ action: 'query', prop: 'info', inprop: 'protection', titles: page, format: 'json', }); const pages = r.query.pages; return Object.values(pages)[0].protection ?? []; } async function semiprotectPage(page) { const existing = await getProtection(page); const editProt = existing.find(p => p.type === 'edit'); if (editProt) { const answer = prompt( `"${page}" already has edit protection:\n` + ` Current: level=${editProt.level}, expiry=${editProt.expiry}\n` + ` New: level=autoconfirmed, expiry=1 year\n\n` + `Override? [Y/n]`, 'y' ); if (answer === null || answer.trim().toLowerCase() === 'n') { console.log(`Skipped: ${page}`); return; } } const now = new Date(); now.setFullYear(now.getFullYear() + 1); const timestamp = now.toISOString().replace(/\.\d{3}Z$/, 'Z'); const r = await api.postWithToken('csrf', { action: 'protect', title: page, protections: 'edit=autoconfirmed', reason: 'protecting per https://en.wikipedia.org/wiki/Wikipedia:Village_pump_(policy)#c-SdHb-20260426141300-How_long_do_unsourced_or_falsified_ethnic_figures_stay_in_articles?_(example_art', expiry: timestamp, format: 'json', }); console.log(r); } async function pcpPage(page) { const now = new Date(); now.setFullYear(now.getFullYear() + 1); const timestamp = now.toISOString().replace(/\.\d{3}Z$/, 'Z'); const r = await api.postWithToken('csrf', { action: 'stabilize', title: page, protectlevel: 'autoconfirmed', reason: 'protecting per https://en.wikipedia.org/wiki/Wikipedia:Village_pump_(policy)#c-SdHb-20260426141300-How_long_do_unsourced_or_falsified_ethnic_figures_stay_in_articles?_(example_art', expiry: timestamp, format: 'json', }); console.log(r); } [semiprotect, pcp] = await Promise.all([ cleanArray(semiprotect), cleanArray(pcp) ]); if (prompt('run script to protect pages?', 'n').toLowerCase() === 'y') { for (const page of semiprotect) { await semiprotectPage(page); } for (const page of pcp) { await pcpPage(page); } } ql0w4g9kb043eng7f57r49ia7mk4tdu MediaWiki:Abusefilter-warning-accessibility-table-hading 8 175121 740322 2026-05-03T10:56:43Z Valcio 46860 + 740322 wikitext text/x-wiki '''Attenzione: intestazioni di tabella mancanti''' La prima riga della tabella che hai modificato contiene celle con testo in grassetto (<code><nowiki>'''…'''</nowiki></code>) al posto di [[Aiuto:Tabelle#Intestazioni|vere intestazioni]]. Usa <code>!</code> al posto di <code>|</code> per le celle di intestazione, oppure <code>!!</code> al posto di <code>||</code> sulla stessa riga: <pre> {| class="wikitable" ! Colonna 1 !! Colonna 2 |- | Dato 1 || Dato 2 |} </pre> Le intestazioni semantiche sono fondamentali per gli [[Wikipedia:Accessibilità|screen reader]] e per la corretta interpretazione della tabella: il grassetto da solo non basta. Se ritieni che la modifica sia comunque corretta, premi nuovamente '''Pubblica modifiche''' per ignorare questo avviso. sq4cmnbnko8e73dxyrki82q65af0x5y User:Tohaomg/Gadget-Diffs.js 2 175122 740328 2026-05-03T11:06:51Z Tohaomg 35056 Created page with "//dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:#fdd}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="..." 740328 javascript text/javascript //dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:#fdd}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="diff="][href^="/w"],\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]' + (window.dfDiffLinksCSS || '{font-style:italic}') +'\ a[href*="diff="][href^="/w"]:hover,\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]:hover\ {color:red !important}\ .df-popup {margin:0.5em}\ ') }) $(document).keyup( function(e){ //close popup on Escape if( e.which == 27 ) popupClose('.df-instance:last') }) function dfClick(e){ cursorWait() //cancel waiting indicator if something went wrong if( e.shiftKey || e.which != 1) return //is it a diff link? var lnk = $(e.target).closest('a') if( !lnk.length ) return var url = lnk.attr('href'); if(!url) return url.replace(localDomain, '/'); if( ! /^\//.test(url) ) return //external URL var loadURL, dfContainer if( /[&?]diff=/.test(url) ){ // diff if( /differences-(next|prev)link/.test( lnk.attr('id') ) )//prev/next link in diff table dfContainer = lnk.closest('table.diff').parent() else markClickedLink(lnk) if( /:Undelete/.test(url) ) loadURL = url + '&useskin=myskin #content' else loadURL = url + '&action=render&diffonly=true' }else if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && window.dfPinWatchlist //popup for any link && ! lnk.closest('fieldset').length ){ if( ! /\?/.test(url) && ! /(special|служебная):/i.test(url) ) loadURL = url + '?action=render' else loadURL = url + '&useskin=myskin #content' }else{ return } //load diff e.preventDefault() cursorWait(true) dfContainer = dfContainer || popupCreate(e) dfContainer .attr('dfURL', url) .load( loadURL, afterDiffLoaded ) } function afterDiffLoaded(){ cursorWait() var $container = $(this) var url = $container.attr('dfURL') var dfLink = outputLink2('', $container.attr('dfURL'), 'Δ', 'current diff') var $tbl = $container.find('table.diff') if( $tbl.length ) improveTable( $tbl ) if ( $container.hasClass('df-popup') ){ var pgTitle = getTitleFromURL( $tbl.find('td.diff-ntitle a').attr('href') ) var caption = $( '<div class=df-caption>' + '<b>' + outputLink2(pgTitle) + '</b>' + ' (' + outputLink2(pgTitle, '?action=history', 'h') + ' ' + dfLink + ')' + '</div>' ) .prependTo($container) dfAddToolbar($tbl, caption) $container.parent().appendTo('body') }else{ $('#contentSub') .children('.df-link').remove().end() .append( $('<span class=df-link style="margin-left:1em; font-weight:bold" />') .append( dfLink ) ) } } function popupCreate(e){ //set CSS if( ! dfPopupSheet ){ dfPopupSheet = mw.util.addCSS('\ .df-clicked {background-color:#E0E0E0}\ a.df-clicked-last {background-color:#FFDDDD}\ .df-popup {position:absolute; z-index:100; width:95%; border:1px solid #000033; \ font-size:110%; background-color:white; padding:0 9px 9px 9px }\ .df-caption {background:#F0F0FF; border:1px outset gray; padding:2px; margin:0 -9px}\ .df-closer {position:absolute; z-index:10; border:2px outset gray;\ width:20px; height:20px; cursor:pointer; background:gray; opacity:0.5}') } //create popup var dfN = $('.df-popup').length var dfPopup = $('<div class=df-popup />') .css({ top: $(window).scrollTop() + 30 + dfN * 5 + 'px', left: 10 + dfN * 5 + 'px' }) .click( function(e){ //close popup when clicking on edges and and caption if( /df-(popup|caption)/.test(e.target.className) ) popupClose(this) else $(this).addClass('persistent') }) .click(dfClick) // .mouseleave( function(e){ // if( ! /persistent/.test(this.className) ) popupClose(this) // }) //create 'closing' square on mouse position var dfCloser = $('<div class=df-closer title=close>&nbsp;</div>') .css({top: e.pageY-10, left: e.pageX-10}) .mouseleave( function(){ $(this).remove() }) .click( function(){ popupClose(this) } ) $('<div class=df-instance />') //container for popup and closer .append(dfPopup, dfCloser) // if (isIE) hideAllSelectElements(true) // !!! return dfPopup } function popupClose(el){ $(el).closest('.df-instance').remove() } //****************************************************************************************** function cursorWait(isWait){ if( window.dfNoWaitCursor ) return document.body.style.cursor = isWait ? 'wait' : '' } function markClickedLink(lnk){ //and mark link as "clicked" $('a.df-clicked-last').removeClass('df-clicked-last') //rm class from previos click lnk.addClass('df-clicked df-clicked-last') if( /Watchlist|Recentchanges/.test(mw.config.get('wgCanonicalSpecialPageName')) ) lnk.closest('li').add(lnk.closest('tr')).addClass('df-clicked') } var dfHighlightSheet, dfImprovementSheet function addDiffTableCSS(){ if( dfImprovementSheet ) return dfImprovementSheet = mw.util.addCSS('\ td.diff-addedline, td.diff-deletedline {font-size:100%}\ table.diff {border-spacing:1px}\ table.diff td {vertical-align:top}\ table.diff {width:99%}\ body table.diff, td.diff-otitle, td.diff-ntitle {background:#FBFBFB}\ table.diff td.diff-lineno {border-top: 25px solid #FBFBFB}\ tr.df-deleted td {background-color:#FEC}\ table.diff td div {min-height:1em}\ td.df-deletedwords, td.df-addedwords\ {background:white; border:1px dotted gray; padding:2px}\ td.df-deletedwords span.diffchange {background-color:#FFA}\ td.df-addedwords span.diffchange {background-color:#CFC; color:black; font-weight:normal}\ tr.odd td.diff-addedline {background-color:#BEB}\ span.sig {border:1px dotted gray; border-bottom:none; font-family:cursive; font-size:90%}\ td.df-header {font-weight:bold; font-size:120%; padding-top:15px}\ tr.df-change td {font-size:100%}\ tr.df-added ins.diffchange {color:inherit; font-weight:normal; border:none}\ div.df-toolbar span.df-improve-btn {border:1px inset #EEEEEE}\ .df-btn {padding:2px; border:1px solid gray; margin-right:2px; cursor:pointer}\ table.diff td {cursor:help}\ table.diff td div, table.diff td.diff-multi {margin:0 8px 0 2px; cursor:default}' + (window.dfDiffTableCSS || '')) //user CSS //cursor stuff shows that TD is clickable (sticking out from under DIV inside) //padding: 0 8px 0 2px //different approach to make cells clickable //+ 'table.diff {border-spacing:0} table.diff td {border-top:4px solid #FBFBFB} table.diff td.diff-deletedline {border-right: 6px solid #FBFBFB}' } //============================================================================== function improveTable($tbl){ if (window.dfMaxImproveSize && $tbl.html().length>dfMaxImproveSize) return //improve rows //curTitle = $tbl.parent()[0].diffTitle //needed in improveCell() for relative links curTitle = getTitleFromURL( $tbl.parent().attr('dfURL') ) curStripes = false addDiffTableCSS() $tbl.find('tr').each(improveRow) $tbl.click(tableOnclick) } function dfAddToolbar($tbl, where){ //return $('<div class=df-toolbar style="float:right" />') .append( //btn(changeTable, '¤', 'Enable/disable improvements'), btn(diffJSEngine, 'js', 'Javascript diff engine') ) .prependTo(where) function changeTable(){alert(11)} function btn(func, txt, tip){ //creates <span> button return $('<span class=df-btn title="' + tip + '">' + txt + '</span>') .click( { dTable: $tbl }, func ) } } function improveRow(){ var tr = this, tds = $(this).find('td'), td if (tds.length <= 2) return // 'diff info' or 'intermediate revisions' or 'Line xx:' // case 'diff-otitle': case 'diff-multi': case 'diff-lineno': if( tds.length == 3 ){ if( tds[1].className == 'diff-deletedline' ){ tr.className += ' df-deleted' //new class, means the line was simply deleted, has pink background if( tds[1].innerHTML.length==0 ) tds[1].innerHTML = '<br />' expandCell(tds[1]) return }else if( tds[2].className == 'diff-addedline' ){ tr.className += ' df-added' improveCell(tds[2]) htm = tds[2].innerHTML if( !htm.length ) tds[2].innerHTML = '<br />' if( curStripes ) tr.className += ' odd' if( /<span class="sig">/i.test(htm) ) curStripes = !curStripes expandCell(tds[2]) return } }else if (tds[1].className == 'diff-context'){ tr.className = 'df-context' if (window.dfParseContext) improveCell(tds[1]) expandCell(tds[1]) curStripes = false return }else{ //normal yellow/green rows with 4 cells tr.className = 'df-change' tds[1].colSpan = tds[3].colSpan = 2 tr.removeChild(tds[2]); tr.removeChild(tds[0]) } //if( window.dfImproveAdvanced ) improveRowMore(tr) return function expandCell(td, clss){ /* while (td.nextSibling) tr.removeChild(td.nextSibling) while (td.previousSibling) tr.removeChild(td.previousSibling) td.colSpan = 4 if( clss ) td.className = clss */ tr.innerHTML = '<td colspan=4 class="' + td.className + (clss?' ' + clss:'') + '">' + td.innerHTML + '</td>' } function splitRowsUp(tdGoesUp){ tds[0].colSpan = 4 tds[1].colSpan = 4 //tr.removeChild(tds[2]) //tr.removeChild(tds[0]) var trnew = document.createElement('tr') trnew.className = 'df-change' trnew.appendChild(tdGoesUp) tr.parentNode.insertBefore(trnew, tr) } } //improveRow() function improveCell(cell){ if (window.dfNoWikiParsing) return cell = $(cell) var htm = cell.html() if (htm.length == 0) return //cell.innerHTML = '&nbsp;' cell.data('origHTML', htm) if (/^==.*== *$/i.test(cell.text())) cell.addClass('df-header') htm = htm.replace(/\u00A0/g, '<b>\u00B7</b>') htm = htm.replace(/({\{u(?:ser(?:links)?)?\|)([^}]+)}\}/g, function(str,tmpl,user){ return tmpl + outputLink2('special:contributions/'+user,'',user) + '}}' }) //mark signatures htm = htm.replace(/(\[\[[^\[]{4,65})?\d\d:\d\d, \d\d? \S{3,9} 20\d\d \(UTC\)/g, '<span class="sig">$&</span>') htm = htm.replace(/\{\{unsigned[^\}]\}\}/i, '<span class="sig">$&</span>') //[[link]] var CatOrFileRegExp = RegExp('^('+mw.config.get('wgFormattedNamespaces')[6]+'|' +mw.config.get('wgFormattedNamespaces')[14]+'|category|image|file):|\.(jpg|png|svg|gif)$','i') htm = htm.replace(/\[\[([^\]><}{|]+)\|?([^\]><]*)?\]\]/g, function(wikicode,page,name){ if (/http:\/\//i.test(page)) return wikicode //user made a mistake if (CatOrFileRegExp.test(page)) name = page+(name?'|'+name:'') //file or category, show in full else if (!name) name = page if (/^[#\/]/.test(page)) page = curTitle + page //relative link else if (/^[a-z]{2,7}:/.test(page)) page = 'Special:Search/'+page //possible interproject link, some are not "local" return outputLink2(page, '', name, wikicode) }) // [http://...] htm = htm.replace(/\[(https?:\/\/[^ \]><]*)( [^\]]*)?\]/g, // function (str,link,name){ var output = '<a href=' + link, title, tip, nameWas = name var scriptsPath = mw.config.get('wgServer') + mw.config.get('wgScript') if (link.indexOf(scriptsPath) == 0){ //local link tip = tryDecodeURI(link.substring((scriptsPath).length+1)) if (!name){ name = getTitleFromURL(link) || tip if (/diff=/.test(link)) name = 'diff: ' + name else if (tip.match(/action=history/)) name = 'hist: ' + name else if (tip.match(/oldid=/)) name = 'oldid: ' + name else name = 'wiki: ' + name } } else { //ext link tip = tryDecodeURI(link.substring(7)) output += ' class="external text"' if (!name) name = tip } if (!nameWas && (name.length > 70)) name = name.substring(0,60) + '… …' return output + ' title="' + tip + '">[' + name + ']</a>' }) cell.html(htm) function tryDecodeURI(s){ try{s=decodeURIComponent(s)}catch (e){}; return s } } function outputLink2(page, params, name, tooltip){ name = name || page page = page.replace(/&amp;/gi,'&').replace(/#.+$/, calcAnchor) return '<a href="'+ mw.config.get('wgArticlePath').replace(/\$1/,'') + encodeURI(page).replace(/\?/g,'%3F') + (params||'') + '" title="' + (tooltip||name).replace(/"/g,'&quot;') + '">' + name + '</a>' //' } function calcAnchor(txt){ //try to create href anchor similar to Parser.php::guessSectionNameFromWikiText() txt = $.trim(txt).replace(/#/g,'') .replace(/\[\[([^|]+\|)?([^\]]+)\]\]/g, '$2') //[[foo|bar]] -> bar .replace(/<.*?>/g, '').replace(/ /g,'_') // (we skip step "HTML entities are turned into their proper characters") return '#' + encodeURIComponent(txt).replace('%3A', ':').replace(/%([0-9A-F][0-9A-F])/g, '.$1') //maybe encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26')) ? } function getTitleFromURL(url){ var tt = /title=([^&>"]+)/.exec(url) //" if( tt ) return decodeURIComponent(tt[1]).replace(/_/g,' ') else return '' } function tableOnclick(e){ var trg = e.target if( trg.className ) switch ( trg.className ){ //case 'diff-lineno': changeBlock(trg.parentNode); return //case 'diff-otitle': case 'diff-ntitle': return case 'diff-addedline': case 'diff-deletedline': case 'diff-context': //if( trg.nodeName != 'TD' || $(trg).parents('table.diff').length == 0 ) break //parse wikicode in already improved row when clicked on white border above row var orig = $(trg).data('origHTML') if( orig ) $(trg).html(orig).data('origHTML','') else improveCell(trg) return } } function changeBlockXXX(row){ //switch improvement level for this part of diff table var dTbody = row.parentNode, rowIdx = 1, isImproved //find clicked row number while (rowIdx < dTbody.rows.length && dTbody.rows[rowIdx] != row) rowIdx++ if (dTbody.rows[rowIdx] != row) return //check if rows are improved or not if (row.className == 'df-lineno'){ isImproved = true var origTable = createTableFromHTML(requestedPages[dTbody.parentNode.parentNode.dfURL]) }else dfImprovementSheet.disabled = false //improve / de-improve rows do{ if (isImproved) dTbody.replaceChild(origTable.rows[rowIdx].cloneNode(true), row) else improveRow(row) }while((row=dTbody.rows[++rowIdx]) && row.cells[0].className != 'diff-lineno') } // *** JS Diff Engine *** function diffJSEngine(e){ var $tbl = e.data.dTable var htm = $tbl.data('origHTML') //call and run JS diff engine if( window.WDiffString ) diffJSGo() else importScriptAndRun('http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js', diffJSGo) function diffJSGo(){ cursorWait(true) //var var oldVer = '', newVer = '', txt, marker $tbl.find('td').each(function(){ txt = $(this).data('origHTML') || this.innerHTML txt = txt.replace(/<.+?>/g,'') + '\n' switch( this.className ){ case 'diff-context': marker = '\x03' + txt + '\x04\n' oldVer += marker newVer += marker i += 2 //skip other context cell break case 'diff-lineno': //oldVer += '\n\n\n\n\n\n' //newVer += '\n\n\n\n\n\n' break // !!! case 'diff-deletedline': oldVer += txt break case 'diff-addedline': newVer += txt break } }) //compare and display txt = WDiffString(oldVer, newVer) //txt = txt.replace(/\x03.*?\x04/g, '<br><br><hr><br><br>') txt = txt.replace(/\x03|\x04/g, '') txt = WDiffShortenOutput(txt) //txt = txt.replace(/¶/g,'<br>') txt = txt.replace(/&amp;/g,'&') //txt = txt.replace(/&lt;/g,'<').replace(/&gt;/g, '>') $('<div style="padding:2px"><br><br><h3>JS Engine diff</h3><hr style="height:5px" />' + txt + '</div>') .insertAfter($tbl)[0].scrollIntoView() cursorWait() } } function importScriptAndRun(url, func) { var s = document.createElement('script') s.type = 'text/javascript' s.src = url + '&action=raw&ctype=text/javascript' if( $.client.profile().name == 'msie') s.onreadystatechange = function(){ if( /loaded|complete/.test(this.readyState) ) func() } else s.onload = func document.getElementsByTagName('head')[0].appendChild(s) } }) rjt5qej0hoyh34fagjflsouwakcxxqm 740333 740328 2026-05-03T11:12:31Z Tohaomg 35056 740333 javascript text/javascript //dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:pink}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="diff="][href^="/w"],\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]' + (window.dfDiffLinksCSS || '{font-style:italic}') +'\ a[href*="diff="][href^="/w"]:hover,\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]:hover\ {color:red !important}\ .df-popup {margin:0.5em}\ ') }) $(document).keyup( function(e){ //close popup on Escape if( e.which == 27 ) popupClose('.df-instance:last') }) function dfClick(e){ cursorWait() //cancel waiting indicator if something went wrong if( e.shiftKey || e.which != 1) return //is it a diff link? var lnk = $(e.target).closest('a') if( !lnk.length ) return var url = lnk.attr('href'); if(!url) return url.replace(localDomain, '/'); if( ! /^\//.test(url) ) return //external URL var loadURL, dfContainer if( /[&?]diff=/.test(url) ){ // diff if( /differences-(next|prev)link/.test( lnk.attr('id') ) )//prev/next link in diff table dfContainer = lnk.closest('table.diff').parent() else markClickedLink(lnk) if( /:Undelete/.test(url) ) loadURL = url + '&useskin=myskin #content' else loadURL = url + '&action=render&diffonly=true' }else if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && window.dfPinWatchlist //popup for any link && ! lnk.closest('fieldset').length ){ if( ! /\?/.test(url) && ! /(special|служебная):/i.test(url) ) loadURL = url + '?action=render' else loadURL = url + '&useskin=myskin #content' }else{ return } //load diff e.preventDefault() cursorWait(true) dfContainer = dfContainer || popupCreate(e) dfContainer .attr('dfURL', url) .load( loadURL, afterDiffLoaded ) } function afterDiffLoaded(){ cursorWait() var $container = $(this) var url = $container.attr('dfURL') var dfLink = outputLink2('', $container.attr('dfURL'), 'Δ', 'current diff') var $tbl = $container.find('table.diff') if( $tbl.length ) improveTable( $tbl ) if ( $container.hasClass('df-popup') ){ var pgTitle = getTitleFromURL( $tbl.find('td.diff-ntitle a').attr('href') ) var caption = $( '<div class=df-caption>' + '<b>' + outputLink2(pgTitle) + '</b>' + ' (' + outputLink2(pgTitle, '?action=history', 'h') + ' ' + dfLink + ')' + '</div>' ) .prependTo($container) dfAddToolbar($tbl, caption) $container.parent().appendTo('body') }else{ $('#contentSub') .children('.df-link').remove().end() .append( $('<span class=df-link style="margin-left:1em; font-weight:bold" />') .append( dfLink ) ) } } function popupCreate(e){ //set CSS if( ! dfPopupSheet ){ dfPopupSheet = mw.util.addCSS('\ .df-clicked {background-color:#E0E0E0}\ a.df-clicked-last {background-color:#FFDDDD}\ .df-popup {position:absolute; z-index:100; width:95%; border:1px solid #000033; \ font-size:110%; background-color:white; padding:0 9px 9px 9px }\ .df-caption {background:#F0F0FF; border:1px outset gray; padding:2px; margin:0 -9px}\ .df-closer {position:absolute; z-index:10; border:2px outset gray;\ width:20px; height:20px; cursor:pointer; background:gray; opacity:0.5}') } //create popup var dfN = $('.df-popup').length var dfPopup = $('<div class=df-popup />') .css({ top: $(window).scrollTop() + 30 + dfN * 5 + 'px', left: 10 + dfN * 5 + 'px' }) .click( function(e){ //close popup when clicking on edges and and caption if( /df-(popup|caption)/.test(e.target.className) ) popupClose(this) else $(this).addClass('persistent') }) .click(dfClick) // .mouseleave( function(e){ // if( ! /persistent/.test(this.className) ) popupClose(this) // }) //create 'closing' square on mouse position var dfCloser = $('<div class=df-closer title=close>&nbsp;</div>') .css({top: e.pageY-10, left: e.pageX-10}) .mouseleave( function(){ $(this).remove() }) .click( function(){ popupClose(this) } ) $('<div class=df-instance />') //container for popup and closer .append(dfPopup, dfCloser) // if (isIE) hideAllSelectElements(true) // !!! return dfPopup } function popupClose(el){ $(el).closest('.df-instance').remove() } //****************************************************************************************** function cursorWait(isWait){ if( window.dfNoWaitCursor ) return document.body.style.cursor = isWait ? 'wait' : '' } function markClickedLink(lnk){ //and mark link as "clicked" $('a.df-clicked-last').removeClass('df-clicked-last') //rm class from previos click lnk.addClass('df-clicked df-clicked-last') if( /Watchlist|Recentchanges/.test(mw.config.get('wgCanonicalSpecialPageName')) ) lnk.closest('li').add(lnk.closest('tr')).addClass('df-clicked') } var dfHighlightSheet, dfImprovementSheet function addDiffTableCSS(){ if( dfImprovementSheet ) return dfImprovementSheet = mw.util.addCSS('\ td.diff-addedline, td.diff-deletedline {font-size:100%}\ table.diff {border-spacing:1px}\ table.diff td {vertical-align:top}\ table.diff {width:99%}\ body table.diff, td.diff-otitle, td.diff-ntitle {background:#FBFBFB}\ table.diff td.diff-lineno {border-top: 25px solid #FBFBFB}\ tr.df-deleted td {background-color:#FEC}\ table.diff td div {min-height:1em}\ td.df-deletedwords, td.df-addedwords\ {background:white; border:1px dotted gray; padding:2px}\ td.df-deletedwords span.diffchange {background-color:#FFA}\ td.df-addedwords span.diffchange {background-color:#CFC; color:black; font-weight:normal}\ tr.odd td.diff-addedline {background-color:#BEB}\ span.sig {border:1px dotted gray; border-bottom:none; font-family:cursive; font-size:90%}\ td.df-header {font-weight:bold; font-size:120%; padding-top:15px}\ tr.df-change td {font-size:100%}\ tr.df-added ins.diffchange {color:inherit; font-weight:normal; border:none}\ div.df-toolbar span.df-improve-btn {border:1px inset #EEEEEE}\ .df-btn {padding:2px; border:1px solid gray; margin-right:2px; cursor:pointer}\ table.diff td {cursor:help}\ table.diff td div, table.diff td.diff-multi {margin:0 8px 0 2px; cursor:default}' + (window.dfDiffTableCSS || '')) //user CSS //cursor stuff shows that TD is clickable (sticking out from under DIV inside) //padding: 0 8px 0 2px //different approach to make cells clickable //+ 'table.diff {border-spacing:0} table.diff td {border-top:4px solid #FBFBFB} table.diff td.diff-deletedline {border-right: 6px solid #FBFBFB}' } //============================================================================== function improveTable($tbl){ if (window.dfMaxImproveSize && $tbl.html().length>dfMaxImproveSize) return //improve rows //curTitle = $tbl.parent()[0].diffTitle //needed in improveCell() for relative links curTitle = getTitleFromURL( $tbl.parent().attr('dfURL') ) curStripes = false addDiffTableCSS() $tbl.find('tr').each(improveRow) $tbl.click(tableOnclick) } function dfAddToolbar($tbl, where){ //return $('<div class=df-toolbar style="float:right" />') .append( //btn(changeTable, '¤', 'Enable/disable improvements'), btn(diffJSEngine, 'js', 'Javascript diff engine') ) .prependTo(where) function changeTable(){alert(11)} function btn(func, txt, tip){ //creates <span> button return $('<span class=df-btn title="' + tip + '">' + txt + '</span>') .click( { dTable: $tbl }, func ) } } function improveRow(){ var tr = this, tds = $(this).find('td'), td if (tds.length <= 2) return // 'diff info' or 'intermediate revisions' or 'Line xx:' // case 'diff-otitle': case 'diff-multi': case 'diff-lineno': if( tds.length == 3 ){ if( tds[1].className == 'diff-deletedline' ){ tr.className += ' df-deleted' //new class, means the line was simply deleted, has pink background if( tds[1].innerHTML.length==0 ) tds[1].innerHTML = '<br />' expandCell(tds[1]) return }else if( tds[2].className == 'diff-addedline' ){ tr.className += ' df-added' improveCell(tds[2]) htm = tds[2].innerHTML if( !htm.length ) tds[2].innerHTML = '<br />' if( curStripes ) tr.className += ' odd' if( /<span class="sig">/i.test(htm) ) curStripes = !curStripes expandCell(tds[2]) return } }else if (tds[1].className == 'diff-context'){ tr.className = 'df-context' if (window.dfParseContext) improveCell(tds[1]) expandCell(tds[1]) curStripes = false return }else{ //normal yellow/green rows with 4 cells tr.className = 'df-change' tds[1].colSpan = tds[3].colSpan = 2 tr.removeChild(tds[2]); tr.removeChild(tds[0]) } //if( window.dfImproveAdvanced ) improveRowMore(tr) return function expandCell(td, clss){ /* while (td.nextSibling) tr.removeChild(td.nextSibling) while (td.previousSibling) tr.removeChild(td.previousSibling) td.colSpan = 4 if( clss ) td.className = clss */ tr.innerHTML = '<td colspan=4 class="' + td.className + (clss?' ' + clss:'') + '">' + td.innerHTML + '</td>' } function splitRowsUp(tdGoesUp){ tds[0].colSpan = 4 tds[1].colSpan = 4 //tr.removeChild(tds[2]) //tr.removeChild(tds[0]) var trnew = document.createElement('tr') trnew.className = 'df-change' trnew.appendChild(tdGoesUp) tr.parentNode.insertBefore(trnew, tr) } } //improveRow() function improveCell(cell){ if (window.dfNoWikiParsing) return cell = $(cell) var htm = cell.html() if (htm.length == 0) return //cell.innerHTML = '&nbsp;' cell.data('origHTML', htm) if (/^==.*== *$/i.test(cell.text())) cell.addClass('df-header') htm = htm.replace(/\u00A0/g, '<b>\u00B7</b>') htm = htm.replace(/({\{u(?:ser(?:links)?)?\|)([^}]+)}\}/g, function(str,tmpl,user){ return tmpl + outputLink2('special:contributions/'+user,'',user) + '}}' }) //mark signatures htm = htm.replace(/(\[\[[^\[]{4,65})?\d\d:\d\d, \d\d? \S{3,9} 20\d\d \(UTC\)/g, '<span class="sig">$&</span>') htm = htm.replace(/\{\{unsigned[^\}]\}\}/i, '<span class="sig">$&</span>') //[[link]] var CatOrFileRegExp = RegExp('^('+mw.config.get('wgFormattedNamespaces')[6]+'|' +mw.config.get('wgFormattedNamespaces')[14]+'|category|image|file):|\.(jpg|png|svg|gif)$','i') htm = htm.replace(/\[\[([^\]><}{|]+)\|?([^\]><]*)?\]\]/g, function(wikicode,page,name){ if (/http:\/\//i.test(page)) return wikicode //user made a mistake if (CatOrFileRegExp.test(page)) name = page+(name?'|'+name:'') //file or category, show in full else if (!name) name = page if (/^[#\/]/.test(page)) page = curTitle + page //relative link else if (/^[a-z]{2,7}:/.test(page)) page = 'Special:Search/'+page //possible interproject link, some are not "local" return outputLink2(page, '', name, wikicode) }) // [http://...] htm = htm.replace(/\[(https?:\/\/[^ \]><]*)( [^\]]*)?\]/g, // function (str,link,name){ var output = '<a href=' + link, title, tip, nameWas = name var scriptsPath = mw.config.get('wgServer') + mw.config.get('wgScript') if (link.indexOf(scriptsPath) == 0){ //local link tip = tryDecodeURI(link.substring((scriptsPath).length+1)) if (!name){ name = getTitleFromURL(link) || tip if (/diff=/.test(link)) name = 'diff: ' + name else if (tip.match(/action=history/)) name = 'hist: ' + name else if (tip.match(/oldid=/)) name = 'oldid: ' + name else name = 'wiki: ' + name } } else { //ext link tip = tryDecodeURI(link.substring(7)) output += ' class="external text"' if (!name) name = tip } if (!nameWas && (name.length > 70)) name = name.substring(0,60) + '… …' return output + ' title="' + tip + '">[' + name + ']</a>' }) cell.html(htm) function tryDecodeURI(s){ try{s=decodeURIComponent(s)}catch (e){}; return s } } function outputLink2(page, params, name, tooltip){ name = name || page page = page.replace(/&amp;/gi,'&').replace(/#.+$/, calcAnchor) return '<a href="'+ mw.config.get('wgArticlePath').replace(/\$1/,'') + encodeURI(page).replace(/\?/g,'%3F') + (params||'') + '" title="' + (tooltip||name).replace(/"/g,'&quot;') + '">' + name + '</a>' //' } function calcAnchor(txt){ //try to create href anchor similar to Parser.php::guessSectionNameFromWikiText() txt = $.trim(txt).replace(/#/g,'') .replace(/\[\[([^|]+\|)?([^\]]+)\]\]/g, '$2') //[[foo|bar]] -> bar .replace(/<.*?>/g, '').replace(/ /g,'_') // (we skip step "HTML entities are turned into their proper characters") return '#' + encodeURIComponent(txt).replace('%3A', ':').replace(/%([0-9A-F][0-9A-F])/g, '.$1') //maybe encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26')) ? } function getTitleFromURL(url){ var tt = /title=([^&>"]+)/.exec(url) //" if( tt ) return decodeURIComponent(tt[1]).replace(/_/g,' ') else return '' } function tableOnclick(e){ var trg = e.target if( trg.className ) switch ( trg.className ){ //case 'diff-lineno': changeBlock(trg.parentNode); return //case 'diff-otitle': case 'diff-ntitle': return case 'diff-addedline': case 'diff-deletedline': case 'diff-context': //if( trg.nodeName != 'TD' || $(trg).parents('table.diff').length == 0 ) break //parse wikicode in already improved row when clicked on white border above row var orig = $(trg).data('origHTML') if( orig ) $(trg).html(orig).data('origHTML','') else improveCell(trg) return } } function changeBlockXXX(row){ //switch improvement level for this part of diff table var dTbody = row.parentNode, rowIdx = 1, isImproved //find clicked row number while (rowIdx < dTbody.rows.length && dTbody.rows[rowIdx] != row) rowIdx++ if (dTbody.rows[rowIdx] != row) return //check if rows are improved or not if (row.className == 'df-lineno'){ isImproved = true var origTable = createTableFromHTML(requestedPages[dTbody.parentNode.parentNode.dfURL]) }else dfImprovementSheet.disabled = false //improve / de-improve rows do{ if (isImproved) dTbody.replaceChild(origTable.rows[rowIdx].cloneNode(true), row) else improveRow(row) }while((row=dTbody.rows[++rowIdx]) && row.cells[0].className != 'diff-lineno') } // *** JS Diff Engine *** function diffJSEngine(e){ var $tbl = e.data.dTable var htm = $tbl.data('origHTML') //call and run JS diff engine if( window.WDiffString ) diffJSGo() else importScriptAndRun('http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js', diffJSGo) function diffJSGo(){ cursorWait(true) //var var oldVer = '', newVer = '', txt, marker $tbl.find('td').each(function(){ txt = $(this).data('origHTML') || this.innerHTML txt = txt.replace(/<.+?>/g,'') + '\n' switch( this.className ){ case 'diff-context': marker = '\x03' + txt + '\x04\n' oldVer += marker newVer += marker i += 2 //skip other context cell break case 'diff-lineno': //oldVer += '\n\n\n\n\n\n' //newVer += '\n\n\n\n\n\n' break // !!! case 'diff-deletedline': oldVer += txt break case 'diff-addedline': newVer += txt break } }) //compare and display txt = WDiffString(oldVer, newVer) //txt = txt.replace(/\x03.*?\x04/g, '<br><br><hr><br><br>') txt = txt.replace(/\x03|\x04/g, '') txt = WDiffShortenOutput(txt) //txt = txt.replace(/¶/g,'<br>') txt = txt.replace(/&amp;/g,'&') //txt = txt.replace(/&lt;/g,'<').replace(/&gt;/g, '>') $('<div style="padding:2px"><br><br><h3>JS Engine diff</h3><hr style="height:5px" />' + txt + '</div>') .insertAfter($tbl)[0].scrollIntoView() cursorWait() } } function importScriptAndRun(url, func) { var s = document.createElement('script') s.type = 'text/javascript' s.src = url + '&action=raw&ctype=text/javascript' if( $.client.profile().name == 'msie') s.onreadystatechange = function(){ if( /loaded|complete/.test(this.readyState) ) func() } else s.onload = func document.getElementsByTagName('head')[0].appendChild(s) } }) 3vp503lm4u8q8nogptsnasxbfuqjwo7 740335 740333 2026-05-03T11:14:20Z Tohaomg 35056 740335 javascript text/javascript //dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:red}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="diff="][href^="/w"],\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]' + (window.dfDiffLinksCSS || '{font-style:italic}') +'\ a[href*="diff="][href^="/w"]:hover,\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]:hover\ {color:red !important}\ .df-popup {margin:0.5em}\ ') }) $(document).keyup( function(e){ //close popup on Escape if( e.which == 27 ) popupClose('.df-instance:last') }) function dfClick(e){ cursorWait() //cancel waiting indicator if something went wrong if( e.shiftKey || e.which != 1) return //is it a diff link? var lnk = $(e.target).closest('a') if( !lnk.length ) return var url = lnk.attr('href'); if(!url) return url.replace(localDomain, '/'); if( ! /^\//.test(url) ) return //external URL var loadURL, dfContainer if( /[&?]diff=/.test(url) ){ // diff if( /differences-(next|prev)link/.test( lnk.attr('id') ) )//prev/next link in diff table dfContainer = lnk.closest('table.diff').parent() else markClickedLink(lnk) if( /:Undelete/.test(url) ) loadURL = url + '&useskin=myskin #content' else loadURL = url + '&action=render&diffonly=true' }else if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && window.dfPinWatchlist //popup for any link && ! lnk.closest('fieldset').length ){ if( ! /\?/.test(url) && ! /(special|служебная):/i.test(url) ) loadURL = url + '?action=render' else loadURL = url + '&useskin=myskin #content' }else{ return } //load diff e.preventDefault() cursorWait(true) dfContainer = dfContainer || popupCreate(e) dfContainer .attr('dfURL', url) .load( loadURL, afterDiffLoaded ) } function afterDiffLoaded(){ cursorWait() var $container = $(this) var url = $container.attr('dfURL') var dfLink = outputLink2('', $container.attr('dfURL'), 'Δ', 'current diff') var $tbl = $container.find('table.diff') if( $tbl.length ) improveTable( $tbl ) if ( $container.hasClass('df-popup') ){ var pgTitle = getTitleFromURL( $tbl.find('td.diff-ntitle a').attr('href') ) var caption = $( '<div class=df-caption>' + '<b>' + outputLink2(pgTitle) + '</b>' + ' (' + outputLink2(pgTitle, '?action=history', 'h') + ' ' + dfLink + ')' + '</div>' ) .prependTo($container) dfAddToolbar($tbl, caption) $container.parent().appendTo('body') }else{ $('#contentSub') .children('.df-link').remove().end() .append( $('<span class=df-link style="margin-left:1em; font-weight:bold" />') .append( dfLink ) ) } } function popupCreate(e){ //set CSS if( ! dfPopupSheet ){ dfPopupSheet = mw.util.addCSS('\ .df-clicked {background-color:lime}\ a.df-clicked-last {background-color:yellow}\ .df-popup {position:absolute; z-index:100; width:95%; border:1px solid #000033; \ font-size:110%; background-color:aqua; padding:0 9px 9px 9px }\ .df-caption {background:purple; border:1px outset gray; padding:2px; margin:0 -9px}\ .df-closer {position:absolute; z-index:10; border:2px outset gray;\ width:20px; height:20px; cursor:pointer; background:orange; opacity:0.5}') } //create popup var dfN = $('.df-popup').length var dfPopup = $('<div class=df-popup />') .css({ top: $(window).scrollTop() + 30 + dfN * 5 + 'px', left: 10 + dfN * 5 + 'px' }) .click( function(e){ //close popup when clicking on edges and and caption if( /df-(popup|caption)/.test(e.target.className) ) popupClose(this) else $(this).addClass('persistent') }) .click(dfClick) // .mouseleave( function(e){ // if( ! /persistent/.test(this.className) ) popupClose(this) // }) //create 'closing' square on mouse position var dfCloser = $('<div class=df-closer title=close>&nbsp;</div>') .css({top: e.pageY-10, left: e.pageX-10}) .mouseleave( function(){ $(this).remove() }) .click( function(){ popupClose(this) } ) $('<div class=df-instance />') //container for popup and closer .append(dfPopup, dfCloser) // if (isIE) hideAllSelectElements(true) // !!! return dfPopup } function popupClose(el){ $(el).closest('.df-instance').remove() } //****************************************************************************************** function cursorWait(isWait){ if( window.dfNoWaitCursor ) return document.body.style.cursor = isWait ? 'wait' : '' } function markClickedLink(lnk){ //and mark link as "clicked" $('a.df-clicked-last').removeClass('df-clicked-last') //rm class from previos click lnk.addClass('df-clicked df-clicked-last') if( /Watchlist|Recentchanges/.test(mw.config.get('wgCanonicalSpecialPageName')) ) lnk.closest('li').add(lnk.closest('tr')).addClass('df-clicked') } var dfHighlightSheet, dfImprovementSheet function addDiffTableCSS(){ if( dfImprovementSheet ) return dfImprovementSheet = mw.util.addCSS('\ td.diff-addedline, td.diff-deletedline {font-size:100%}\ table.diff {border-spacing:1px}\ table.diff td {vertical-align:top}\ table.diff {width:99%}\ body table.diff, td.diff-otitle, td.diff-ntitle {background:#FBFBFB}\ table.diff td.diff-lineno {border-top: 25px solid #FBFBFB}\ tr.df-deleted td {background-color:#FEC}\ table.diff td div {min-height:1em}\ td.df-deletedwords, td.df-addedwords\ {background:white; border:1px dotted gray; padding:2px}\ td.df-deletedwords span.diffchange {background-color:#FFA}\ td.df-addedwords span.diffchange {background-color:#CFC; color:black; font-weight:normal}\ tr.odd td.diff-addedline {background-color:#BEB}\ span.sig {border:1px dotted gray; border-bottom:none; font-family:cursive; font-size:90%}\ td.df-header {font-weight:bold; font-size:120%; padding-top:15px}\ tr.df-change td {font-size:100%}\ tr.df-added ins.diffchange {color:inherit; font-weight:normal; border:none}\ div.df-toolbar span.df-improve-btn {border:1px inset #EEEEEE}\ .df-btn {padding:2px; border:1px solid gray; margin-right:2px; cursor:pointer}\ table.diff td {cursor:help}\ table.diff td div, table.diff td.diff-multi {margin:0 8px 0 2px; cursor:default}' + (window.dfDiffTableCSS || '')) //user CSS //cursor stuff shows that TD is clickable (sticking out from under DIV inside) //padding: 0 8px 0 2px //different approach to make cells clickable //+ 'table.diff {border-spacing:0} table.diff td {border-top:4px solid #FBFBFB} table.diff td.diff-deletedline {border-right: 6px solid #FBFBFB}' } //============================================================================== function improveTable($tbl){ if (window.dfMaxImproveSize && $tbl.html().length>dfMaxImproveSize) return //improve rows //curTitle = $tbl.parent()[0].diffTitle //needed in improveCell() for relative links curTitle = getTitleFromURL( $tbl.parent().attr('dfURL') ) curStripes = false addDiffTableCSS() $tbl.find('tr').each(improveRow) $tbl.click(tableOnclick) } function dfAddToolbar($tbl, where){ //return $('<div class=df-toolbar style="float:right" />') .append( //btn(changeTable, '¤', 'Enable/disable improvements'), btn(diffJSEngine, 'js', 'Javascript diff engine') ) .prependTo(where) function changeTable(){alert(11)} function btn(func, txt, tip){ //creates <span> button return $('<span class=df-btn title="' + tip + '">' + txt + '</span>') .click( { dTable: $tbl }, func ) } } function improveRow(){ var tr = this, tds = $(this).find('td'), td if (tds.length <= 2) return // 'diff info' or 'intermediate revisions' or 'Line xx:' // case 'diff-otitle': case 'diff-multi': case 'diff-lineno': if( tds.length == 3 ){ if( tds[1].className == 'diff-deletedline' ){ tr.className += ' df-deleted' //new class, means the line was simply deleted, has pink background if( tds[1].innerHTML.length==0 ) tds[1].innerHTML = '<br />' expandCell(tds[1]) return }else if( tds[2].className == 'diff-addedline' ){ tr.className += ' df-added' improveCell(tds[2]) htm = tds[2].innerHTML if( !htm.length ) tds[2].innerHTML = '<br />' if( curStripes ) tr.className += ' odd' if( /<span class="sig">/i.test(htm) ) curStripes = !curStripes expandCell(tds[2]) return } }else if (tds[1].className == 'diff-context'){ tr.className = 'df-context' if (window.dfParseContext) improveCell(tds[1]) expandCell(tds[1]) curStripes = false return }else{ //normal yellow/green rows with 4 cells tr.className = 'df-change' tds[1].colSpan = tds[3].colSpan = 2 tr.removeChild(tds[2]); tr.removeChild(tds[0]) } //if( window.dfImproveAdvanced ) improveRowMore(tr) return function expandCell(td, clss){ /* while (td.nextSibling) tr.removeChild(td.nextSibling) while (td.previousSibling) tr.removeChild(td.previousSibling) td.colSpan = 4 if( clss ) td.className = clss */ tr.innerHTML = '<td colspan=4 class="' + td.className + (clss?' ' + clss:'') + '">' + td.innerHTML + '</td>' } function splitRowsUp(tdGoesUp){ tds[0].colSpan = 4 tds[1].colSpan = 4 //tr.removeChild(tds[2]) //tr.removeChild(tds[0]) var trnew = document.createElement('tr') trnew.className = 'df-change' trnew.appendChild(tdGoesUp) tr.parentNode.insertBefore(trnew, tr) } } //improveRow() function improveCell(cell){ if (window.dfNoWikiParsing) return cell = $(cell) var htm = cell.html() if (htm.length == 0) return //cell.innerHTML = '&nbsp;' cell.data('origHTML', htm) if (/^==.*== *$/i.test(cell.text())) cell.addClass('df-header') htm = htm.replace(/\u00A0/g, '<b>\u00B7</b>') htm = htm.replace(/({\{u(?:ser(?:links)?)?\|)([^}]+)}\}/g, function(str,tmpl,user){ return tmpl + outputLink2('special:contributions/'+user,'',user) + '}}' }) //mark signatures htm = htm.replace(/(\[\[[^\[]{4,65})?\d\d:\d\d, \d\d? \S{3,9} 20\d\d \(UTC\)/g, '<span class="sig">$&</span>') htm = htm.replace(/\{\{unsigned[^\}]\}\}/i, '<span class="sig">$&</span>') //[[link]] var CatOrFileRegExp = RegExp('^('+mw.config.get('wgFormattedNamespaces')[6]+'|' +mw.config.get('wgFormattedNamespaces')[14]+'|category|image|file):|\.(jpg|png|svg|gif)$','i') htm = htm.replace(/\[\[([^\]><}{|]+)\|?([^\]><]*)?\]\]/g, function(wikicode,page,name){ if (/http:\/\//i.test(page)) return wikicode //user made a mistake if (CatOrFileRegExp.test(page)) name = page+(name?'|'+name:'') //file or category, show in full else if (!name) name = page if (/^[#\/]/.test(page)) page = curTitle + page //relative link else if (/^[a-z]{2,7}:/.test(page)) page = 'Special:Search/'+page //possible interproject link, some are not "local" return outputLink2(page, '', name, wikicode) }) // [http://...] htm = htm.replace(/\[(https?:\/\/[^ \]><]*)( [^\]]*)?\]/g, // function (str,link,name){ var output = '<a href=' + link, title, tip, nameWas = name var scriptsPath = mw.config.get('wgServer') + mw.config.get('wgScript') if (link.indexOf(scriptsPath) == 0){ //local link tip = tryDecodeURI(link.substring((scriptsPath).length+1)) if (!name){ name = getTitleFromURL(link) || tip if (/diff=/.test(link)) name = 'diff: ' + name else if (tip.match(/action=history/)) name = 'hist: ' + name else if (tip.match(/oldid=/)) name = 'oldid: ' + name else name = 'wiki: ' + name } } else { //ext link tip = tryDecodeURI(link.substring(7)) output += ' class="external text"' if (!name) name = tip } if (!nameWas && (name.length > 70)) name = name.substring(0,60) + '… …' return output + ' title="' + tip + '">[' + name + ']</a>' }) cell.html(htm) function tryDecodeURI(s){ try{s=decodeURIComponent(s)}catch (e){}; return s } } function outputLink2(page, params, name, tooltip){ name = name || page page = page.replace(/&amp;/gi,'&').replace(/#.+$/, calcAnchor) return '<a href="'+ mw.config.get('wgArticlePath').replace(/\$1/,'') + encodeURI(page).replace(/\?/g,'%3F') + (params||'') + '" title="' + (tooltip||name).replace(/"/g,'&quot;') + '">' + name + '</a>' //' } function calcAnchor(txt){ //try to create href anchor similar to Parser.php::guessSectionNameFromWikiText() txt = $.trim(txt).replace(/#/g,'') .replace(/\[\[([^|]+\|)?([^\]]+)\]\]/g, '$2') //[[foo|bar]] -> bar .replace(/<.*?>/g, '').replace(/ /g,'_') // (we skip step "HTML entities are turned into their proper characters") return '#' + encodeURIComponent(txt).replace('%3A', ':').replace(/%([0-9A-F][0-9A-F])/g, '.$1') //maybe encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26')) ? } function getTitleFromURL(url){ var tt = /title=([^&>"]+)/.exec(url) //" if( tt ) return decodeURIComponent(tt[1]).replace(/_/g,' ') else return '' } function tableOnclick(e){ var trg = e.target if( trg.className ) switch ( trg.className ){ //case 'diff-lineno': changeBlock(trg.parentNode); return //case 'diff-otitle': case 'diff-ntitle': return case 'diff-addedline': case 'diff-deletedline': case 'diff-context': //if( trg.nodeName != 'TD' || $(trg).parents('table.diff').length == 0 ) break //parse wikicode in already improved row when clicked on white border above row var orig = $(trg).data('origHTML') if( orig ) $(trg).html(orig).data('origHTML','') else improveCell(trg) return } } function changeBlockXXX(row){ //switch improvement level for this part of diff table var dTbody = row.parentNode, rowIdx = 1, isImproved //find clicked row number while (rowIdx < dTbody.rows.length && dTbody.rows[rowIdx] != row) rowIdx++ if (dTbody.rows[rowIdx] != row) return //check if rows are improved or not if (row.className == 'df-lineno'){ isImproved = true var origTable = createTableFromHTML(requestedPages[dTbody.parentNode.parentNode.dfURL]) }else dfImprovementSheet.disabled = false //improve / de-improve rows do{ if (isImproved) dTbody.replaceChild(origTable.rows[rowIdx].cloneNode(true), row) else improveRow(row) }while((row=dTbody.rows[++rowIdx]) && row.cells[0].className != 'diff-lineno') } // *** JS Diff Engine *** function diffJSEngine(e){ var $tbl = e.data.dTable var htm = $tbl.data('origHTML') //call and run JS diff engine if( window.WDiffString ) diffJSGo() else importScriptAndRun('http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js', diffJSGo) function diffJSGo(){ cursorWait(true) //var var oldVer = '', newVer = '', txt, marker $tbl.find('td').each(function(){ txt = $(this).data('origHTML') || this.innerHTML txt = txt.replace(/<.+?>/g,'') + '\n' switch( this.className ){ case 'diff-context': marker = '\x03' + txt + '\x04\n' oldVer += marker newVer += marker i += 2 //skip other context cell break case 'diff-lineno': //oldVer += '\n\n\n\n\n\n' //newVer += '\n\n\n\n\n\n' break // !!! case 'diff-deletedline': oldVer += txt break case 'diff-addedline': newVer += txt break } }) //compare and display txt = WDiffString(oldVer, newVer) //txt = txt.replace(/\x03.*?\x04/g, '<br><br><hr><br><br>') txt = txt.replace(/\x03|\x04/g, '') txt = WDiffShortenOutput(txt) //txt = txt.replace(/¶/g,'<br>') txt = txt.replace(/&amp;/g,'&') //txt = txt.replace(/&lt;/g,'<').replace(/&gt;/g, '>') $('<div style="padding:2px"><br><br><h3>JS Engine diff</h3><hr style="height:5px" />' + txt + '</div>') .insertAfter($tbl)[0].scrollIntoView() cursorWait() } } function importScriptAndRun(url, func) { var s = document.createElement('script') s.type = 'text/javascript' s.src = url + '&action=raw&ctype=text/javascript' if( $.client.profile().name == 'msie') s.onreadystatechange = function(){ if( /loaded|complete/.test(this.readyState) ) func() } else s.onload = func document.getElementsByTagName('head')[0].appendChild(s) } }) 5f2powgk5m7h37ov7lpt912l4sfjxlw 740336 740335 2026-05-03T11:17:31Z Tohaomg 35056 740336 javascript text/javascript //dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:red}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="diff="][href^="/w"],\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]' + (window.dfDiffLinksCSS || '{font-style:italic}') +'\ a[href*="diff="][href^="/w"]:hover,\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]:hover\ {color:red !important}\ .df-popup {margin:0.5em}\ ') }) $(document).keyup( function(e){ //close popup on Escape if( e.which == 27 ) popupClose('.df-instance:last') }) function dfClick(e){ cursorWait() //cancel waiting indicator if something went wrong if( e.shiftKey || e.which != 1) return //is it a diff link? var lnk = $(e.target).closest('a') if( !lnk.length ) return var url = lnk.attr('href'); if(!url) return url.replace(localDomain, '/'); if( ! /^\//.test(url) ) return //external URL var loadURL, dfContainer if( /[&?]diff=/.test(url) ){ // diff if( /differences-(next|prev)link/.test( lnk.attr('id') ) )//prev/next link in diff table dfContainer = lnk.closest('table.diff').parent() else markClickedLink(lnk) if( /:Undelete/.test(url) ) loadURL = url + '&useskin=myskin #content' else loadURL = url + '&action=render&diffonly=true' }else if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && window.dfPinWatchlist //popup for any link && ! lnk.closest('fieldset').length ){ if( ! /\?/.test(url) && ! /(special|служебная):/i.test(url) ) loadURL = url + '?action=render' else loadURL = url + '&useskin=myskin #content' }else{ return } //load diff e.preventDefault() cursorWait(true) dfContainer = dfContainer || popupCreate(e) dfContainer .attr('dfURL', url) .load( loadURL, afterDiffLoaded ) } function afterDiffLoaded(){ cursorWait() var $container = $(this) var url = $container.attr('dfURL') var dfLink = outputLink2('', $container.attr('dfURL'), 'Δ', 'current diff') var $tbl = $container.find('table.diff') if( $tbl.length ) improveTable( $tbl ) if ( $container.hasClass('df-popup') ){ var pgTitle = getTitleFromURL( $tbl.find('td.diff-ntitle a').attr('href') ) var caption = $( '<div class=df-caption>' + '<b>' + outputLink2(pgTitle) + '</b>' + ' (' + outputLink2(pgTitle, '?action=history', 'h') + ' ' + dfLink + ')' + '</div>' ) .prependTo($container) dfAddToolbar($tbl, caption) $container.parent().appendTo('body') }else{ $('#contentSub') .children('.df-link').remove().end() .append( $('<span class=df-link style="margin-left:1em; font-weight:bold" />') .append( dfLink ) ) } } function popupCreate(e){ //set CSS if( ! dfPopupSheet ){ dfPopupSheet = mw.util.addCSS('\ .df-clicked {background-color:lime}\ a.df-clicked-last {background-color:yellow}\ .df-popup {position:absolute; z-index:100; width:95%; border:1px solid #000033; \ font-size:110%; background-color:var(--color-base, #FFFFFF); padding:0 9px 9px 9px }\ .df-caption {background:purple; border:1px outset gray; padding:2px; margin:0 -9px}\ .df-closer {position:absolute; z-index:10; border:2px outset gray;\ width:20px; height:20px; cursor:pointer; background:orange; opacity:0.5}') } //create popup var dfN = $('.df-popup').length var dfPopup = $('<div class=df-popup />') .css({ top: $(window).scrollTop() + 30 + dfN * 5 + 'px', left: 10 + dfN * 5 + 'px' }) .click( function(e){ //close popup when clicking on edges and and caption if( /df-(popup|caption)/.test(e.target.className) ) popupClose(this) else $(this).addClass('persistent') }) .click(dfClick) // .mouseleave( function(e){ // if( ! /persistent/.test(this.className) ) popupClose(this) // }) //create 'closing' square on mouse position var dfCloser = $('<div class=df-closer title=close>&nbsp;</div>') .css({top: e.pageY-10, left: e.pageX-10}) .mouseleave( function(){ $(this).remove() }) .click( function(){ popupClose(this) } ) $('<div class=df-instance />') //container for popup and closer .append(dfPopup, dfCloser) // if (isIE) hideAllSelectElements(true) // !!! return dfPopup } function popupClose(el){ $(el).closest('.df-instance').remove() } //****************************************************************************************** function cursorWait(isWait){ if( window.dfNoWaitCursor ) return document.body.style.cursor = isWait ? 'wait' : '' } function markClickedLink(lnk){ //and mark link as "clicked" $('a.df-clicked-last').removeClass('df-clicked-last') //rm class from previos click lnk.addClass('df-clicked df-clicked-last') if( /Watchlist|Recentchanges/.test(mw.config.get('wgCanonicalSpecialPageName')) ) lnk.closest('li').add(lnk.closest('tr')).addClass('df-clicked') } var dfHighlightSheet, dfImprovementSheet function addDiffTableCSS(){ if( dfImprovementSheet ) return dfImprovementSheet = mw.util.addCSS('\ td.diff-addedline, td.diff-deletedline {font-size:100%}\ table.diff {border-spacing:1px}\ table.diff td {vertical-align:top}\ table.diff {width:99%}\ body table.diff, td.diff-otitle, td.diff-ntitle {background:brown}\ table.diff td.diff-lineno {border-top: 25px solid #FBFBFB}\ tr.df-deleted td {background-color:yellow}\ table.diff td div {min-height:1em}\ td.df-deletedwords, td.df-addedwords\ {background:pink; border:1px dotted gray; padding:2px}\ td.df-deletedwords span.diffchange {background-color:purple}\ td.df-addedwords span.diffchange {background-color:orange; color:black; font-weight:normal}\ tr.odd td.diff-addedline {background-color:green}\ span.sig {border:1px dotted gray; border-bottom:none; font-family:cursive; font-size:90%}\ td.df-header {font-weight:bold; font-size:120%; padding-top:15px}\ tr.df-change td {font-size:100%}\ tr.df-added ins.diffchange {color:inherit; font-weight:normal; border:none}\ div.df-toolbar span.df-improve-btn {border:1px inset #EEEEEE}\ .df-btn {padding:2px; border:1px solid gray; margin-right:2px; cursor:pointer}\ table.diff td {cursor:help}\ table.diff td div, table.diff td.diff-multi {margin:0 8px 0 2px; cursor:default}' + (window.dfDiffTableCSS || '')) //user CSS //cursor stuff shows that TD is clickable (sticking out from under DIV inside) //padding: 0 8px 0 2px //different approach to make cells clickable //+ 'table.diff {border-spacing:0} table.diff td {border-top:4px solid #FBFBFB} table.diff td.diff-deletedline {border-right: 6px solid #FBFBFB}' } //============================================================================== function improveTable($tbl){ if (window.dfMaxImproveSize && $tbl.html().length>dfMaxImproveSize) return //improve rows //curTitle = $tbl.parent()[0].diffTitle //needed in improveCell() for relative links curTitle = getTitleFromURL( $tbl.parent().attr('dfURL') ) curStripes = false addDiffTableCSS() $tbl.find('tr').each(improveRow) $tbl.click(tableOnclick) } function dfAddToolbar($tbl, where){ //return $('<div class=df-toolbar style="float:right" />') .append( //btn(changeTable, '¤', 'Enable/disable improvements'), btn(diffJSEngine, 'js', 'Javascript diff engine') ) .prependTo(where) function changeTable(){alert(11)} function btn(func, txt, tip){ //creates <span> button return $('<span class=df-btn title="' + tip + '">' + txt + '</span>') .click( { dTable: $tbl }, func ) } } function improveRow(){ var tr = this, tds = $(this).find('td'), td if (tds.length <= 2) return // 'diff info' or 'intermediate revisions' or 'Line xx:' // case 'diff-otitle': case 'diff-multi': case 'diff-lineno': if( tds.length == 3 ){ if( tds[1].className == 'diff-deletedline' ){ tr.className += ' df-deleted' //new class, means the line was simply deleted, has pink background if( tds[1].innerHTML.length==0 ) tds[1].innerHTML = '<br />' expandCell(tds[1]) return }else if( tds[2].className == 'diff-addedline' ){ tr.className += ' df-added' improveCell(tds[2]) htm = tds[2].innerHTML if( !htm.length ) tds[2].innerHTML = '<br />' if( curStripes ) tr.className += ' odd' if( /<span class="sig">/i.test(htm) ) curStripes = !curStripes expandCell(tds[2]) return } }else if (tds[1].className == 'diff-context'){ tr.className = 'df-context' if (window.dfParseContext) improveCell(tds[1]) expandCell(tds[1]) curStripes = false return }else{ //normal yellow/green rows with 4 cells tr.className = 'df-change' tds[1].colSpan = tds[3].colSpan = 2 tr.removeChild(tds[2]); tr.removeChild(tds[0]) } //if( window.dfImproveAdvanced ) improveRowMore(tr) return function expandCell(td, clss){ /* while (td.nextSibling) tr.removeChild(td.nextSibling) while (td.previousSibling) tr.removeChild(td.previousSibling) td.colSpan = 4 if( clss ) td.className = clss */ tr.innerHTML = '<td colspan=4 class="' + td.className + (clss?' ' + clss:'') + '">' + td.innerHTML + '</td>' } function splitRowsUp(tdGoesUp){ tds[0].colSpan = 4 tds[1].colSpan = 4 //tr.removeChild(tds[2]) //tr.removeChild(tds[0]) var trnew = document.createElement('tr') trnew.className = 'df-change' trnew.appendChild(tdGoesUp) tr.parentNode.insertBefore(trnew, tr) } } //improveRow() function improveCell(cell){ if (window.dfNoWikiParsing) return cell = $(cell) var htm = cell.html() if (htm.length == 0) return //cell.innerHTML = '&nbsp;' cell.data('origHTML', htm) if (/^==.*== *$/i.test(cell.text())) cell.addClass('df-header') htm = htm.replace(/\u00A0/g, '<b>\u00B7</b>') htm = htm.replace(/({\{u(?:ser(?:links)?)?\|)([^}]+)}\}/g, function(str,tmpl,user){ return tmpl + outputLink2('special:contributions/'+user,'',user) + '}}' }) //mark signatures htm = htm.replace(/(\[\[[^\[]{4,65})?\d\d:\d\d, \d\d? \S{3,9} 20\d\d \(UTC\)/g, '<span class="sig">$&</span>') htm = htm.replace(/\{\{unsigned[^\}]\}\}/i, '<span class="sig">$&</span>') //[[link]] var CatOrFileRegExp = RegExp('^('+mw.config.get('wgFormattedNamespaces')[6]+'|' +mw.config.get('wgFormattedNamespaces')[14]+'|category|image|file):|\.(jpg|png|svg|gif)$','i') htm = htm.replace(/\[\[([^\]><}{|]+)\|?([^\]><]*)?\]\]/g, function(wikicode,page,name){ if (/http:\/\//i.test(page)) return wikicode //user made a mistake if (CatOrFileRegExp.test(page)) name = page+(name?'|'+name:'') //file or category, show in full else if (!name) name = page if (/^[#\/]/.test(page)) page = curTitle + page //relative link else if (/^[a-z]{2,7}:/.test(page)) page = 'Special:Search/'+page //possible interproject link, some are not "local" return outputLink2(page, '', name, wikicode) }) // [http://...] htm = htm.replace(/\[(https?:\/\/[^ \]><]*)( [^\]]*)?\]/g, // function (str,link,name){ var output = '<a href=' + link, title, tip, nameWas = name var scriptsPath = mw.config.get('wgServer') + mw.config.get('wgScript') if (link.indexOf(scriptsPath) == 0){ //local link tip = tryDecodeURI(link.substring((scriptsPath).length+1)) if (!name){ name = getTitleFromURL(link) || tip if (/diff=/.test(link)) name = 'diff: ' + name else if (tip.match(/action=history/)) name = 'hist: ' + name else if (tip.match(/oldid=/)) name = 'oldid: ' + name else name = 'wiki: ' + name } } else { //ext link tip = tryDecodeURI(link.substring(7)) output += ' class="external text"' if (!name) name = tip } if (!nameWas && (name.length > 70)) name = name.substring(0,60) + '… …' return output + ' title="' + tip + '">[' + name + ']</a>' }) cell.html(htm) function tryDecodeURI(s){ try{s=decodeURIComponent(s)}catch (e){}; return s } } function outputLink2(page, params, name, tooltip){ name = name || page page = page.replace(/&amp;/gi,'&').replace(/#.+$/, calcAnchor) return '<a href="'+ mw.config.get('wgArticlePath').replace(/\$1/,'') + encodeURI(page).replace(/\?/g,'%3F') + (params||'') + '" title="' + (tooltip||name).replace(/"/g,'&quot;') + '">' + name + '</a>' //' } function calcAnchor(txt){ //try to create href anchor similar to Parser.php::guessSectionNameFromWikiText() txt = $.trim(txt).replace(/#/g,'') .replace(/\[\[([^|]+\|)?([^\]]+)\]\]/g, '$2') //[[foo|bar]] -> bar .replace(/<.*?>/g, '').replace(/ /g,'_') // (we skip step "HTML entities are turned into their proper characters") return '#' + encodeURIComponent(txt).replace('%3A', ':').replace(/%([0-9A-F][0-9A-F])/g, '.$1') //maybe encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26')) ? } function getTitleFromURL(url){ var tt = /title=([^&>"]+)/.exec(url) //" if( tt ) return decodeURIComponent(tt[1]).replace(/_/g,' ') else return '' } function tableOnclick(e){ var trg = e.target if( trg.className ) switch ( trg.className ){ //case 'diff-lineno': changeBlock(trg.parentNode); return //case 'diff-otitle': case 'diff-ntitle': return case 'diff-addedline': case 'diff-deletedline': case 'diff-context': //if( trg.nodeName != 'TD' || $(trg).parents('table.diff').length == 0 ) break //parse wikicode in already improved row when clicked on white border above row var orig = $(trg).data('origHTML') if( orig ) $(trg).html(orig).data('origHTML','') else improveCell(trg) return } } function changeBlockXXX(row){ //switch improvement level for this part of diff table var dTbody = row.parentNode, rowIdx = 1, isImproved //find clicked row number while (rowIdx < dTbody.rows.length && dTbody.rows[rowIdx] != row) rowIdx++ if (dTbody.rows[rowIdx] != row) return //check if rows are improved or not if (row.className == 'df-lineno'){ isImproved = true var origTable = createTableFromHTML(requestedPages[dTbody.parentNode.parentNode.dfURL]) }else dfImprovementSheet.disabled = false //improve / de-improve rows do{ if (isImproved) dTbody.replaceChild(origTable.rows[rowIdx].cloneNode(true), row) else improveRow(row) }while((row=dTbody.rows[++rowIdx]) && row.cells[0].className != 'diff-lineno') } // *** JS Diff Engine *** function diffJSEngine(e){ var $tbl = e.data.dTable var htm = $tbl.data('origHTML') //call and run JS diff engine if( window.WDiffString ) diffJSGo() else importScriptAndRun('http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js', diffJSGo) function diffJSGo(){ cursorWait(true) //var var oldVer = '', newVer = '', txt, marker $tbl.find('td').each(function(){ txt = $(this).data('origHTML') || this.innerHTML txt = txt.replace(/<.+?>/g,'') + '\n' switch( this.className ){ case 'diff-context': marker = '\x03' + txt + '\x04\n' oldVer += marker newVer += marker i += 2 //skip other context cell break case 'diff-lineno': //oldVer += '\n\n\n\n\n\n' //newVer += '\n\n\n\n\n\n' break // !!! case 'diff-deletedline': oldVer += txt break case 'diff-addedline': newVer += txt break } }) //compare and display txt = WDiffString(oldVer, newVer) //txt = txt.replace(/\x03.*?\x04/g, '<br><br><hr><br><br>') txt = txt.replace(/\x03|\x04/g, '') txt = WDiffShortenOutput(txt) //txt = txt.replace(/¶/g,'<br>') txt = txt.replace(/&amp;/g,'&') //txt = txt.replace(/&lt;/g,'<').replace(/&gt;/g, '>') $('<div style="padding:2px"><br><br><h3>JS Engine diff</h3><hr style="height:5px" />' + txt + '</div>') .insertAfter($tbl)[0].scrollIntoView() cursorWait() } } function importScriptAndRun(url, func) { var s = document.createElement('script') s.type = 'text/javascript' s.src = url + '&action=raw&ctype=text/javascript' if( $.client.profile().name == 'msie') s.onreadystatechange = function(){ if( /loaded|complete/.test(this.readyState) ) func() } else s.onload = func document.getElementsByTagName('head')[0].appendChild(s) } }) 0al54zhvks4i9pmh3x99tzeoxkeztvk 740337 740336 2026-05-03T11:21:20Z Tohaomg 35056 740337 javascript text/javascript //dfPinWatchlist = true $(function(){ var dfPopupSheet mw.util.addCSS('\ td.diff-addedline:hover .diffchange, td.diff-deletedline:hover .diffchange {background:red}\ ') var localDomain = new RegExp('^https?:' + mw.config.get('wgServer').replace(/([\.\/])/g,'\\$1') + '\/') $(function(){ var $tbl = $('table.diff') if( $tbl.length ){ improveTable($tbl) dfAddToolbar($tbl, '#contentSub') } mw.util.$content.click(dfClick) mw.util.addCSS('\ a[href*="diff="][href^="/w"],\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]' + (window.dfDiffLinksCSS || '{font-style:italic}') +'\ a[href*="diff="][href^="/w"]:hover,\ a[href*="diff="][href*="' + mw.config.get('wgServer') + '"]:hover\ {color:red !important}\ .df-popup {margin:0.5em}\ ') }) $(document).keyup( function(e){ //close popup on Escape if( e.which == 27 ) popupClose('.df-instance:last') }) function dfClick(e){ cursorWait() //cancel waiting indicator if something went wrong if( e.shiftKey || e.which != 1) return //is it a diff link? var lnk = $(e.target).closest('a') if( !lnk.length ) return var url = lnk.attr('href'); if(!url) return url.replace(localDomain, '/'); if( ! /^\//.test(url) ) return //external URL var loadURL, dfContainer if( /[&?]diff=/.test(url) ){ // diff if( /differences-(next|prev)link/.test( lnk.attr('id') ) )//prev/next link in diff table dfContainer = lnk.closest('table.diff').parent() else markClickedLink(lnk) if( /:Undelete/.test(url) ) loadURL = url + '&useskin=myskin #content' else loadURL = url + '&action=render&diffonly=true' }else if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && window.dfPinWatchlist //popup for any link && ! lnk.closest('fieldset').length ){ if( ! /\?/.test(url) && ! /(special|служебная):/i.test(url) ) loadURL = url + '?action=render' else loadURL = url + '&useskin=myskin #content' }else{ return } //load diff e.preventDefault() cursorWait(true) dfContainer = dfContainer || popupCreate(e) dfContainer .attr('dfURL', url) .load( loadURL, afterDiffLoaded ) } function afterDiffLoaded(){ cursorWait() var $container = $(this) var url = $container.attr('dfURL') var dfLink = outputLink2('', $container.attr('dfURL'), 'Δ', 'current diff') var $tbl = $container.find('table.diff') if( $tbl.length ) improveTable( $tbl ) if ( $container.hasClass('df-popup') ){ var pgTitle = getTitleFromURL( $tbl.find('td.diff-ntitle a').attr('href') ) var caption = $( '<div class=df-caption>' + '<b>' + outputLink2(pgTitle) + '</b>' + ' (' + outputLink2(pgTitle, '?action=history', 'h') + ' ' + dfLink + ')' + '</div>' ) .prependTo($container) dfAddToolbar($tbl, caption) $container.parent().appendTo('body') }else{ $('#contentSub') .children('.df-link').remove().end() .append( $('<span class=df-link style="margin-left:1em; font-weight:bold" />') .append( dfLink ) ) } } function popupCreate(e){ //set CSS if( ! dfPopupSheet ){ dfPopupSheet = mw.util.addCSS('\ .df-clicked {background-color:lime}\ a.df-clicked-last {background-color:yellow}\ .df-popup {position:absolute; z-index:100; width:95%; border:1px solid #000033; \ font-size:110%; background-color:var(--background-color-base, #FFFFFF); padding:0 9px 9px 9px }\ .df-caption {background:purple; border:1px outset gray; padding:2px; margin:0 -9px}\ .df-closer {position:absolute; z-index:10; border:2px outset gray;\ width:20px; height:20px; cursor:pointer; background:orange; opacity:0.5}') } //create popup var dfN = $('.df-popup').length var dfPopup = $('<div class=df-popup />') .css({ top: $(window).scrollTop() + 30 + dfN * 5 + 'px', left: 10 + dfN * 5 + 'px' }) .click( function(e){ //close popup when clicking on edges and and caption if( /df-(popup|caption)/.test(e.target.className) ) popupClose(this) else $(this).addClass('persistent') }) .click(dfClick) // .mouseleave( function(e){ // if( ! /persistent/.test(this.className) ) popupClose(this) // }) //create 'closing' square on mouse position var dfCloser = $('<div class=df-closer title=close>&nbsp;</div>') .css({top: e.pageY-10, left: e.pageX-10}) .mouseleave( function(){ $(this).remove() }) .click( function(){ popupClose(this) } ) $('<div class=df-instance />') //container for popup and closer .append(dfPopup, dfCloser) // if (isIE) hideAllSelectElements(true) // !!! return dfPopup } function popupClose(el){ $(el).closest('.df-instance').remove() } //****************************************************************************************** function cursorWait(isWait){ if( window.dfNoWaitCursor ) return document.body.style.cursor = isWait ? 'wait' : '' } function markClickedLink(lnk){ //and mark link as "clicked" $('a.df-clicked-last').removeClass('df-clicked-last') //rm class from previos click lnk.addClass('df-clicked df-clicked-last') if( /Watchlist|Recentchanges/.test(mw.config.get('wgCanonicalSpecialPageName')) ) lnk.closest('li').add(lnk.closest('tr')).addClass('df-clicked') } var dfHighlightSheet, dfImprovementSheet function addDiffTableCSS(){ if( dfImprovementSheet ) return dfImprovementSheet = mw.util.addCSS('\ td.diff-addedline, td.diff-deletedline {font-size:100%}\ table.diff {border-spacing:1px}\ table.diff td {vertical-align:top}\ table.diff {width:99%}\ body table.diff, td.diff-otitle, td.diff-ntitle {background:var(--background-color-base, background-color-neutral)}\ table.diff td.diff-lineno {border-top: 25px solid #FBFBFB}\ tr.df-deleted td {background-color:yellow}\ table.diff td div {min-height:1em}\ td.df-deletedwords, td.df-addedwords\ {background:pink; border:1px dotted gray; padding:2px}\ td.df-deletedwords span.diffchange {background-color:purple}\ td.df-addedwords span.diffchange {background-color:orange; color:black; font-weight:normal}\ tr.odd td.diff-addedline {background-color:green}\ span.sig {border:1px dotted gray; border-bottom:none; font-family:cursive; font-size:90%}\ td.df-header {font-weight:bold; font-size:120%; padding-top:15px}\ tr.df-change td {font-size:100%}\ tr.df-added ins.diffchange {color:inherit; font-weight:normal; border:none}\ div.df-toolbar span.df-improve-btn {border:1px inset #EEEEEE}\ .df-btn {padding:2px; border:1px solid gray; margin-right:2px; cursor:pointer}\ table.diff td {cursor:help}\ table.diff td div, table.diff td.diff-multi {margin:0 8px 0 2px; cursor:default}' + (window.dfDiffTableCSS || '')) //user CSS //cursor stuff shows that TD is clickable (sticking out from under DIV inside) //padding: 0 8px 0 2px //different approach to make cells clickable //+ 'table.diff {border-spacing:0} table.diff td {border-top:4px solid #FBFBFB} table.diff td.diff-deletedline {border-right: 6px solid #FBFBFB}' } //============================================================================== function improveTable($tbl){ if (window.dfMaxImproveSize && $tbl.html().length>dfMaxImproveSize) return //improve rows //curTitle = $tbl.parent()[0].diffTitle //needed in improveCell() for relative links curTitle = getTitleFromURL( $tbl.parent().attr('dfURL') ) curStripes = false addDiffTableCSS() $tbl.find('tr').each(improveRow) $tbl.click(tableOnclick) } function dfAddToolbar($tbl, where){ //return $('<div class=df-toolbar style="float:right" />') .append( //btn(changeTable, '¤', 'Enable/disable improvements'), btn(diffJSEngine, 'js', 'Javascript diff engine') ) .prependTo(where) function changeTable(){alert(11)} function btn(func, txt, tip){ //creates <span> button return $('<span class=df-btn title="' + tip + '">' + txt + '</span>') .click( { dTable: $tbl }, func ) } } function improveRow(){ var tr = this, tds = $(this).find('td'), td if (tds.length <= 2) return // 'diff info' or 'intermediate revisions' or 'Line xx:' // case 'diff-otitle': case 'diff-multi': case 'diff-lineno': if( tds.length == 3 ){ if( tds[1].className == 'diff-deletedline' ){ tr.className += ' df-deleted' //new class, means the line was simply deleted, has pink background if( tds[1].innerHTML.length==0 ) tds[1].innerHTML = '<br />' expandCell(tds[1]) return }else if( tds[2].className == 'diff-addedline' ){ tr.className += ' df-added' improveCell(tds[2]) htm = tds[2].innerHTML if( !htm.length ) tds[2].innerHTML = '<br />' if( curStripes ) tr.className += ' odd' if( /<span class="sig">/i.test(htm) ) curStripes = !curStripes expandCell(tds[2]) return } }else if (tds[1].className == 'diff-context'){ tr.className = 'df-context' if (window.dfParseContext) improveCell(tds[1]) expandCell(tds[1]) curStripes = false return }else{ //normal yellow/green rows with 4 cells tr.className = 'df-change' tds[1].colSpan = tds[3].colSpan = 2 tr.removeChild(tds[2]); tr.removeChild(tds[0]) } //if( window.dfImproveAdvanced ) improveRowMore(tr) return function expandCell(td, clss){ /* while (td.nextSibling) tr.removeChild(td.nextSibling) while (td.previousSibling) tr.removeChild(td.previousSibling) td.colSpan = 4 if( clss ) td.className = clss */ tr.innerHTML = '<td colspan=4 class="' + td.className + (clss?' ' + clss:'') + '">' + td.innerHTML + '</td>' } function splitRowsUp(tdGoesUp){ tds[0].colSpan = 4 tds[1].colSpan = 4 //tr.removeChild(tds[2]) //tr.removeChild(tds[0]) var trnew = document.createElement('tr') trnew.className = 'df-change' trnew.appendChild(tdGoesUp) tr.parentNode.insertBefore(trnew, tr) } } //improveRow() function improveCell(cell){ if (window.dfNoWikiParsing) return cell = $(cell) var htm = cell.html() if (htm.length == 0) return //cell.innerHTML = '&nbsp;' cell.data('origHTML', htm) if (/^==.*== *$/i.test(cell.text())) cell.addClass('df-header') htm = htm.replace(/\u00A0/g, '<b>\u00B7</b>') htm = htm.replace(/({\{u(?:ser(?:links)?)?\|)([^}]+)}\}/g, function(str,tmpl,user){ return tmpl + outputLink2('special:contributions/'+user,'',user) + '}}' }) //mark signatures htm = htm.replace(/(\[\[[^\[]{4,65})?\d\d:\d\d, \d\d? \S{3,9} 20\d\d \(UTC\)/g, '<span class="sig">$&</span>') htm = htm.replace(/\{\{unsigned[^\}]\}\}/i, '<span class="sig">$&</span>') //[[link]] var CatOrFileRegExp = RegExp('^('+mw.config.get('wgFormattedNamespaces')[6]+'|' +mw.config.get('wgFormattedNamespaces')[14]+'|category|image|file):|\.(jpg|png|svg|gif)$','i') htm = htm.replace(/\[\[([^\]><}{|]+)\|?([^\]><]*)?\]\]/g, function(wikicode,page,name){ if (/http:\/\//i.test(page)) return wikicode //user made a mistake if (CatOrFileRegExp.test(page)) name = page+(name?'|'+name:'') //file or category, show in full else if (!name) name = page if (/^[#\/]/.test(page)) page = curTitle + page //relative link else if (/^[a-z]{2,7}:/.test(page)) page = 'Special:Search/'+page //possible interproject link, some are not "local" return outputLink2(page, '', name, wikicode) }) // [http://...] htm = htm.replace(/\[(https?:\/\/[^ \]><]*)( [^\]]*)?\]/g, // function (str,link,name){ var output = '<a href=' + link, title, tip, nameWas = name var scriptsPath = mw.config.get('wgServer') + mw.config.get('wgScript') if (link.indexOf(scriptsPath) == 0){ //local link tip = tryDecodeURI(link.substring((scriptsPath).length+1)) if (!name){ name = getTitleFromURL(link) || tip if (/diff=/.test(link)) name = 'diff: ' + name else if (tip.match(/action=history/)) name = 'hist: ' + name else if (tip.match(/oldid=/)) name = 'oldid: ' + name else name = 'wiki: ' + name } } else { //ext link tip = tryDecodeURI(link.substring(7)) output += ' class="external text"' if (!name) name = tip } if (!nameWas && (name.length > 70)) name = name.substring(0,60) + '… …' return output + ' title="' + tip + '">[' + name + ']</a>' }) cell.html(htm) function tryDecodeURI(s){ try{s=decodeURIComponent(s)}catch (e){}; return s } } function outputLink2(page, params, name, tooltip){ name = name || page page = page.replace(/&amp;/gi,'&').replace(/#.+$/, calcAnchor) return '<a href="'+ mw.config.get('wgArticlePath').replace(/\$1/,'') + encodeURI(page).replace(/\?/g,'%3F') + (params||'') + '" title="' + (tooltip||name).replace(/"/g,'&quot;') + '">' + name + '</a>' //' } function calcAnchor(txt){ //try to create href anchor similar to Parser.php::guessSectionNameFromWikiText() txt = $.trim(txt).replace(/#/g,'') .replace(/\[\[([^|]+\|)?([^\]]+)\]\]/g, '$2') //[[foo|bar]] -> bar .replace(/<.*?>/g, '').replace(/ /g,'_') // (we skip step "HTML entities are turned into their proper characters") return '#' + encodeURIComponent(txt).replace('%3A', ':').replace(/%([0-9A-F][0-9A-F])/g, '.$1') //maybe encodeURI(p1.replace(/\?/g,'%3F').replace(/&/g,'%26')) ? } function getTitleFromURL(url){ var tt = /title=([^&>"]+)/.exec(url) //" if( tt ) return decodeURIComponent(tt[1]).replace(/_/g,' ') else return '' } function tableOnclick(e){ var trg = e.target if( trg.className ) switch ( trg.className ){ //case 'diff-lineno': changeBlock(trg.parentNode); return //case 'diff-otitle': case 'diff-ntitle': return case 'diff-addedline': case 'diff-deletedline': case 'diff-context': //if( trg.nodeName != 'TD' || $(trg).parents('table.diff').length == 0 ) break //parse wikicode in already improved row when clicked on white border above row var orig = $(trg).data('origHTML') if( orig ) $(trg).html(orig).data('origHTML','') else improveCell(trg) return } } function changeBlockXXX(row){ //switch improvement level for this part of diff table var dTbody = row.parentNode, rowIdx = 1, isImproved //find clicked row number while (rowIdx < dTbody.rows.length && dTbody.rows[rowIdx] != row) rowIdx++ if (dTbody.rows[rowIdx] != row) return //check if rows are improved or not if (row.className == 'df-lineno'){ isImproved = true var origTable = createTableFromHTML(requestedPages[dTbody.parentNode.parentNode.dfURL]) }else dfImprovementSheet.disabled = false //improve / de-improve rows do{ if (isImproved) dTbody.replaceChild(origTable.rows[rowIdx].cloneNode(true), row) else improveRow(row) }while((row=dTbody.rows[++rowIdx]) && row.cells[0].className != 'diff-lineno') } // *** JS Diff Engine *** function diffJSEngine(e){ var $tbl = e.data.dTable var htm = $tbl.data('origHTML') //call and run JS diff engine if( window.WDiffString ) diffJSGo() else importScriptAndRun('http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js', diffJSGo) function diffJSGo(){ cursorWait(true) //var var oldVer = '', newVer = '', txt, marker $tbl.find('td').each(function(){ txt = $(this).data('origHTML') || this.innerHTML txt = txt.replace(/<.+?>/g,'') + '\n' switch( this.className ){ case 'diff-context': marker = '\x03' + txt + '\x04\n' oldVer += marker newVer += marker i += 2 //skip other context cell break case 'diff-lineno': //oldVer += '\n\n\n\n\n\n' //newVer += '\n\n\n\n\n\n' break // !!! case 'diff-deletedline': oldVer += txt break case 'diff-addedline': newVer += txt break } }) //compare and display txt = WDiffString(oldVer, newVer) //txt = txt.replace(/\x03.*?\x04/g, '<br><br><hr><br><br>') txt = txt.replace(/\x03|\x04/g, '') txt = WDiffShortenOutput(txt) //txt = txt.replace(/¶/g,'<br>') txt = txt.replace(/&amp;/g,'&') //txt = txt.replace(/&lt;/g,'<').replace(/&gt;/g, '>') $('<div style="padding:2px"><br><br><h3>JS Engine diff</h3><hr style="height:5px" />' + txt + '</div>') .insertAfter($tbl)[0].scrollIntoView() cursorWait() } } function importScriptAndRun(url, func) { var s = document.createElement('script') s.type = 'text/javascript' s.src = url + '&action=raw&ctype=text/javascript' if( $.client.profile().name == 'msie') s.onreadystatechange = function(){ if( /loaded|complete/.test(this.readyState) ) func() } else s.onload = func document.getElementsByTagName('head')[0].appendChild(s) } }) 7uoj9hiisqmw3g0pfu6ttt7fa47vto9 User:Tohaomg/common.js 2 175123 740329 2026-05-03T11:08:54Z Tohaomg 35056 Created page with "mw.loader.load("//test.wikipedia.org/w/index.php?title=User:Tohaomg/Gadget-Diffs.js&action=raw&ctype=text/javascript");" 740329 javascript text/javascript mw.loader.load("//test.wikipedia.org/w/index.php?title=User:Tohaomg/Gadget-Diffs.js&action=raw&ctype=text/javascript"); o1wpqe14hmwtmoya7y1da3msk57nqke