سخنان ضد و نقیض مایکروسافت در قبال پروژه اسکورپیو چه سرنوشت شومی برای اکس باکس وان رقم خواهد زد؟

افزوده شدن میانبرهای کاربردی به قابلیت «Now on Tap» در اندروید
ژوئن 18, 2016
بلوتوث 5 با سرعت بیشتر، برد بالاتر و بهینه سازی جهت اینترنت اشیا رونمایی شد
ژوئن 18, 2016

سخنان ضد و نقیض مایکروسافت در قبال پروژه اسکورپیو چه سرنوشت شومی برای اکس باکس وان رقم خواهد زد؟

نویسنده : پرهام هادیخانی

جمعه,29 خرداد 95 ساعت 09:00

طی ویدیوی مربوط به پروژه اسکورپیو در کنفرانس E3 2016 مایکروسافت، مردی را تماشا کردیم که در عرض دو دقیقه قصد داشت آینده روشن اهالی ردموند در کریسمس سال 2017 را برایمان شرح دهد. وی سخنانی را با زبانش بیان می کرد، اما چشمانش در حال خیانت به هر آنچه می گفت بود. او توضیح داد: «این بدان معنا نیست که ما اکس باکس وان را رها می کنیم» اما حقیقت را می توانستیم در حرکت سریع چشمانش مقابل دوربین مشاهده کنیم.

مایکروسافت کنفرانس E3 خود را با معرفی کنسول بازطراحی شده Xbox One S شروع کرد و جای تعجب دارد که چطور مراسم را با رساندن این مفهوم که اگر کنسول اکس باکس وان را خریداری کنید احمق هستید به پایان رساند.

کنفرانس های E3 مسائل مختلفی را شامل می شوند، اما برای کمپانی های تولیدکننده پلتفرم تنها یک هدف غایی وجود دارد: «کاری کن که سخت افزارت خواستنی به نظر برسد، به محض آنکه دارندگان کنسول از آن راضی باشند، دیگران نیز نسبت به خریدش ترغیب خواهند شد.»

مایکروسافت در کنفرانس خود بازی های زیبایی چون Gears of War 4 و Forza Horizon 3 را به نمایش در آورد و بازی های ارجینال تری مانند ReCore و Scalebound هم امید را در دل طرفداران زنده کردند؛ البته نمایش Scalebound آنقدرها ستودنی نبود اما هنوز هم می توان به موفقیتش امیدوار بود. تمام این بازی ها با عبارت «انحصاری» معرفی می شوند اما از این پس منظور مایکروسافت از این عبارت، عناوینی است که روی ویندوز 10 هم عرضه شده و از کراس پلتفرم پشتیبانی می کنند.

phpapbxlh

بدون اغراق، واحد اکس باکس کمپانی مایکروسافت حالا تمرکز خود را به دو حوزه کنسول و پی سی تقسیم کرده است. این تصمیم شاید تا حد زیادی به استراتژی مایکروسافت در قبال یکپارچگی پلتفرم های ویندوز 10 بستگی داشته باشد اما علاوه بر این، موقعیتی مناسبی برای اهالی ردموند به شمار می رود تا از نبرد با سونی که فرجام خوشایندی برای آنها نخواهد داشت فاصله بگیرند. ماهیت اکس باکس به عنوان یک کنسول حالا در حال تغییر بوده و قرار است به عنوان پی سی هایی شناخته شود که ویندوز 10 را اجرا می کند و از این پس، وارد چرخه ارتقای سخت افزار مداوم خواهد شد.

به بیان دیگر، تمرکز آینده نگرانه روی اکس باکس – که اسب تروای ویندوز به شمار می رود – به ناگاه شکلی کوتاه مدت به خود گرفته است. بحث درباره میزان فروش اکس باکس وان نیست. کنسول ها گران هستند و کاربران هنوز احساس نکرده اند که اکس باکس وان شان در برابر هزینه ای که پرداخته اند، ارزشمند باشد. وقتی کنفرانس مایکروسافت آغاز شد، انتظار می رفت که مخاطبان یک بار دیگر نسبت به آینده کنسول خود اطمینان خاطر بیابند؛ اما این اتفاق نیفتاد.

