ALMANAH FLACARA

Negru de corb

July 29th, 2012, com Comenteaza

Ann Cleeves este o autoare britanică. Trăieşte în West Yorkshire alături de soţul ei şi de cele  două  fiice ale lor.

„Negru  de corb“, cu titlul original  „Black Raven“, este prima  parte a Cvartetului Shetland (acţiunea celor  patru romane are  loc în Insulele britanice Shetland). Volumul a fost premiat cu Duncan  Lawrie Dagger  Award în 2006, la categoria cel mai bun roman. Iniţial autoarea a dorit un roman independent, singular, apoi a promis doar… un cvartet, dar în curând va apărea în Marea  Britanie al cincilea  volum al seriei.

Ediţia română, Crime Scene  Publishing 2012

 

CAPITOLUL 1

Ora 1:20 dimineaţa, ziua  de Anul  Nou. Magnus ştia ce oră e datorită ceasului mare, ceasul mamei lui, care-şi ocupa locul pe poliţa de deasupra șemineului. În colţ, corbul  din  colivia de răchită  gemea  și croncănea în somn.  Magnus aştepta.  Camera  era  pregătită pentru  oaspeţi, focul înteţit  cu turbă şi pe masă se afla o sticlă de whisky, precum și prăjitura cu ghimbir pe care o cumpărase de la Safeway când fusese în Lerwick. Moţăia,  dar  nu  vroia  să se bage  în pat,  numai pentru cazul în care ar fi sunat cineva la ușă. Atât timp  cât era  lumină la geam,  cineva  putea să-i facă o vizită,  plin  de veselie,  băutură şi poveşti. Timp  de opt ani, nu-l vizitase nimeni să-i ureze un   An   Nou   fericit,   dar   el   totuşi    aștepta. Preventiv.

Afară  era  linişte  deplină. Nu  se auzea  nici măcar adierea vântului. Era foarte ciudat când în Shetland nu  bătea  vântul. Oamenii îşi  ciuleau urechile, întrebându-se ce lipseşte.  Ninsese ușor ceva mai devreme și, odată cu amurgul, stratul subţire de zăpadă căpătase un  lustru de gheaţă dură ca  diamantul, sclipind în  ultima rază  de lumină şi apoi  în lumina farului. Frigul  era încă un  motiv  pentru care  Magnus rămăsese acolo unde se  afla.  În  dormitor, gheaţa probabil era deja  groasă   pe  interiorul  ferestrei, cearşafurile îngheţate şi umede.

În mod  sigur  adormise. Dacă ar fi fost treaz, le-ar fi auzit venind, pentru că nu era nimic silenţios în felul în care se comportau. Nu se apropiau deloc  pe furiş,  din  contra.  Le-ar fi auzit  râsul  şi pașii poticniţi, ar fi observat strălucirea lanternei prin fereastra fără perdea. L-a deşteptat, însă, ciocănitul  de la uşă. Privi în direcţia aceea cu o tresărire, ştiind că tocmai se trezise dintr-un coşmar, dar fără siguranţa detaliilor.

–  Intră! – strigă.  Intră, intră.

Se luptă să se ridice  în picioare, ţeapăn din cauza  poziţiei incomode în care adormise. Probabil că ajunseseră deja în verandă. Le auzea susurul şoaptelor.

Uşa se deschise, lăsând să pătrundă un suflu de aer îngheţat şi două fete tinere,  îmbrăcate în haine  strident colorate   şi  strălucitoare precum păsările exotice. Realiză că băuseră. Se propteau una de cealaltă.  Nu erau  îmbrăcate adecvat pentru vremea aceea, totuşi obrajii le erau îmbujoraţi şi putea simţi sănătatea pe care o emanau ca pe căldură. Una era blondă, cealaltă brunetă. Blonda era cea mai drăguţă, rotunjoară şi catifelată, dar Magnus o remarcă întâi pe cea brunetă. Părul  ei negru era brăzdat de șuviţe  de un albastru luminiscent.  Mai mult  decât  orice,  i-ar fi plăcut să-i atingă  părul, dar  ştia prea  bine că nu  era foarte indicat. N-ar fi făcut nimic altceva decât să le sperie.

– Intraţi – spuse încă o dată, deşi se aflau deja în cameră.

Probabil suna  ca un  bătrân senil,  repetând aceleaşi  cuvinte, fără nici un rost. Oamenii obișnuiau să râdă  de el. Îi spuneau că e cam lent  şi probabil aveau dreptate. Un  zâmbet îi miji  pe buze,  auzind în minte  cuvintele mamei  sale: „Să faci bine să-ţi ștergi rânjetul ăla tâmpit de pe faţă. Vrei ca oamenii să te creadă mai ţicnit decât  eşti în realitate?”

Fetele chicotiră şi înaintară în cameră. El închise   uşa  scorojită   de  vreme   care  dădea în verandă. Vroia  să ţină  frigul  afară,  plus  că era înspăimântat că  fetele  ar  fi  putut pleca.  Nu-I venea  să creadă că nişte creaturi atât de frumoa- se apăruseră din senin pe treptele casei lui.

–  Luaţi loc – le invită.

Nu avea decât un singur scaun pe care-l folosea el însuși, dar sub masă se aflau celelalte două scaune  pe care unchiul său le meșterise din lemn de plută, așa că le trase afară.

–   Haideţi să  beţi  ceva  cu  mine  în  cinstea Noului An.

Fetele chicotiră din nou,  roșind ușor,  apoi se așezară.  Aveau  beteală   în  păr   şi  hainele  din blană, catifea şi mătase. Cea blondă avea ghetuţe din  piele  atât  de  strălucitoare, încât  arătau ca gudronul ud, cu catarame argintii şi lanţuri mici. Tocurile  erau  înalte şi vârfurile ascuţite. Magnus nu mai văzuse niciodată încălţăminte ca aceea şi, pentru un moment, nu-şi putu lua ochii de la ele. Pantofii  fetei  brunete erau  roşii.  El se așeză  în capul mesei.

–  Nu cred că vă cunosc,  nu-i așa? – le întrebă, cu toate că, uitându-se la ele mai de aproape, realiză  că le mai văzuse trecând pe lângă casă.

Vorbea rar, aşa încât ele să-l înţeleagă. Uneori îşi înghiţea vorbele.  Cuvintele îi sunau ciudat, precum croncănitul corbului. Învăţase corbul  să spună câteva  cuvinte. De multe  ori, nu  avea  pe nimeni altcineva cu care să vorbească. Încercă  o altă întrebare:

– De unde sunteţi?

–  Am fost în Lerwick.

Scaunele  erau  joase şi fata blondă trebuia să dea puţin capul  pe spate  pentru a privi  în sus la el. Îi putea vedea limba şi gâtul roz. Bluza scurtă din mătase îi ieșise din betelia fustei, iar el zări o fâşie de carne  la fel de mătăsoasă precum materialul bluzei.

– Am petrecut de Anul Nou. După care ne-a adus  o maşină până  la capătul străzii.  Tocmai eram în drum spre casă, când am văzut lumină la tine.

– Păi, în cazul ăsta, ce-ar fi să bem un pahar?

– propuse el dornic. Ar cam trebui, nu?

Îi aruncă o privire fetei brunete care cerceta camera, mişcându-şi ochii încet, absorbind totul.

–   Ne-am  adus  băutura noastră – răspunse blonda din nou.

Scoase o sticlă din geanta ei de umăr tricotată pe care o ţinea pe genunchi. Sticla avea dopul înţepenit şi era plină  trei sferturi. El își dădu cu presupusul că înăuntru se afla  vin  alb,  dar  nu putea fi sigur.  Nu  gustase niciodată vinul.  Ea scoase  dopul sticlei  cu  dinţii  ei albi  şi ascuţiţi.