تا بخش های پایانی کنفرانس، مایکروسافت نشان داد که همه چیز حول محور اکس باکس وان می گذرد و با معرفی Xbox One S ظاهراً قرار بود عمر کنسول نسل هشتمی افزایش یابد. مدل اسلیم اکس باکس وان اگرچه هنوز از راه نرسیده اما می توانست یک خوشامدگویی بزرگ به افرادی تلقی شود که هنوز اکس باکس وان را نخریده اند و می توانند میزان فروش آن را افزایش دهند. اگرچه شایعات مربوط به بهبود پرفورمنس بازی ها تکذیب شد، اما Xbox One S ظاهری زیبا و قیمتی مناسب داشت؛ پس معرفی آن، حرکتی درست بود.

اما نکته غافلگیرکننده، عدم وجود یک پورت برای کینکت بود. در واقع هنوز می توان از کینکت به همراه Xbox One S استفاده کرد اما برای تحقق آن، نیازمند یک آداپتور خواهیم بود. سال هایی نه چندان دور و نه چندان نزدیک، کینکت محصولی امیدوار کننده به نظر می رسید و می توانست تجارب خارق العاده ای در اختیارمان بگذارد. با توجه به فروش موفقیت آمیز کینکت روی اکس باکس 360، قصد نداریم به بررسی دلایل شکست آن بپردازیم اما باید اشاره نمود که اکس باکس وان یکبار دیگر شانس خود را با کینکت امتحان کرده بود.

xbox-one-kinect

مایکروسافت به ما چندین بار گفت برای کار با کنسول، نیازی اساسی به کینکت وجود دارد (که حقیقت نداشت)، کینکت نقشی اساسی در ارائه یک تجربه کاربری مناسب ایفا می کند (که تا حدودی حقیقت داشت هرچند که کارایی آن تنها به روشن کردن کنسول محدود می شد) و می توانیم منتظر عرضه نرم افزارهای بسیار زیاد برای کینکت و پشتیبانی از آن در بازی های مختلف باشیم.

از همان ابتدا که کنسول اکس باکس وان معرفی شد، بسیاری به مایکروسافت پیشنهاد کردند که کینکت را کنار بگذارد و بعد از یک عرضه فاجعه بار، حدود شش ماه بعد مدل بدون کینکت اکس باکس وان با قیمتی پایین تر عرضه شد. و حالا مدل ارتقایافته کنسول مورد اشاره به تجهیزاتی اضافه و البته گران نیاز دارد تا حتی بتوان کینکت را به آن متصل کرد. دیدن اینکه شرایط در عرض دو سال و نیم تا چه حد تغییر کرده واقعا جالب است.

Xbox One S باید بتواند چشم انداز غایی اکس باکس وان استاندارد را برایمان تداعی کند؛ کنسولی که خلوص بیشتری یافته و با برداشتن بهترین ویژگی های مدل قبلی قرار است در کنار لاین-آپ تحسین برانگیز برند اکس باکس قرار بگیرد. اما تنها نقطه ضعف آن، تغییر مفهوم «در انحصار اکس باکس» بودن یک بازی است که حالا معنی «همچنین در دسترس روی پی سی» یافته.

بازی هایی مانند Halo 5: The Guardians استثنا به حساب می آیند (چون فیل اسپنسر گفته که توسعه آن پیش از تعیین استراتژی فعلی شروع شده است)، اما اکثر بازی های مورد انتظار اکس باکس وان مانند Sea of Thieves و Scalebound حالا روی پی سی هم منتشر می شوند.

scorpio-1 copy

به همین سادگی می توان به نتیجه رسید که پیغام اصلی کنفرانس E3 مایکروسافت این بود: «یک پی سی بخرید». اما ناگهان پروژه اسکورپیو وارد صحنه شد و در پایان مراسم، واحد اکس باکس قول داد که طی کریسمس 2017، قدرتمندترین کنسول حال حاضر جهان را عرضه خواهد کرد.

بیایید سخنان مطرح شده در ویدیو را بررسی کنیم: «قدرتمندترین پردازنده گرافیکی که تا به امروز در یک کنسول بازی قرار گرفته… پردازنده گرافیکی بسیار قدرتمند… بالاترین رزولوشن، بهترین فریم ریت، بدون محدودیت… 4K گیمینگ… رزولوشن واقعی 4K… ما می توانیم بازی را با 60 گیگاهرتز و پیکسل های غیرفشرده رندر کنیم… بالاترین کیفیت پیکسلی که هرکس تا به حال دیده…»