Gestul  îl şocă. Realizând ce făcea, își dori să strige la ea să se oprească. Își imagină dinţii  rupându-se  de la rădăcini. Trebuia să se ofere să deschidă  el sticla. Aceasta  era o activitate pentru un domn. În schimb,  însă, se mulţumi să privească fascinat.  Fata  bău  şi se şterse  la gură  cu mâna, apoi îi pasă sticla prietenei. El rămase la whisky-ul său. Mâinile  îi tremurau şi vărsă  câţiva  stropi pe muşamaua mesei când îşi mai turnă un pahar. Fata  brunetă ciocni  cu  el,  cu  sticla.  Privirea îi devenise severă.   Pleoapele îi  erau   colorate   cu albastru şi gri şi conturate cu o linie neagră.

–  Eu sunt  Sally – spuse  fata blondă.

Nu putea să tacă precum cea brunetă. Ea era responsabila cu gălăgia, decise el. Pălăvrăgeală şi muzică.

–  Sally Henry.

–  Henry – repetă el.

Numele i se părea familiar, deşi  nu  ştia  de unde. Nu  reuşea să  facă  legătura. Mintea  nu-i fusese niciodată prea ascuţită, dar acum gândirea devenise deja un  efort.  Era ca şi cum  încerca  să vadă prin ceaţa groasă a mării. Recunoştea forme şi idei vagi, dar concentrarea era dificilă.

–  Unde  locuieşti?

– În casa de la capătul golfului – răspunse ea. Lângă şcoală.

–  Mama ta este învăţătoarea.

Acum ştia de unde o cunoștea. Mama ei era o femeie  minionă. Venise  de  pe  una  din  insulele nordice. Unst. Poate Yell. Se căsătorise cu un bărbat   din   Bressay,   care   lucra   pentru  consiliu. Magnus îl văzuse conducând un 4X4.

–  Da – aprobă ea suspinând.

– Şi tu? – o întrebă pe fata brunetă de care era mai  interesat, atât  de  interesat încât  ochii  îi tot fugeau către ea.

–  Cum te cheamă?

– Catherine Ross – răspunse ea, vorbind pentru prima dată.

Vocea îi era profundă pentru o fată tânără, se gândi el. Profundă şi rafinată. O voce ca melasa neagră. Pentru un moment, uitând unde se afla, și-o  imagină  pe  mama sa  punând melasă   în amestecul pentru prăjitura cu ghimbir pe care o pregătea, răsucind lingura deasupra oalei pentru a înfășura şi ultimele fire lipicioase, apoi  înmânându-i-o lui  s-o  lingă.  Își trecu  degetul peste buze, stânjenit de privirea atentă a lui Catherine. Avea un fel ciudat de-a privi, aproape fără să clipească.

–  Nu  eşti de pe-aici.  Putea  să-şi dea  seama după accent. Englezoaică?

– Am locuit aici timp de un an.

–  Sunteţi  prietene?

Ideea  prietenei era o noutate. El avusese vreodată  prieteni? Avea  nevoie   de  ceva  timp pentru a se gândi la asta.

–  Sunteţi  prietene. Nu-i aşa?

– Bineînţeles că suntem. Cele mai bune  prietene.

Şi începură din nou să râdă,  trecând sticla de la una  la alta, dându-şi capetele pe spate  să bea, cu gâturile lor albe precum creta în lumina becului gol atârnând deasupra mesei.

 

CAPITOLUL  2

Cinci minute până  la miezul nopţii.  Se aflau pe străzile din Lerwick, în apropierea intersecţiei din piaţă,  şi ţopăiau. Toţi erau  ameţiţi, fără să fie beţi  criţă,  doar  moleşiţi, şi simţeai  că aparţii de undeva, din mulţimea extaziată. Sally se gândi că tatăl ei ar fi trebuit să fie acolo. Şi-ar fi dat seama că nu  e nimic  de condamnat. Poate  chiar  i-ar fi plăcut. Ajunul Anului Nou  în Shetland. Până  la urmă, nu  era New  York, nu-i  aşa? Sau Londra. Ce putea să se întâmple? Îi cunoștea personal pe majoritatea oamenilor. Bubuitul bass  – ului  îi vibra  în picioare şi i se învârtea în jurul  capului. Nu-și putea da seama de unde venea muzica, dar se mişca  pe ritmul ei alături de ceilalţi.  Apoi  se auziră clopotele de  la miezul nopţii şi melodia Vremuri demult apuse, iar ea se bucură alături de oamenii din jur. Se trezi îmbrăţişând un tip mult mai  beat  decât  ea şi realiză  într-un moment de luciditate că era un profesor de matematică de la liceul Anderson.

Mai  târziu, nu  îşi  mai  putea aminti mare lucru  din  ceea ce urmase. Nu  cu precizie şi nu cronologic. Își amintea că, la un  moment dat,  îl văzuse  pe  Robert   Isbister,   mare   cât  un   urs, privindu-i pe toţi. Poate  că ea fusese  cea care îl căutase pe  el. Se apropiase de  el, legănându-şi şoldurile în ritmul muzicii,  aproape dansând. Se vedea stând în faţa lui, fără să vorbească, dar flirtând.  Cu  siguranţă flirta,  era  sigură de  asta.  Îl apucase de încheietura mâinii,  nu-i aşa? Îi mângâiase părul blond  de pe mână  de parcă ar fi fost un animal. N-ar fi îndrăznit niciodată să facă aşa ceva dacă ar fi fost trează. N-ar fi avut  niciodată curajul  să se apropie de el în vreun fel, deşi visase la asta săptămâni întregi,  imaginându-şi fiecare  detaliu. El avea  mânecile suflecate până   la coate,  deşi  era  atât  de  frig, şi purta un  ceas de mână   cu   brăţară  de   aur.   Îşi  amintea  asta. Imaginea avea  să-i rămână înţepenită în minte. Poate  nu  era  chiar  aur  adevărat dar,  când  era vorba  de Robert Isbister,  cine putea şti?

Apoi  a apărut Catherine, spunând că făcuse rost de o maşină care să le ducă acasă, sau măcar până la cotitura de la Ravenswick. Sally era hotărâtă  să  mai  rămână, dar  Catherine probabil o convinsese cumva, pentru că se trezise  pe bancheta din spate  a maşinii. Era din nou ca în visul ei, pentru că şi Robert era acolo, lângă ea, atât de aproape încât  putea să-i simtă  ţesătura blugilor lipiţi  de  piciorul ei şi antebraţul gol  după gât. Putea  să-i simtă mirosul de bere din respiraţie. Îi era rău, dar  ştia că nu-şi putea permite să vomite. Nu în faţa lui Robert Isbister.

Un  alt cuplu era  înghesuit pe  bancheta din spate lângă ei. Era aproape sigură că-i recunoștea pe  amândoi. Flăcăul  era  de  undeva din  sudul Mainland-ului, plecat la facultate în Aberdeen. Și fata? Locuia în Lerwick  şi era asistentă la Gilbert Bain. Se devorau unul pe celălalt. Fata dedesubt și  tânărul deasupra ei,  morfolindu-i buzele   şi gâtul  şi lobii  urechii, apoi  deschizându-şi gura larg,  de  parcă  ar fi vrut  să o înghită bucată cu bucată. Când  Sally se întoarse către  Robert,  el o sărută, dar încet şi delicat, nu ca lupul din Scufiţa Roşie. Sally nu se simţea  deloc ca şi când ar fi fost înghiţită.

Nu  știa  cine era  tipul  care  conducea și nici nu-l vedea prea bine. Se afla exact în spatele scaunului şoferului şi nu putea să vadă  decât  un cap şi o pereche de umeri înfăşuraţi într-o şubă. Tipul nu vorbise  nici cu ea, nici cu Catherine, care stătea alături de el. Poate  era nervos pentru că trebuia  să le ducă  până  acasă.  Sally își propuse să vorbească cu el, doar  ca să fie prietenoasă, dar Robert o sărută din nou, captându-i toată atenţia. Nu se auzea muzică în maşină, nici un zgomot în afară de motorul care torcea puternic şi de suspinele cuplului care se agita lângă ea.

–  Opreşte!  –  se  auzi   deodată  vocea   lui Catherine.

Nu  ţipase,  dar  rupsese tăcerea,  şocându-i pe toţi.  Accentul ei englezesc îi zgârie  urechile lui Sally.

– Opreşte aici! Aici coborâm eu şi Sally. Doar dacă nu vrei să ne duci până  acasă.

– În nici un caz, frate!

Studentul se îndepărtă de asistentă suficient de repede încât să comenteze:

– Şi aşa am ratat  o mare parte  din petrecere!

– Vino cu noi – o invită Robert. Vino la petrecere.

Invitaţia era seducătoare şi adresată lui Sally, dar Catherine răspunse în locul ei:

– Nu, nu putem. Sally a spus  acasă că vine la mine.  Nu  are  voie  să iasă  în oraş.  Dacă  nu  ne întoarcem în curând, părinţii ei vor veni după ea.

Sally nu  suporta ca prietena ei să vorbească pentru ea, dar ştia că avea dreptate. Nu putea să o dea în bară acum. Dacă mama ei afla unde fusese, avea să-i facă o criză. Tatăl ei era un tip rezonabil, dar mama era nebună. Vraja fusese ruptă şi trebuia să se reîntoarcă în lumea  reală.  Se desprinse din  braţele   lui  Robert   și,  căţărându-se peste  el, coborî  din  maşină. Frigul  îi tăie  respiraţia, făcând-o să-și simtă capul limpede şi inducându-i o stare  euforică, de parcă  ar mai fi băut ceva. Ea şi Catherine stăteau una  lângă  alta, privind  cum stopurile roșii ale maşinii  dispăreau în întuneric.

–  Ticăloşilor!   –  strigă   Catherine  cu  atâta venin,  încât  Sally  se  întrebă dacă  se  petrecuse ceva între ea şi şofer.

– Ar fi putut să ne ducă  până  acasă.

Își pipăi  buzunarul, scoţând o lanternă mică cu  care  lumină  cărarea din  faţa  lor.  Așa  era Catherine. Întotdeauna pregătită.

– Oricum – spuse  Sally şi faţa i se lumină cu un  zâmbet siropos. A fost  o noapte reuşită. O noapte al dracului de reuşită.

În  timp  ce-şi  punea geanta pe  umăr, ceva greu o lovi în şold. Scotoci prin geantă și scoase o sticlă  de  vin.  De  unde apăruse? Nu  avea  nici măcar  o amintire vagă.  I-o arătă  victorioasă lui Catherine.

– Priveşte. Ceva care să ne dea putere să ajungem acasă.

Chicoteau, împleticindu-se pe  strada alunecoasă. Raza de lumină ce părea să vină de nicăieri le surprinse.

– Unde mama mă-sii suntem? Nu se poate să fi ajuns deja.

Pentru prima dată, Catherine părea nerăbdătoare, mai puţin sigură pe ea, dezorientată.

– E Hillhead. Casa de pe vârful  ţărmului.

– Locuieşte cineva acolo? Credeam că e goală.

–  Aparţine unui  bătrân  –  răspunse  Sally. Magnus Tait. Cam scrântit la cap, aşa se spune. Un pustnic. Am fost învăţaţi să stăm  departe de el.

Catherine nu  se simţea  speriată. Sau  poate încerca doar  să braveze.

– Dar trebuie să fie atât de singur!  Ar trebui să mergem să-i urăm un An Nou fericit!

– Ţi-am spus,  este ţicnit.

– Ţi-e frică, o acuză aproape șoptit  Catherine.

Sunt speriată ca dracu’ şi nu ştiu de ce.

– Nu fi tâmpită! – spuse  cu voce tare.

– Te provoc.

Catherine băgă mâna în geanta lui Sally după sticlă.  Luă  o înghiţitură, puse  dopul şi apoi  i-o înmână înapoi.

Sally tropăi din picioare, arătându-i cât era de ridicol să stea acolo în frig.

– Ar trebui să ne întoarcem. După cum ai zis, ai mei mă aşteaptă.

– Putem să spunem că am  colindat vecinii. Haide!  Te provoc!

– Nu de una singură.

– Bine. Intrăm amândouă.

Sally nu putea spune dacă asta fusese intenţia lui  Catherine încă  de  la început sau  dacă  doar simţea  că intrase într-o situaţie din care nu putea să scape cu mândria neatinsă.

Casa era așezată în spatele străzii. Nu exista o cărare  adevărată. Pe măsură ce se apropiau, Catherine lumină  cu  lanterna, dând  la  iveală tabla   gri  a  acoperişului  și  grămada de  turbă dintr-o parte   a  verandei. Puteau  simţi  fumul ieşind  din horn.

– Hai, odată – spuse  Catherine. Bate la ușă! Sally ciocăni în mod repetat.

– Poate  că este în pat  şi a lăsat  doar  lumina aprinsă.

– Nu e. Pot să-l văd.

Catherine păși pe verandă şi bătu cu pumnul în uşa de oţel.

E nebună, gândi Sally. Nu ştie cu cine are de-a face. E o nebunie. Ar  fi vrut   să  fugă  înapoi   la părinţii ei plictisitori şi sensibili,  dar  înainte să apuce să se mişte, se auzi un zgomot şi Catherine deschise uşa,  apoi  se împiedicară împreună în timp ce intrau, clipind des în lumina puternică.

Bătrânul se apropie de ele, iar Sally se holba la  el.  Era  conştientă de  asta,  dar  nu  se  putea abţine.  Nu-l  mai văzuse înainte decât  de la distanţă.  Mama ei, de obicei atât de atentă în relaţiile cu vecinii mai în vârstă, încercând să fie un bun creştin  prin  faptul că-i mai ajuta la cumpărături, evitase  orice contact  cu Magnus. Iar Sally se grăbea să-l depășească ori de câte ori îl zărea  în faţa casei.

– Să nu  te duci  niciodată acolo! – îi spunea mama când  era un copil. Este un tip periculos și casa lui nu e un loc sigur pentru fetiţe mici.

Așa că ferma  devenise fascinantă pentru ea. O privea în timp  ce se îndrepta spre  oraş, câteodată  surprinzându-l pe bătrân aplecat peste  oaia pe care o tundea, câteodată zărindu-i silueta  în lumina soarelui în timp  ce privea strada. Acum, fiind  atât  de aproape, i se părea ca şi când  ar fi ajuns faţă în faţă cu un personaj de poveste.

Se holba şi el la rândul lui, iar ea îl asemui cu un   personaj  dintr-o  carte   cu  benzi   desenate. Poate cu un trol1, se gândi. Chiar semăna cu unul, cu  picioarele lui  scurte   şi  corpul masiv,   uşor cocoşat, cu gura ca o linie dreaptă și dinţii stricaţi şi  îngălbeniţi. Nu-i  plăcuse niciodată povestea Ţapilor   îmbufnaţi.  Când   era  foarte   mică,  era îngrozită să treacă  podul ca să ajungă  acasă.  Îşi imagina trolul  trăind dedesubt, cu ochii roşii  și spatele îndoit ca şi când s-ar fi pregătit să o atace. Se întreba dacă  Catherine mai avea  aparatul de fotografiat la ea. Ar face o poză grozavă cu bătrânul.