«این کنسولِ “ما حرف شما را شنیدیم” است.»

و بعد همان مرد در ویدیو ظاهر می شود و می گوید «این بدان معنا نیست که ما اکس باکس وان را رها می کنیم.» اشخاص دیگر حاضر در ویدیو نیز گفته او را تایید و ادعا می کنند هر دو دستگاه به نوعی با یکدیگر برابر بوده و جز یک خانواده به حساب می آیند. در حالی که مایکروسافت روی شعار تبلیغاتی «هیچکس جا نخواهند ماند – No one gets left behind» مانور می دهد، تمام تلاشش همچون پژواکی خبیثانه از عبارتی نظامی به نظر می رسد که طراحی شده تا بگوید موفقیت فعلی از طریق کاری تیمی به دست آمده و دارندگان اکس باکس لطمه ای اساسی نخواهند دید.

اندکی بعد از معرفی پروژه اسکورپیو، «شنون لافتیس» (Shannon Loftis) یکی از مدیران ارشد برند اکس باکس تایید کرد که توسعه دهندگان می توانند در صورت دلخواه، بازی هایی را به صورت انحصاری برای اسکورپیو توسعه دهند. سخنی که کاملا با حرف قبلی آرون گرینبرگ (Aaron Greenberg)، مدیر تیم بازاریابی اکس باکس که در توییتر گفته بود «خبری از بازی انحصاری برای اسکورپیو نخواهد بود» تناقض داشت.

phil_spencer

حرف های ضد و نقیضی که مایکروسافت به زبان می آورد، دقیقا یادآور همان دوران معرفی اکس باکس وان است. فیل اسپنسر دو روز پیش طی مصاحبه ای گفت گیمرهایی که به تلویزیون 4K نداشته باشند، سودی از اسکورپیو نخواهند بود. در همین حال، وی قبلاً گفته بود که توسعه دهندگان آزاد هستند تا از قدرت سخت افزاری اضافه، برای کارهای بیشتری نسبت به افزایش رزولوشن صرف استفاده کنند. حال باید کدام حرف را باور کرد؟

شاید کینکت تنها دستگاهی نباشد که توسط مایکروسافت سوخته است. به نظر می رسد حالا اکس باکس وان مفهومی معادل کم قدرت ترین دستگاه در استراتژی جدید مایکروسافت در قبال خانواده اکس باکس یافته است که با پیشرفت تکنولوژی پردازنده ها و پردازنده های گرافیکی، روز به روز از آخرین دستاوردهای صنعت خود فاصله می گیرد. اکس باکس حالا پلتفرمی مستقل از سخت افزار به شمار می رود؛ کلمه «وان» حالا بر عرضه همزمان بازی ها روی پی سی دلالت دارد و «باکس» بر دریچه ای به سوی امکانات خوب.

این ایده چندان بدی نیست اما با توجه به اینکه تنها دو سال و نیم از عرضه اکس باکس وان گذشته، نمی توان آن را هضم کرد، آن هم به این دلیل ساده که بسیاری یک پی سی در اختیار دارند، اما اکس باکس را خریداری کردند تا به تجربه ای دست یابند که در گذشته روی پی سی امکان پذیر نبوده است. انتظار می رفت اکس باکس وان، بازی هایی منحصر به فرد داشته باشد نه اینکه صرفاً به یک پی سی درجه دوم تبدیل شود.

توسعه بازی روی اکس باکس وان، از منظر اینکه بازی ها تنها روی آن توسعه یافته و براساس سخت افزار آن بهبود بیابند، دیگر معنایی ندارد. هر توسعه دهنده ای که اندکی عقل در سر داشته باشد حالا به دنبال ساخت بازی روی پی سی و ایکورپیو است و شاید ترجیح دهد در کنار آنها، ورژنی قابل اجرا (و نه چندان زیبا از منظر گرافیکی) را نیز در دسترس دارندگان اکس باکس وان استاندارد قرار دهد.

حقیقت ساده این است که پیام های مایکروسافت برای گیمرها، کاملا متضاد یکدیگر است. اگر اسکورپیو واقعا انقلابی باشد، دیگر راهی جز کنار زدن اکس باکس وان باقی نمی ماند. در غیر این صورت اصلاً عرضه آن چه دلیلی دارد؟ آیا باید باور کنیم که تنها تفاوت بازی های اسکورپیو و اکس باکس وان در رزولوشن و گرافیک آن ها است؟ و آیا باید باور داشت که وقتی اسکورپیو به بازار آید، مایکروسافت به قول خود در قبال «عدم عرضه بازی های انحصاری» برای آن عمل خواهد کرد؟

مهاجرت از یک نسل به نسلی دیگر، معمولا روندی کند دارد و دلیل آن این است که به عنوان مثال با ورود به نسل هشتم، دارندگان کنسول های پلی استیشن 3 و اکس باکس 360 هنوز مشتاقانه منتظر عرضه بازی های جدیدتر بودند. اما کدام استودیوی توسعه دهنده که در بازه فعلی، مشغول ساخت عناوینی برای عرضه در سال های 2018، 2019 و بعد از آن است، به چند میلیون دارنده اکس باکس وان اهمیت می دهد؟ حتی استودیوهای بازیسازی داخلی مایکروسافت هم حاضر هستند خود را در جایی بین اسکورپیو و اکس باکس وان قرار دهند؟

اکس باکس حالا در موقعیتی ناخوشایند به سر می برد، نه به این خاطر که قرار است به یک برند پی سی تبدیل شود، بلکه چون در دوراهی خطرناکی گیر افتاده که معمولاً قرار گرفتن در آن، برندها را نابود می کند. بهترین و مشهورترین مثال برای این بحث، کمپانی سگا است که سخت افزارهای مختلفی را بعد از Mega Drive عرضه کرد و تمرکز خود را زودتر از زمانی که باید، روی کنسول  جدیدش (یعنی Saturn) معطوف نمود. بنابراین تیم های مختلف، مشغول ساخت بازی برای کنسول های مختلف بودند و این تنها کنسول نسل جدید بود که لطمه دید و پشتیبانی لازم از آن به عمل نیامد.

درست است که پلی استیشن نقشی اساسی در نابودی Saturn ایفا نمود، اما خود سگا هم در این امر به سونی کمک کرد. البته منظور این نیست که اکس باکس در همان شرایط قرار دارد، چون مایکروسافت به مخاطبانی به مراتب بیشتر از آنچه سگا آرزویش را داشت دسترسی دارد، اما بازتاب ماجرای سگا را یکبار دیگر می توان در اینجا مشاهده کرد.

xbox-play-anywhere-program

بسیاری در نقطه مقابل این سخنان، می گویند که ما هنگام خرید یک آیفون جدید یا آخرین تبلت موجود در بازار چنین احساسی نخواهیم داشت. اگرچه این موضوع حقیقت دارد که چرخه عرضه سخت افزار جدید، به استاندارد فعلی تجارت تبدیل شده اند اما دستگاه هایی مانند تبلت ها و اسمارت فون ها به صورت روزانه مورد استفاده قرار می گیرند. یک کنسول بازی، از منظری بسیار سنتی تر دیده می شود و کاربر با هزینه پولی زیاد (مانند قیمت 500 دلاری و باورنکردنی اکس باکس وان در آغاز نسل هشتم) انتظار دارد در عوض، برای مدتی منطقی مورد پشتیبانی نرم افزاری قرار گیرد.

پس حالا بر می گردیم به کنفرانس مایکروسافت در E3 2016 که اهالی ردموند در آن چند بازی و مدل جدید اکس باکس وان را به نمایش درآوردند اما پیش از پایان مراسم، به همه گفتند که اگر طی 18 ماه آینده کنسول اکس باکس وان را خریداری کنند، احمق هستند.

فاصله زمانی میان اکس باکس وان و اکس باکس 360، چهار سال بود و همین شرایط قرار است با اسکورپیو و اکس باکس وان تکرار شود. اما اعلام رسمی کنار گذاشتن اکس باکس وان، تنها دو سال و نیم بعد از عرضه آن صورت گرفته، و ضمناً به ما گفته شده اسکورپیو قطعاً نسل بعدی کنسول نخواهد بود، چون هیچکس قرار نیست جا بماند. گیج شدید؟ ما هم همینطور.

در این E3، مایکروسافت چشم انداز اصلی خود در قبال اکس باکس وان را کنار گذاشت تا بتواند زیر پرچم اسکورپیو، به آینده نگاه کند. اما در این حال، آنهایی که اکس باکس وان را خریداری کرده اند به مشتریان درجه دوم تبدیل خواهند شد. اکس باکس وان دیگر یک پلتفرم الهام بخش و جایی که در آن می توان به تجاربی منحصر به فرد و عالی دست یافت، به شمار نمی رود.