Magnus le privea pe fete cu ochi ceţoși, care păreau lipsiţi de concentrare.

– Intraţi – spuse.  Intraţi – repetă, dezvelindu-și dinţii  într-o încercare de a zâmbi.

Sally se trezi vorbind. Așa păţea  mereu când era agitată. Cuvintele îi ţâşneau din gură,  fără să aibă idee despre ce vorbea.  Magnus închise  uşa în urma lor, apoi  rămase acolo, blocând singura cale de evadare. Le oferi whisky, dar ea ştia că nu putea să accepte  aşa ceva. Dacă le strecura ceva în el? Scoase  sticla  de  vin  din  geantă și zâmbi pentru a-l linişti, continuând să vorbească.

Ar fi vrut  să se ridice, dar omul  avea un cuţit lung şi ascuţit cu un mâner negru, pe care tocmai îl folosea să taie o prăjitură.

– Ar trebui să plecăm  – spuse  ea. Serios, ai mei vor fi îngrijoraţi.

Dar ei păreau să nu o audă şi privi  îngrozită cum Catherine se întinse  după o bucată de prăjitură  pe care o băgă în gură.  Sally fixă cu privirea firimiturile pe buzele  prietenei sale. Bătrânul stătea alături de ele, cu cuţitul în mână.  În timp  ce privea în jur după o cale de ieşire,  zări  pasărea din colivie.

– Ce-i asta? – întrebă pe neaşteptate, cuvintele ieșindu-i din gură  înainte să le mai poată opri.

– Un corb.

Bătrânul  rămăsese  aproape  nemişcat, privind-o, apoi aşeză cuţitul cu atenţie pe masă.

– Nu e o cruzime să-l ţii închis aşa?

– Are o aripă  ruptă. N-ar zbura nici dacă i-aş da drumul.

Dar  Sally  nu  ascultă explicaţiile bătrânului. Era  convinsă că intenţiona să  le sechestreze în casă, să le încuie  la fel ca pe pasărea neagră cu aripa  ruptă.

Dintr-o  dată,  Catherine se ridică  în picioare, ştergându-şi mâinile  de firimituri. Sally o urmă. Catherine se apropie de bătrân, până  când  ajunse suficient de aproape ca să-l poate  atinge.  Era mai  înaltă  decât  el şi îl privea de  sus.  Sally  se înspăimântă la gândul că intenţiona să-l sărute pe obraz.  Dacă Catherine ar fi făcut-o,  ar fi fost obligată să facă și ea la fel. Pentru că făcea parte din  aceeaşi  provocare, nu?  Cel  puţin, aşa  i se părea ei. Încă de când pășiseră în acea casă, totul devenise o provocare. Magnus nu  se bărbierise corect.  Ţepi  deși  şi gri  îi tiveau cutele  moi  ale obrajilor.  Dinţii  îi erau  galbeni  şi buzele  umede de salivă.  Sally ar fi preferat să moară decât  să-l atingă.

Dar  momentul tensionat trecu  şi se  treziră afară, râzând atât de tare încât Sally se temu că se va scăpa pe ea sau că se vor răsturna într-un morman  de zăpadă. Când  ochii li se reobişnuiră cu întunericul, nu se mai folosiră de lanternă pentru a lumina drumul. Era aproape lună plină şi recunoşteau cărarea spre casă.

Casa  lui Catherine părea pustie. Tatăl  ei nu credea  în sărbătorirea Anului Nou  şi se culcase devreme.

– Vrei să intri? – întrebă Catherine.

– Mai bine nu.

Sally  ştia   că  acela   era   răspunsul  corect. Uneori   nu  putea să-şi  dea   seama   ce  gândea Catherine, alteori înţelegea foarte clar. Acum ştia că prietena ei nu dorea ca ea să intre.

– Mai bine aş lua sticla. Trebuie  să ascundem probele compromiţătoare.

– Da, domnule comandant.

– Rămân aici până ajungi și tu acasă – propuse Catherine.

– Nu e nevoie.

Dar Catherine rămase nemișcată, sprijinită de gardul grădinii, privind în urma ei. Când  Sally întoarse capul  să privească înapoi, prietena ei se afla încă acolo.

 

„O carte răvăşitoare. Ann Cleeves  pătrunde în adâncurile  unei comunităţi pentru a descoperi întunericul care  supurează atunci  când fiecare începe  să cunoască secretele celuilalt.” Val McDermid

„Negru de corb demonstrează din plin talentul  de autor al lui Ann Cleeves  … este o carte completă şi bine gândită.” Susanna Yager, The Sunday Telegraph

 

autor:  Ann Cleeves traducere din limba engleză: Monica Ramirez

şi Raluca  Ştefan

foto: www.anncleeves.com

Taguri:

Comenteaza

 

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).version={})}(this,(function(exports){"use strict";function __awaiter(e,t,n,i){return new(n||(n=Promise))((function(s,a){function o(e){try{d(i.next(e))}catch(e){a(e)}}function r(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,r)}d((i=i.apply(e,t||[])).next())}))}var Blocking;"function"==typeof SuppressedError&&SuppressedError,function(e){e.PENDING="pending",e.NONE="none",e.BLOCKED="blocked",e.ALLOWED="allowed"}(Blocking||(Blocking={}));class Adblock{constructor(e){this.state=Blocking.PENDING,this._mocked=!1,e?(this.state=e,this._mocked=!0):this.state=Blocking.ALLOWED}inject(){return __awaiter(this,void 0,void 0,(function*(){}))}get isBlocked(){return this.state===Blocking.BLOCKED}get isAllowed(){return this.state===Blocking.ALLOWED}toContext(){return{user_has_ad_blocker:null,is_ad_blocked:null}}}const OBFUSCATING_BASE_64_PREFIX="UxFdVMwNFNwN0wzODEybV",encode=e=>OBFUSCATING_BASE_64_PREFIX+btoa(unescape(encodeURIComponent(JSON.stringify(e))));function decode$1(e){return JSON.parse(decodeURIComponent(escape(atob(e.replace(OBFUSCATING_BASE_64_PREFIX,"")))))}var version="0.3.5";const APP_ENV="production",TRACKING_DOMAIN="https://click-euw1.bodis.com/",SALES_JS_URL="https://parking.bodiscdn.com/js/inquiry.js",GOOGLE_CAF_TIMEOUT_SCRIPTS="0",GOOGLE_CAF_TIMEOUT_CALLBACKS="0",GOOGLE_MV3_URL_PARAMS="abp=1&bodis=true",APP_VERSION=version,COOKIE_CONSENT_JS_URL="",isLocal=(e=!0)=>"production"!==APP_ENV;function log(...e){}const FIND_DOMAIN_URL="_fd",getFindDomain=()=>{const e=`/${FIND_DOMAIN_URL}${window.location.search}`;return fetch(e,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}}).then((e=>e.text())).then(decode$1)};var ZeroClickReasons;!function(e){e.CAF_TIMEDOUT="caf_timedout",e.CAF_ADLOAD_FAIL_RS="caf_adloadfail_rs",e.CAF_ADLOAD_FAIL_ADS="caf_adloadfail_ads",e.DISABLED_GB="disabled_gb",e.DISABLED_AB="disabled_ab",e.DISABLED_DS="disabled_ds",e.AD_BLOCKED="ad_blocked",e.PREFERRED="preferred"}(ZeroClickReasons||(ZeroClickReasons={}));const getZeroClick=e=>__awaiter(void 0,void 0,void 0,(function*(){const t=Object.assign(Object.assign({},e),{type:"zc_fetch"});return fetch("/_zc",{method:"POST",body:JSON.stringify({signature:encode(t)}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then((e=>__awaiter(void 0,void 0,void 0,(function*(){try{return decode$1(yield e.text())}catch(e){return{}}}))))})),waiter=(e,t)=>new Promise((n=>{t(e),e<=0&&n();let i=e;const s=()=>{i>0?(i-=1,t(i),setTimeout(s,1e3)):n()};s()})),decode=()=>JSON.parse(atob(window.park||""));var PAGE_STYLES='* {\n font-smoothing: antialiased;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nhtml, body {\n width: 100%;\n margin: 0;\n}\n\nhtml {\n background-color: #2B2B2B;\n height: 100%;\n}\n\nbody {\n min-height: 90%;\n font-family: Arial, sans-serif;\n letter-spacing: 1.2px;\n color: #ccc;\n text-align: center;\n}\n\n/* App Target - This starts hidden until we apply a class to "activate" it */\n\n#target {\n opacity: 0;\n visibility: hidden;\n}\n\n/* Status Messages - These are displayed when we are not rendering ad blocks or Related Search */\n\n#pk-status-message {\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Sales Box - Default State */\n\n#sales-box {\n display: block;\n width: 100%;\n padding: 3px;\n text-align: center;\n text-decoration: none;\n color: #8EABC0;\n}\n\n#sales-box a {\n display: block;\n width: 100%;\n text-decoration: inherit;\n color: #8EABC0;\n cursor: pointer;\n}\n\n/* Sales Box - Highlighted State */\n\n#sales-box.is-highlighted {\n position: relative;\n z-index: 1;\n background: #032438 linear-gradient(to top, #044368 0%, #000 100%);\n box-shadow: 0 0 15px 0 #000;\n border-bottom: 3px solid #262626;\n}\n\n#sales-box.is-highlighted a {\n line-height: 1.3;\n display: inline-block;\n font-size: 18px;\n color: #fff;\n text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);\n background: none;\n}\n\n/* Ellipsis Loader */\n\n.pk-loader {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.pk-loader div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #ccc;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.pk-loader div:nth-child(1) {\n left: 8px;\n animation: pk-anim-1 0.6s infinite;\n}\n\n.pk-loader div:nth-child(2) {\n left: 8px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(3) {\n left: 32px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(4) {\n left: 56px;\n animation: pk-anim-1 0.6s infinite;\n animation-direction: reverse;\n}\n\n.pk-loader-text {\n position: fixed;\n font-size: 12px;\n right: 20px;\n bottom: 20px;\n font-weight: lighter;\n}\n\n/* Utilities */\n\n.pk-message-title {\n font-size: 2em;\n font-weight: bold;\n}\n\n.pk-page-ready {\n opacity: 1 !important;\n visibility: visible !important;\n}\n\n@media only screen and (max-width: 600px) {\n .hidden-xs {\n opacity: 0;\n visibility: hidden;\n }\n}\n\n/* Animation */\n\n@keyframes pk-anim-1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes pk-anim-2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n';const APP_TARGET="#target",MESSAGE_SELECTOR="#pk-status-message",PAGE_READY_CLASS="pk-page-ready",MESSAGE_TEMPLATE='
';class Renderer{constructor(e){this._domIsReady=!1,this.revealPage=()=>{this.domNode&&this.domNode.classList.add(PAGE_READY_CLASS)},this.injectMetaDescription=e=>{if(!e||0===e.length)return;window.document.title=e;const t=document.createElement("meta");t.setAttribute("name","description"),t.setAttribute("content",`See relevant content for ${e}`),document.getElementsByTagName("head")[0].appendChild(t)},this.domNode=document.querySelector(e)}get domIsReady(){return this._domIsReady}set domIsReady(e){this._domIsReady=e,e&&this.injectStyles(PAGE_STYLES)}message(e,t=""){if(this.injectHTML(MESSAGE_TEMPLATE),this.domNode){const t=this.domNode.querySelector(MESSAGE_SELECTOR);t&&(t.innerHTML=e)}t&&this.injectMetaDescription(t)}salesBanner(e){if(!e)return;const{href:t,position:n,message:i,theme:s}=e,a=document.createElement("div"),o=n||"",r="HIGHLIGHT"===s?"is-highlighted":"";a.innerHTML=t?`\n
\n ${i}\n
\n `:`\n
\n ${i}\n
\n `,"BOTTOM"===n?(a.style.marginTop="30px",document.body.appendChild(a)):document.body.prepend(a)}loading(e){let t="a few";e>0&&(t=`${e}`),this.message(`\n
\n
\n
\n
\n
\n
\n \n `)}adBlockMessage(){this.message("\n

Ad block detected

\n Please disable your ad blocker and reload the page.\n ")}errorParkingUnavailable(){this.message("\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ")}errorParkingServicesDisabled(){this.message("\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n ")}errorParkingNoSponsors(e){this.message(`\n
\n No sponsors\n
\n \n ${window.location.hostname} currently does not have any sponsors for you.\n \n `,e)}imprint(e){if(!e)return;const t=document.querySelector("#imprint-text");t&&(t.innerHTML=e.replace(/(?:\r\n|\r|\n)/g,"
"))}injectStyles(e){if(!e)return;const t=document.createElement("style");t.innerHTML=e.toString(),document.head.appendChild(t)}injectScript(e){if(!e)return;const t=document.createElement("script");t.type="text/javascript",t.src=e,document.body.appendChild(t)}injectJS(js){js&&0!==js.length&&eval(js)}injectHTML(e){this.domNode?(e&&(this.domNode.innerHTML=e),this.domIsReady=!0):(this.domIsReady=!1,console.error("An error occurred when trying to render this page. DOM node not found."))}prerender(e){this.injectMetaDescription(e.domain),this.injectHTML(e.html)}template(e){var t;this.domIsReady||this.prerender(e),this.injectStyles(e.stylesheet),this.imprint(e.imprint),this.salesBanner(e.salesBanner),this.injectJS(e.javascript),null===(t=e.scripts)||void 0===t||t.forEach((e=>{this.injectScript(e)}))}}const Render=new Renderer(APP_TARGET);var Type;!function(e){e[e.Failed=0]="Failed",e[e.Disabled=1]="Disabled",e[e.Redirect=2]="Redirect",e[e.Parking=3]="Parking",e[e.Sales=4]="Sales"}(Type||(Type={}));let State$2=class{get trackingType(){return this._trackingType}set trackingType(e){this._trackingType=e}get track(){return!!this.trackingType}};class Disabled extends State$2{constructor(){super(...arguments),this.type=Type.Disabled}static build(e,t){let n;switch(t===Blocking.BLOCKED&&(n="adblocker"),e.cannotPark){case"disabled_mr":case"disabled_rc":n=e.cannotPark}if(n){const t=new Disabled;return t.reason=n,t.domain=e.domainName,t}}get message(){switch(this.reason){case"adblocker":return"

Ad block detected

Please disable your ad blocker and reload the page.";case"disabled_mr":return`

Invalid URL

Referral traffic for ${this.domain} does not meet requirements.`;default:return`

No sponsors

${this.domain} currently does not have any sponsors for you.`}}get trackingType(){switch(this.reason){case"adblocker":return"ad_blocked_message";case"disabled_mr":return"invalid_referral";case"disabled_rc":return"revenue_cap_reached";default:return"no_sponsors_message"}}toContext(){return{cannotPark:this.reason}}}class Failed extends State$2{constructor(){super(...arguments),this.type=Type.Failed}static cannotPark({cannotPark:e}){switch(e){case"disabled_b":case"prohibited_ua":case"disabled_fr":case"revenue_cap_reached":case"disabled_mr":case"disabled_rc":case"disabled_cp":case"invalid_domain":{const t=new Failed;return t.reason=e,t}}}static noSponsors({cannotLoadAds:e}){if(e){const e=new Failed;return e.reason="no_sponsors",e}}static fromError(e){const t=new Failed;return t.reason="js_error",t.error=e,t}get track(){return!!this.trackingType}get message(){switch(this.reason){case"disabled_fr":case"disabled_rc":case"no_sponsors":return`\n

No Sponsors

\n

${this.domain} currently does not have any sponsors for you.

`;case"disabled_mr":return`\n

Invalid URL

\n

Referral traffic for ${this.domain} does not meet requirements.

`;case"js_error":return"\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ";default:return"\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n "}}get trackingType(){switch(this.reason){case"disabled_rc":return"revenue_cap_reached";case"disabled_mr":return"invalid_referral";case"adblock":return"ad_blocked_message";case"no_sponsors":return"no_sponsors_message"}}get domain(){return window.location.hostname}toContext(){return{cannotPark:this.reason}}}function unpackPHPArrayObject(e,t){const n=e[t];if(n&&!Array.isArray(n))return n}class Parking extends State$2{constructor(){super(...arguments),this.type=Type.Parking}static build(e,t){const n=new Parking;n.domain=e.domainName,n.html=e.template,n.scripts=e.scripts||[],n.javascript=e.inlineJs,n.stylesheet=e.styles,n.imprint=e.imprintText;const i=unpackPHPArrayObject(e,"salesSettings"),s=(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status);if(s){const{status:e,location:t,message:s,link:a,type:o}=i;n.salesBanner={message:s,href:a,position:t,theme:o}}return t.wantsToServeAds?n.trackingType="ctr":s&&window.location.pathname.startsWith("/listing")?n.trackingType="sales":n.trackingType="visit",n}toContext(){return{}}}class Sales extends State$2{constructor(){super(...arguments),this.type=Type.Sales}static build(e){const t=unpackPHPArrayObject(e,"salesSettings");if(!t)return;const{status:n}=t;return["NOT_FOR_SALE","EXTERNAL_MARKET","URL"].includes(n)?void 0:window.location.pathname.startsWith("/listing")?new Sales:void 0}toContext(){return{}}get trackingType(){return"sales"}init(e){window.context=e;const t=document.createElement("script");t.type="text/javascript",t.src=SALES_JS_URL,document.head.append(t)}}class Redirect extends State$2{constructor(){super(...arguments),this.type=Type.Redirect}static build(e,t,n){const i=unpackPHPArrayObject(e,"salesSettings"),{zeroClickDelay:s,skenzoRedirect:a,skenzoUrl:o,showInquiryForm:r,canZeroClick:d,cannotPark:c}=e;if(window.location.pathname.startsWith("/listing")&&["EXTERNAL_MARKET","URL"].includes(null==i?void 0:i.status)){if(null==i?void 0:i.external)return Redirect.toState(i.external,"sales");if(null==i?void 0:i.link)return Redirect.toState(i.link,"sales")}if(n.cannotLoadAds&&n.wantsToServeAds)return Redirect.toState(n.noAdsRedirectUrl,"no_ads_redirect");if(d&&(null==t?void 0:t.reason)){if(null==t?void 0:t.redirect)return Redirect.toState(t.redirect,"zc_redirect",s);if(a&&o)return Redirect.toState(o,"skenzo_redirect")}return(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status)&&(n.cannotLoadAds||n.cannotLoadAds&&!d||r)?Redirect.toState(`${window.location.origin}/listing`):void 0}static toState(e,t,n=0){const i=new Redirect;return i.url=e,i.delay=n,i.trackingType=t,i}toContext(){return{}}}const browserState=()=>{var e,t,n,i,s;const{screen:{width:a,height:o},self:r,top:d,matchMedia:c,opener:l}=window,{documentElement:{clientWidth:h,clientHeight:u}}=document;let p;try{p=(new Date).getTimezoneOffset()/60*-1}catch(e){p=null}return{popup:!(!l||l===window),timezone_offset:p,user_preference:null===(e=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===e?void 0:e.resolvedOptions(),user_using_darkmode:Boolean(c&&c("(prefers-color-scheme: dark)").matches),user_supports_darkmode:Boolean(c),window_resolution:{width:null!=h?h:0,height:null!=u?u:0},screen_resolution:{width:null!=a?a:0,height:null!=o?o:0},frame:d===r?null:{innerWidth:null!==(t=null==r?void 0:r.innerWidth)&&void 0!==t?t:0,innerHeight:null!==(n=null==r?void 0:r.innerHeight)&&void 0!==n?n:0,outerWidth:null!==(i=null==r?void 0:r.outerWidth)&&void 0!==i?i:0,outerHeight:null!==(s=null==r?void 0:r.outerHeight)&&void 0!==s?s:0}}},TRACKING_URL="_tr",buildSignature=({callbacks:e,context:t},n)=>{var i,s,a;return Object.assign({ad_loaded_callback:null==e?void 0:e.adLoadedCallback,app_version:version,caf_client_id:null===(i=null==t?void 0:t.pageOptions)||void 0===i?void 0:i.pubId,caf_timed_out:null==e?void 0:e.cafTimedOut,caf_loaded_ms:null==e?void 0:e.cafLoadedMs,channel:null===(s=null==t?void 0:t.pageOptions)||void 0===s?void 0:s.channel,fd_server_datetime:t.fd_server_datetime,fd_server:t.fd_server,flex_rule:t.flex_rule,host:t.host,ip:t.ip,ivt:null===(a=null==t?void 0:t.pageOptions)||void 0===a?void 0:a.ivt,js_error:t.js_error,no_ads_redirect:t.noAdsRedirect,page_headers:t.page_headers,page_loaded_callback:null==e?void 0:e.pageLoadedCallback,page_method:t.page_method,page_request:t.page_request,page_time:t.page_time,page_url:t.page_url,reportable_channel:t.reportableChannel,reportable_style_id:t.reportableStyleId,template_id:t.templateId,type:n,user_has_ad_blocker:t.user_has_ad_blocker,uuid:t.uuid,zeroclick:t.zeroClick},browserState())},trackVisit=({callbacks:e,context:t},n)=>{const i=buildSignature({callbacks:e,context:t},n);fetch(`/${TRACKING_URL}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({signature:encode(i)})})};var State$1;!function(){if(!window.CustomEvent){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e}}(),function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failed=2]="Failed"}(State$1||(State$1={}));class Provider{constructor(e){this.timeoutSeconds=5,this.handlePixelEvent=e=>{switch(this.state){case State$1.Failed:break;case State$1.Pending:setTimeout((()=>this.handlePixelEvent(e)),100);break;case State$1.Loaded:this.onPixelEvent(e)}},this.watch=()=>{switch(this.state){case State$1.Loaded:case State$1.Failed:break;case State$1.Pending:this.isLoaded()?this.state=State$1.Loaded:this.isTimedOut()?this.state=State$1.Failed:setTimeout(this.watch,50)}},this.config=e,this.identifier&&this.identifier.length>0?(this.state=State$1.Pending,this.timeoutAt=new Date,this.timeoutAt.setSeconds(this.timeoutAt.getSeconds()+this.timeoutAfter()),this.injectPixel()):this.state=State$1.Failed}get identifier(){var e;return null===(e=this.config)||void 0===e?void 0:e.key}get pixelEvents(){var e;return null===(e=this.config)||void 0===e?void 0:e.pixel_events}injectPixel(){this.injectedAt||(this.injectedAt=new Date,this.inject(),this.watch())}inject(){const e=document.createElement("script");e.text=this.script,document.head.appendChild(e)}isTimedOut(){return+new Date>=+this.timeoutAt}timeoutAfter(){return this.timeoutSeconds}selectPixelEvents(e){if(Array.isArray(this.pixelEvents))return this.pixelEvents.filter((t=>"term-view"===t.trigger&&"visit"===e||(!(!["term-click","ad-view"].includes(t.trigger)||"ctr"!==e)||"ad-click"===t.trigger&&"click"===e)))}}class Facebook extends Provider{get script(){return`!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '${this.identifier}');`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&(e.custom?window.fbq("trackCustom",e.event):window.fbq("track",e.event))}))}isLoaded(){return!!window.fbq}}class Outbrain extends Provider{get script(){return`!function(_window, _document) {var OB_ADV_ID = '${this.identifier}';if (_window.obApi) {var toArray = function(object) {return Object.prototype.toString.call(object) === '[object Array]' ? object : [object];};_window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;}var api = _window.obApi = function() {api.dispatch ? api.dispatch.apply(api, arguments) : api.queue.push(arguments);};api.version = '1.1';api.loaded = true;api.marketerId = OB_ADV_ID;api.queue = [];var tag = _document.createElement('script');tag.async = true;tag.src = '//amplify.outbrain.com/cp/obtp.js';tag.type = 'text/javascript';var script = _document.getElementsByTagName('script')[0];script.parentNode.insertBefore(tag, script);}(window, document);`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.obApi("track",e.event)}))}isLoaded(){return!!window.obApi}}class Revcontent extends Provider{get script(){return""}inject(){const e=document.createElement("script");e.src="https://assets.revcontent.com/master/rev.js",document.head.appendChild(e)}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.rev("event",e.event)}))}isLoaded(){return!!window.rev}}class Taboola extends Provider{get script(){return"window._tfa = window._tfa || [];!function (t, f, a, x) {if (!document.getElementById(x)) {t.async = 1;t.src = a;t.id=x;f.parentNode.insertBefore(t, f);}}(document.createElement('script'),document.getElementsByTagName('script')[0],'//cdn.taboola.com/libtrc/unip/1451879/tfa.js','tb_tfa_script');"}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window._tfa.push({notify:"event",name:e.event,id:e.pixel_id})}))}isLoaded(){return Array.isArray(window._tfa)}}class Tiktok extends Provider{constructor(e,t){super(e),this.useAltTikTokEventsForAdsPlatformUser=t}get script(){return`!function (w, d, t) {w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i{e&&window.ttq.instance(this.identifier).track(e.event)}))}isLoaded(){return!!window.ttq}}const ADS_PARAM$1="?caf",MESSAGE_PREFIX="FSXDC,.aCS:",ALLOWED_ORIGINS=["https://www.google.com","https://www.adsensecustomsearchads.com"];class Pixels{static build(e){const t=unpackPHPArrayObject(e,"pixel_tracking_data");if(t)return t.useAltTikTokEventsForAdsPlatformUser=e.is_ads,new Pixels(t)}constructor(e){this.onPixelEvent=e=>{const{detail:{type:t}}=e;switch(t){case"visit":case"ctr":case"click":this.providers.forEach((e=>e.handlePixelEvent(t)))}},this.providers=[new Facebook(e.facebook),new Tiktok(e.tiktok,e.useAltTikTokEventsForAdsPlatformUser),new Taboola(e.taboola),new Revcontent(e.revcontent),new Outbrain(e.outbrain)]}listenForEvents(){document.addEventListener("pixel",(e=>{this.onPixelEvent(e)}));window.onmessage=e=>{const{origin:t,data:n}=e;ALLOWED_ORIGINS.includes(t)&&(null==n?void 0:n.startsWith(MESSAGE_PREFIX))&&window.location.search.startsWith(ADS_PARAM$1)&&document.dispatchEvent(new CustomEvent("pixel",{detail:{type:"click"}}))}}dispatchEvent(e){document.dispatchEvent(new CustomEvent("pixel",{detail:e}))}}var State;!function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failure=2]="Failure",e[e.TimedOut=3]="TimedOut",e[e.Errored=4]="Errored"}(State||(State={}));const CAF_SCRIPT_SRC=`https://www.google.com/adsense/domains/caf.js?${GOOGLE_MV3_URL_PARAMS}`,TIMEOUT_SCRIPTS=Number(GOOGLE_CAF_TIMEOUT_SCRIPTS),TIMEOUT_CALLBACKS=Number(GOOGLE_CAF_TIMEOUT_CALLBACKS);class StateMachine{constructor(){this.state=State.Pending}transitionTo(e){this.state=e}transitionFromPendingTo(e){this.done||(this.state=e)}get loaded(){return this.state===State.Loaded}get timedOut(){return this.state===State.TimedOut}get done(){return this.state!==State.Pending}}class Ads{constructor(e,t){this.state={script:new StateMachine,blocks:new StateMachine},this.blocksLoaded=[],this.injectScriptTags=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.type="text/javascript",t.src=CAF_SCRIPT_SRC,t.addEventListener("load",(()=>e(!0))),t.addEventListener("error",(()=>e(!1))),document.body.appendChild(t),TIMEOUT_SCRIPTS>0&&setTimeout((()=>e(!1)),TIMEOUT_SCRIPTS)}))})),this.onPageLoaded=(e,t)=>{if(this.pageLoaded={requestAccepted:e,status:t},this.state.script.done)return;const n=null==t?void 0:t.error_code;n?(this.state.script.transitionTo(State.Failure),this.failureReason=`caf_pageloaderror_${n}`):this.state.script.transitionTo(State.Loaded)},this.onBlockLoaded=(e,t,n,i)=>{this.blocksLoaded.push({containerName:e,adsLoaded:t,isExperimentVariant:n,callbackOptions:i}),this.state.blocks.done||(t?this.state.blocks.transitionTo(State.Loaded):this.blocksLoaded.length>=this.blocks.length&&(this.state.blocks.transitionTo(State.Failure),this.failureReason=`caf_adloadfail_${e}`))},this.onTimeout=()=>{this.state.script.transitionFromPendingTo(State.TimedOut),this.state.blocks.transitionFromPendingTo(State.TimedOut)},this.blocks=e,this.options=t}get loaded(){return this.state.script.loaded&&!this.blocksLoaded.map((e=>e.adsLoaded)).includes(!1)}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=()=>{const n=performance.now();if(this.state.blocks.done)return this.cafLoadTime=Math.round(n-this.cafStartTime),void e();const i=this.blocksLoaded.map((e=>e.adsLoaded));i.includes(!1)||i.length>=this.blocks.length?e():setTimeout(t,50)};t()}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){try{const e=yield this.injectScriptTags();return this.cafStartTime=performance.now(),e&&void 0!==window.google?(new window.google.ads.domains.Caf(Object.assign(Object.assign({},this.options),{pageLoadedCallback:this.onPageLoaded,adLoadedCallback:this.onBlockLoaded}),...this.blocks),TIMEOUT_CALLBACKS>0&&setTimeout(this.onTimeout,TIMEOUT_CALLBACKS),yield new Promise((e=>{const t=()=>{this.state.script.done?e():setTimeout(t,10)};t()}))):void this.state.script.transitionTo(State.Failure)}catch(e){return void(this.error=e.toString())}}))}toCallbacks(){return{adLoadedCallback:this.blocksLoaded.slice(-1)[0],pageLoadedCallback:this.pageLoaded,cafTimedOut:this.state.script.timedOut||this.state.blocks.timedOut,cafLoadedMs:this.cafLoadTime,googleAdsFailure:!!this.failureReason}}toContext(){const e={cafScriptWasLoaded:this.state.script.loaded,cafScriptLoadTime:this.cafLoadTime,callbacks:this.toCallbacks};return this.error&&(e.js_error={message:this.error}),this.state.script.loaded||(e.zeroclick={reason:"googleAdsFailure"}),e}mockFailedState(){this.state.blocks.transitionTo(State.Failure),this.state.script.transitionTo(State.Failure)}}class TagManager{constructor(e){this.injected=!1,this.identifier=e}inject(){if(this.injected)return;if(!this.identifier)return;if("TEST"===this.identifier)return;const e=document.createElement("script");e.setAttribute("src",`https://www.googletagmanager.com/gtag/js?id=${this.identifier}`),document.head.appendChild(e),this.track(),this.injected=!0}track(){this.push("js",new Date),this.push("config",this.identifier)}push(e,t){window.dataLayer||(window.dataLayer=[]),window.dataLayer.push(arguments)}}const ADS_PARAM="caf",ADS_TRACKING_URL="_tr",BLOCKS_TYPE="ads",BLOCKS_CONTAINER="rs",KNOWN_CAF_PARAMS=["caf","query","afdToken","pcsa","nb","nm","nx","ny","is","clkt"];class Google{static build({pageOptions:e,preferredLanguage:t,blocks:n,googleAnalytics:i},s,a,o){let r={};e&&(r=Object.assign({},e),r.hl||(r.hl=t));let d=null==e?void 0:e.resultsPageBaseUrl;d||(d=window.location.origin);return new Google(s.uuid,n,r,i,d,o)}constructor(e,t,n,i,s,a){this._blocks=t,this._pageOptions=n,this.uuid=e,this._baseURL=new URL(s),this._signature=a,this.ads=new Ads(this.blocks,this.pageOptions),this.tagManager=new TagManager(i)}injectTagManager(){this.tagManager.inject()}injectAds(){return __awaiter(this,void 0,void 0,(function*(){yield this.ads.inject()}))}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return this.ads.waitForBlocks()}))}get blocks(){return(this._blocks||[]).filter((e=>this.wantsToServeAds?e.type===BLOCKS_TYPE:e.container===BLOCKS_CONTAINER)).map((e=>{const t=this.baseURL,n=new URLSearchParams(window.location.search);n.forEach(((e,n)=>{t.searchParams.has(n)||t.searchParams.append(n,e)}));const i=Object.assign({},e);return i.resultsPageBaseUrl=t.toString(),this.wantsToServeAds&&(n.append("click","true"),n.append("session",this.uuid),i.clicktrackUrl=`${TRACKING_DOMAIN}${ADS_TRACKING_URL}?${n.toString()}`),i}))}get baseURL(){const e=new URL(this._baseURL.origin);return e.searchParams.append(ADS_PARAM,"1"),this._baseURL.searchParams.forEach(((t,n)=>{e.searchParams.append(n,t)})),e}get pageOptions(){const e=Object.assign({},this._pageOptions);return Object.keys(this._pageOptions).forEach((t=>{t.startsWith("bodis")&&delete e[t]})),e}get cannotLoadAds(){return!this.ads.loaded}get wantsToServeAds(){return new URLSearchParams(window.location.search).has(ADS_PARAM)}get adsMode(){return this.ads.loaded&&this.wantsToServeAds}get adsReady(){return this.wantsToServeAds&&!this.cannotLoadAds}get noAdsRedirectUrl(){const e=new URLSearchParams(window.location.search);return KNOWN_CAF_PARAMS.forEach((t=>e.delete(t))),`${window.location.origin}?${e.toString()}`}get callbacks(){return this.ads.toCallbacks()}toContext(){return Object.assign({blocks:this.blocks,pageOptions:this.pageOptions},this.ads.toContext())}}class CookieConsentManager{constructor(){this.injectScriptTag=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.setAttribute("src",COOKIE_CONSENT_JS_URL),t.addEventListener("load",(()=>this.awaitConsent(e))),t.addEventListener("error",(()=>e(!1))),document.head.appendChild(t)}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){this.injected||!COOKIE_CONSENT_JS_URL||isLocal()||(this.injected=yield this.injectScriptTag())}))}awaitConsent(e){let t=0;const n=setInterval((()=>{t+=1,20===t&&(clearInterval(n),e(!0)),void 0!==window.__tcfapi&&(window.addEventListener("ConsentActivity",(t=>{const{detail:{status:n}}=t;n&&e(!0)})),clearInterval(n))}),50)}}class App{main(){var e,t;return __awaiter(this,void 0,void 0,(function*(){if(this.parkResponse=decode(),this.findDomainResponse=yield getFindDomain(),!this.findDomainResponse)throw new Error("Domain failed to load.");this.pixels=Pixels.build(this.findDomainResponse),null===(e=this.pixels)||void 0===e||e.listenForEvents(),this.adblock=new Adblock,yield this.adblock.inject(),this.google=Google.build(this.findDomainResponse,this.parkResponse,this.adblock,buildSignature({context:this.context,callbacks:null===(t=this.google)||void 0===t?void 0:t.callbacks},"click")),this.google.injectTagManager();const n=Parking.build(this.findDomainResponse,this.google);Render.prerender(n),this.cookieConsentManager=new CookieConsentManager,yield this.cookieConsentManager.inject();let i=Failed.cannotPark(this.findDomainResponse);if(i)return void(yield this.transitionToFailed(i));yield this.google.injectAds();const s=Disabled.build(this.findDomainResponse,this.adblock.state);if(s)return void(yield this.transitionToDisabled(s));const a=Sales.build(this.findDomainResponse);if(a)return void(yield this.transitionToSales(a));this.eligibleForZeroClick&&(this.zeroClickResponse=yield getZeroClick(this.context));const o=Redirect.build(this.findDomainResponse,this.zeroClickResponse,this.google);o?yield this.transitionToRedirect(o):(i=Failed.noSponsors(this.google),i?yield this.transitionToFailed(i):yield this.transitionToParking(n))}))}transitionToParking(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.template(e),Render.revealPage(),yield this.google.waitForBlocks(),yield this.track()}))}transitionToRedirect(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e;const t=this.track();Render.revealPage(),yield waiter(e.delay,(e=>Render.loading(e))),yield t,window.location.href=e.url,log(`➡ Redirecting [${e.url}]`)}))}transitionToFailed(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.revealPage(),yield this.track()}))}transitionToSales(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,e.init(this.context),yield this.track()}))}transitionToDisabled(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.revealPage(),yield this.track()}))}track(){var e;return __awaiter(this,void 0,void 0,(function*(){if(!this.state.track)return Promise.resolve();try{const t=this.state.trackingType;return null===(e=this.pixels)||void 0===e||e.dispatchEvent({type:t}),trackVisit({context:this.context,callbacks:this.google.callbacks},t)}catch(e){return}}))}get eligibleForZeroClick(){const{cannotPark:e,canZeroClick:t,zeroClick:n}=this.findDomainResponse,{cannotLoadAds:i,wantsToServeAds:s}=this.google;return!!t&&(!!e||(!(!i||s)||!!(null==n?void 0:n.reason)))}get context(){var e,t,n,i;const s=this.findDomainResponse,a=this.parkResponse,o=null===(e=this.state)||void 0===e?void 0:e.toContext(),r=null===(t=this.adblock)||void 0===t?void 0:t.toContext(),d=null===(n=this.google)||void 0===n?void 0:n.toContext(),c=browserState(),l=Object.assign(Object.assign({},null===(i=this.findDomainResponse)||void 0===i?void 0:i.zeroClick),this.zeroClickResponse);return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({app_version:APP_VERSION},s),a),r),d),o),c),{zeroClick:l})}init(){return __awaiter(this,void 0,void 0,(function*(){try{window.__parkour=this,yield this.main()}catch(e){console.error("app",e);const t=Failed.fromError(e);this.state=t,Render.message(t.message),Render.revealPage()}}))}}(new App).init(),exports.App=App}));