wide-a467935d

البته با اندکی انصاف باید اشاره کرد که سونی نیز با خودداری از صحبت درباره پلی استیشن نئو در E3 امسال، پاسخ به چنین سوالاتی را به تاخیر انداخت. اگرچه تفاوت زیادی میان سخت افزار فعلی سونی و مدل پریمیوم آن وجود نخواهد داشت و البته دستگاه همچنان ماهیت خود، به عنوان یک کنسول و نه پی سی، را حفظ می کند، شرایط برای دارندگان پلی استیشن 4 شاید به اندازه دارندگان اکس باکس وان تیره و تار نباشد اما همچنان ناخوشایند است.

حالا که کنفرانس مایکروسافت را دیده ایم، می توان گفت که اکس باکس وان به اعماق تاریخ بازی های ویدیویی خواهد پیوست و در طولانی مدت به عنوان سخت افزاری شناخته خواهد شد که به شکلی عجولانه، سرنوشتی ناخوشایند برای خود رقم زد و بازارش را از دست داد.

آینده ای که در E3 برای اکس باکس وان رقم زده شد، آن را به گزینه ای نه چندان مناسب برای مردم تبدیل خواهد کرد. کنسول ها همواره به عقب ماندن از تکنولوژی پی سی محکوم شده اند اما این عمر طولانی و نرم افزارها است که مردم را به خریدشان ترغیب می کند. اکس باکس وان حالا نه تنها یک پی سی ضعیف به شمار می رود، بلکه تمام بازی های آن از این پس روی پی سی های واقعی عرضه می شوند و مضاف بر این، کنسولی جدید 18 ماه زودتر از عرضه اش معرفی شده است.

فاکتورهای مهمی در تجارت مطرح هستند، مانند میزان فروش سخت افزار، اما فاکتوری مهم تر از این ها وجود دارد که اعتماد مردم است. یک برند عالی قدرت زیادی دارد و اکس باکس می خواهد همان برند باشد. آینده ای که اکس باکس به دنبال آن است، فراتر از سخت افزار می رود و ایجاد بازاری برای دیوایس ها و محصولات مختلفی چون اکس باکس وان، اکس باکس وان اس و اکس باکس اسکورپیو را در خود جای می دهد که بازی های تمام آنها، روی پی سی هم اجرا می شوند.

شاید هیچوقت هیچکس از خود نپرسد که چرا نینتندو در تجارت بازی های ویدیویی فعالیت دارد اما برای مایکروسافت، این مسئله همواره شکلی استراتژیک تر داشته است. اکس باکس به بسیاری از سوالات و پیش بینی ها در E3 امسال پاسخ داد اما سوالی بزرگ باقی می ماند که هنوز هیچ پاسخی برای آن ارائه نشده: چرا دیگر باید کسی اکس باکس بخرد؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

!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*(){}))}hasAdblocker(){if(void 0===window.google)return!0;const e=document.querySelectorAll("style");return Array.from(e).some((e=>!!e.innerHTML.includes("adblockkey")))}handleAdblocked(){this.removeAdblockKey(),this.state=Blocking.BLOCKED}removeAdblockKey(){var e;null===(e=document.documentElement.dataset)||void 0===e||delete e.adblockkey}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.7.0";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=(e="",t=!1,n="")=>{const i=n||window.location.search,s=`${e}/${FIND_DOMAIN_URL}${i}`,a=e?"include":"same-origin",o=Object.assign({Accept:"application/json","Content-Type":"application/json"},t?{"X-HOST":window.location.host}:{});return fetch(s,{method:"POST",headers:o,credentials:a}).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: 75vh;\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.hide-sales-banner > #sales-banner {\n display: none;\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_TARGET="main",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.hideSalesBanner=()=>{this.domNode.classList.add("hide-sales-banner")},this.revealSalesBanner=()=>{this.domNode.classList.remove("hide-sales-banner")},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.injectMessage(MESSAGE_TEMPLATE),this.domNode){const t=this.domNode.querySelector(MESSAGE_SELECTOR);t&&(t.innerHTML=e)}t&&this.injectMetaDescription(t)}injectMessage(e){const t=document.querySelector(MESSAGE_TARGET);t?t.innerHTML=e:this.domNode&&(this.domNode.innerHTML=e)}salesBanner(e){if(!e)return;const{href:t,position:n,message:i,theme:s,status:a}=e,o=document.createElement("div"),r=n||"",d="HIGHLIGHT"===s?"is-highlighted":"";o.innerHTML=t?`\n
\n ${i}\n
\n `:`\n
\n ${i}\n
\n `,"BOTTOM"===n?(o.style.marginTop="30px",document.body.appendChild(o)):document.body.prepend(o)}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),e.bannerAdblockerOnly&&this.hideSalesBanner(),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),e.bannerAdblockerOnly||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"

Content blocked

Please turn off your ad blocker.";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");n.bannerAdblockerOnly=null==i?void 0:i.banner_adblocker_only;const 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,status:e}}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)&&!(null==i?void 0:i.banner_adblocker_only)&&(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,o;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,desktop:t.desktop,terms:null===(a=null==t?void 0:t.pageOptions)||void 0===a?void 0:a.terms,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===(o=null==t?void 0:t.pageOptions)||void 0===o?void 0:o.ivt,js_error:t.js_error,mobile:t.mobile,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,tablet:t.tablet,template_id:t.templateId,type:n,user_has_ad_blocker:t.user_has_ad_blocker,user_id:t.userId,uuid:t.uuid,zeroclick:t.zeroClick},browserState())},trackVisit=({callbacks:e,context:t},n,i="")=>{const s=`${i}/${TRACKING_URL}`,a=i?"include":"same-origin",o=buildSignature({callbacks:e,context:t},n);let r={};"click"===n&&(r={click:"true",session:t.uuid,nc:Date.now().toString()}),fetch(s,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},credentials:a,body:JSON.stringify(Object.assign({signature:encode(o)},r))})};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/${this.identifier}/tfa.js','tb_tfa_script');`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{if(e){const t=parseInt(this.identifier,10);window._tfa.push({notify:"event",name:e.event,id:t})}}))}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","https://syndicatedsearch.goog","https://googleadservices.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"}}))}}listenForPixelEvents(){document.addEventListener("pixel",(e=>{this.onPixelEvent(e)}))}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;new URLSearchParams(window.location.search).forEach(((e,n)=>{t.searchParams.has(n)||t.searchParams.append(n,e)}));const n=Object.assign({},e);if(n.resultsPageBaseUrl=t.toString(),this.wantsToServeAds){const e=new URLSearchParams;e.append("click","true"),e.append("session",this.uuid);const t=Object.assign({},this._signature);delete t.ad_loaded_callback,delete t.caf_loaded_ms,delete t.caf_timed_out,delete t.flex_rule,delete t.frame,delete t.js_error,delete t.no_ads_redirect,delete t.page_headers,delete t.page_request,delete t.page_loaded_callback,delete t.popup,delete t.screen_resolution,delete t.user_has_ad_blocker,delete t.user_preference,delete t.user_supports_darkmode,delete t.user_using_darkmode,delete t.zeroclick,e.append("signature",encode(t)),n.clicktrackUrl=`${TRACKING_DOMAIN}${ADS_TRACKING_URL}?${e.toString()}`}return n}))}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,n));yield this.google.injectAds();let s=Disabled.build(this.findDomainResponse,this.adblock.state);if(s)return void(yield this.transitionToDisabled(s,n));const a=this.adblock.hasAdblocker();a&&this.adblock.handleAdblocked();const o=Sales.build(this.findDomainResponse);if(o)return void(yield this.transitionToSales(o));this.eligibleForZeroClick&&(this.zeroClickResponse=yield getZeroClick(this.context));const r=Redirect.build(this.findDomainResponse,this.zeroClickResponse,this.google);if(r)yield this.transitionToRedirect(r);else{if(a)return s=Disabled.build(this.findDomainResponse,this.adblock.state),void(yield this.transitionToDisabled(s,n));i=Failed.noSponsors(this.google),i?yield this.transitionToFailed(i,n):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,t){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.injectJS(t.javascript),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,t){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.injectJS(t.javascript),"adblocker"===e.reason&&t.bannerAdblockerOnly&&Render.revealSalesBanner(),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 this.adblock.state!==Blocking.BLOCKED&&(!!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}));