1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2"use strict"; 3var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 4 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 5 return new (P || (P = Promise))(function (resolve, reject) { 6 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 7 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 8 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 9 step((generator = generator.apply(thisArg, _arguments || [])).next()); 10 }); 11}; 12var __generator = (this && this.__generator) || function (thisArg, body) { 13 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 14 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 15 function verb(n) { return function (v) { return step([n, v]); }; } 16 function step(op) { 17 if (f) throw new TypeError("Generator is already executing."); 18 while (g && (g = 0, op[0] && (_ = 0)), _) try { 19 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 20 if (y = 0, t) op = [op[0] & 2, t.value]; 21 switch (op[0]) { 22 case 0: case 1: t = op; break; 23 case 4: _.label++; return { value: op[1], done: false }; 24 case 5: _.label++; y = op[1]; op = [0]; continue; 25 case 7: op = _.ops.pop(); _.trys.pop(); continue; 26 default: 27 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 28 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 29 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 30 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 31 if (t[2]) _.ops.pop(); 32 _.trys.pop(); continue; 33 } 34 op = body.call(thisArg, _); 35 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 36 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 37 } 38}; 39Object.defineProperty(exports, "__esModule", { value: true }); 40exports.locale = void 0; 41var config_1 = require("./modules/config"); 42var page_1 = require("./modules/page"); 43var site_1 = require("./modules/site"); 44var logo_1 = require("./modules/logo"); 45var button_1 = require("./modules/button"); 46var news_1 = require("./modules/news"); 47var program_1 = require("./modules/program"); 48var calendar_1 = require("./modules/calendar"); 49var ticket_1 = require("./modules/ticket"); 50var schedule_1 = require("./modules/schedule"); 51var info_1 = require("./modules/info"); 52var pods_1 = require("./modules/pods"); 53var contentService_1 = require("./modules/contentService"); 54var eventService_1 = require("./modules/eventService"); 55var eventType_1 = require("./modules/eventType"); 56var pagesWpRendered = [page_1.Pages.PRESS]; 57var system = { 58 currentPage: page_1.sitemap[page_1.Locales.sv].NEWS, 59 init: function (locale) { 60 var _a; 61 return __awaiter(this, void 0, void 0, function () { 62 var urlIndex, pageUrl, subPage, sitePage; 63 return __generator(this, function (_b) { 64 switch (_b.label) { 65 case 0: return [4 /*yield*/, eventService_1.eventService.init(locale)]; 66 case 1: 67 _b.sent(); 68 return [4 /*yield*/, site_1.site.init(locale)]; 69 case 2: 70 _b.sent(); 71 urlIndex = locale === page_1.Locales.en ? 3 : 2; 72 pageUrl = window.location.pathname.split("/")[urlIndex]; 73 subPage = window.location.pathname.split("/")[urlIndex + 1]; 74 console.log("window.location.pathname", window.location.pathname); 75 console.log("pageUrl", pageUrl); 76 console.log("subPage", subPage); 77 return [4 /*yield*/, page_1.page.findPageByUrl(pageUrl, subPage, page_1.Locales[locale])]; 78 case 3: 79 sitePage = _b.sent(); 80 system.currentPage = sitePage; 81 console.log("system.currentPage: ", system.currentPage); 82 if (pagesWpRendered.includes((_a = this.currentPage) === null || _a === void 0 ? void 0 : _a.page)) { 83 contentService_1.contentService.init(locale, sitePage.category); 84 site_1.site.listenBoxes(); 85 } 86 else { 87 this.initPageModules(locale); 88 } 89 site_1.site.checkHash(); 90 logo_1.logo.init(); 91 button_1.button.init(); 92 eventType_1.eventType.init(locale); 93 return [2 /*return*/]; 94 } 95 }); 96 }); 97 }, 98 initPageModules: function (locale) { 99 var _a; 100 return __awaiter(this, void 0, void 0, function () { 101 return __generator(this, function (_b) { 102 if (!((_a = system.currentPage) === null || _a === void 0 ? void 0 : _a.page)) { 103 return [2 /*return*/]; 104 } 105 if (system.currentPage.page === page_1.Pages.NEWS) { 106 news_1.news.init(locale, system.currentPage); 107 } 108 else if (system.currentPage.page === page_1.Pages.PROGRAM) { 109 program_1.program.init(locale); 110 } 111 else if (system.currentPage.page === page_1.Pages.SCHEDULE) { 112 schedule_1.schedule.init(locale); 113 } 114 else if (system.currentPage.page === page_1.Pages.CALENDAR) { 115 calendar_1.calendar.init(locale); 116 } 117 else if (system.currentPage.page === page_1.Pages.TICKETS) { 118 ticket_1.ticket.init(locale); 119 } 120 else if (system.currentPage.page === page_1.Pages.INFO) { 121 info_1.info.init(locale, system.currentPage); 122 } 123 else if (system.currentPage.page === page_1.Pages.PODCAST) { 124 pods_1.pods.init(locale, system.currentPage); 125 } 126 return [2 /*return*/]; 127 }); 128 }); 129 }, 130 getLocaleFromHtml: function () { 131 var _a; 132 return __awaiter(this, void 0, void 0, function () { 133 var localeObject, locale; 134 return __generator(this, function (_b) { 135 localeObject = document.getElementsByTagName("html")[0]; 136 locale = config_1.config.defaultLang; 137 if (localeObject) { 138 locale = 139 ((_a = localeObject.getAttribute("lang")) === null || _a === void 0 ? void 0 : _a.substring(0, 2)) || 140 config_1.config.defaultLang; 141 } 142 return [2 /*return*/, locale]; 143 }); 144 }); 145 }, 146}; 147/* 148 * Global 149 */ 150exports.locale = "sv";
151$(document).ready(function () { 152 return __awaiter(this, void 0, void 0, function () { 153 var locale; 154 return __generator(this, function (_a) { 155 switch (_a.label) { 156 case 0: return [4 /*yield*/, system.getLocaleFromHtml()]; 157 case 1: 158 locale = _a.sent(); 159 return [4 /*yield*/, config_1.config.configureLocale(locale)]; 160 case 2: 161 _a.sent(); 162 return [4 /*yield*/, system.init(locale)]; 163 case 3: 164 _a.sent(); 165 return [2 /*return*/]; 166 } 167 }); 168 }); 169}); 170 171},{"./modules/button":2,"./modules/calendar":3,"./modules/config":4,"./modules/contentService":5,"./modules/eventService":7,"./modules/eventType":8,"./modules/info":12,"./modules/logo":14,"./modules/news":15,"./modules/page":16,"./modules/pods":17,"./modules/program":18,"./modules/schedule":19,"./modules/site":21,"./modules/ticket":22}],2:[function(require,module,exports){ 172"use strict"; 173Object.defineProperty(exports, "__esModule", { value: true }); 174exports.button = void 0; 175var element_1 = require("./element"); 176var initialData = window.__INITIAL_DATA__; 177exports.button = { 178 listen: function () { 179 if (null !== element_1.element.buttons.buttonToggle) { 180 element_1.element.buttons.buttonToggle.onclick = function () { 181 var _a; 182 if (-1 != 183 ((_a = element_1.element.wrappers.mainWrapper) === null || _a === void 0 ? void 0 : _a.className.indexOf("toggled-on"))) { 184 element_1.element.wrappers.navWrapper.className = 185 element_1.element.wrappers.navWrapper.className.replace(" toggled-on", ""); 186 element_1.element.wrappers.mainWrapper.className = 187 element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", ""); 188 } 189 else { 190 element_1.element.wrappers.navWrapper.className += " toggled-on"; 191 element_1.element.wrappers.mainWrapper.className += " toggled-on"; 192 } 193 }; 194 } 195 if (null !== element_1.element.buttons.buttonToggleMobile) { 196 element_1.element.buttons.buttonToggleMobile.onclick = function () { 197 if (-1 != 198 element_1.element.wrappers.mainWrapper.className.indexOf("toggled-on")) { 199 element_1.element.wrappers.navWrapper.className = 200 element_1.element.wrappers.navWrapper.className.replace(" toggled-on", ""); 201 element_1.element.wrappers.mainWrapper.className = 202 element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", ""); 203 } 204 else { 205 element_1.element.wrappers.navWrapper.className += " toggled-on"; 206 element_1.element.wrappers.mainWrapper.className += " toggled-on"; 207 } 208 }; 209 } 210 if (null !== element_1.element.buttons.buttonCloseSinglePane) { 211 element_1.element.buttons.buttonCloseSinglePane.onclick = function () { 212 element_1.element.wrappers.navWrapper.className = 213 element_1.element.wrappers.navWrapper.className.replace(" toggled-on", ""); 214 element_1.element.wrappers.mainWrapper.className = 215 element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", ""); 216 element_1.element.wrappers.mainWrapper.className = 217 element_1.element.wrappers.mainWrapper.className.replace(" single-focus", ""); 218 element_1.element.wrappers.mainWrapper.className = 219 element_1.element.wrappers.mainWrapper.className.replace(" share", ""); 220 var stateObj = { foo: "bar" }; 221 history.pushState(stateObj, "", initialData.overviewUrl); 222 }; 223 } 224 // if (null !== element.buttons.buttonShare) { 225 // element.buttons.buttonShare.onclick = function () { 226 // if (-1 === element.wrappers.mainWrapper.className.indexOf('share')) { 227 // element.wrappers.mainWrapper.className += ' share'; 228 // } 229 // }; 230 // } 231 if (null !== element_1.element.buttons.buttonCloseShare) { 232 element_1.element.buttons.buttonCloseShare.onclick = function () { 233 element_1.element.wrappers.mainWrapper.className = 234 element_1.element.wrappers.mainWrapper.className.replace(" share", ""); 235 }; 236 } 237 if (null !== element_1.element.buttons.buttonShareUrl) { 238 element_1.element.buttons.buttonShareUrl.addEventListener("click", function (e) { 239 var text = element_1.element.buttons.buttonShareUrl.href; 240 var textArea = document.createElement("textarea"); 241 // 242 // *** This styling is an extra step which is likely not required. *** 243 // 244 // Why is it here? To ensure: 245 // 1. the element is able to have focus and selection. 246 // 2. if element was to flash render it has minimal visual impact. 247 // 3. less flakyness with selection and copying which **might** occur if 248 // the textarea element is not visible. 249 // 250 // The likelihood is the element won't even render, not even a flash, 251 // so some of these are just precautions. However in IE the element 252 // is visible whilst the popup box asking the user for permission for 253 // the web page to copy to the clipboard. 254 // 255 // Place in top-left corner of screen regardless of scroll position. 256 textArea.style.position = "fixed"; 257 textArea.style.top = "0"; 258 textArea.style.left = "0"; 259 // Ensure it has a small width and height. Setting to 1px / 1em 260 // doesn't work as this gives a negative w/h on some browsers. 261 textArea.style.width = "2em"; 262 textArea.style.height = "2em"; 263 // We don't need padding, reducing the size if it does flash render. 264 textArea.style.padding = "0"; 265 // Clean up any borders. 266 textArea.style.border = "none"; 267 textArea.style.outline = "none"; 268 textArea.style.boxShadow = "none"; 269 // Avoid flash of white box if rendered for any reason. 270 textArea.style.background = "transparent";
271 textArea.value = text; 272 document.body.appendChild(textArea); 273 textArea.select(); 274 try { 275 var successful = document.execCommand("copy"); 276 var msg = successful ? "successful" : "unsuccessful"; 277 console.log("Copying text command was " + msg); 278 } 279 catch (err) { 280 console.log("Oops, unable to copy"); 281 } 282 document.body.removeChild(textArea); 283 e.stopPropagation(); 284 e.preventDefault(); 285 element_1.element.buttons.buttonShareUrl.innerHTML = "Url (Copied)"; 286 }); 287 } 288 }, 289 init: function () { 290 console.log("button init"); 291 exports.button.listen(); 292 }, 293}; 294 295},{"./element":6}],3:[function(require,module,exports){ 296"use strict"; 297var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 298 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 299 return new (P || (P = Promise))(function (resolve, reject) { 300 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 301 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 302 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 303 step((generator = generator.apply(thisArg, _arguments || [])).next()); 304 }); 305}; 306var __generator = (this && this.__generator) || function (thisArg, body) { 307 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 308 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 309 function verb(n) { return function (v) { return step([n, v]); }; } 310 function step(op) { 311 if (f) throw new TypeError("Generator is already executing."); 312 while (g && (g = 0, op[0] && (_ = 0)), _) try { 313 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 314 if (y = 0, t) op = [op[0] & 2, t.value]; 315 switch (op[0]) { 316 case 0: case 1: t = op; break; 317 case 4: _.label++; return { value: op[1], done: false }; 318 case 5: _.label++; y = op[1]; op = [0]; continue; 319 case 7: op = _.ops.pop(); _.trys.pop(); continue; 320 default: 321 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 322 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 323 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 324 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 325 if (t[2]) _.ops.pop(); 326 _.trys.pop(); continue; 327 } 328 op = body.call(thisArg, _); 329 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 330 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 331 } 332}; 333var __importDefault = (this && this.__importDefault) || function (mod) { 334 return (mod && mod.__esModule) ? mod : { "default": mod }; 335}; 336Object.defineProperty(exports, "__esModule", { value: true }); 337exports.calendar = void 0; 338var config_1 = require("./config"); 339var site_1 = require("./site"); 340var festivalpass_1 = require("./festivalpass"); 341var language_1 = require("./language"); 342var eventService_1 = require("./eventService"); 343var externalEventService_1 = require("./externalEventService"); 344var dayjs_1 = __importDefault(require("dayjs")); 345exports.calendar = { 346 _locale: config_1.config.defaultLang, 347 allEvents: [], 348 allPasses: [], 349 renderMonth: function (postDate, addNow) { 350 var nowString = addNow ? 'id="now" ' : ""; 351 $(".entry-content").append("<h2 ".concat(nowString, "class=\"month-header\">").concat(postDate.format("MMMM YYYY"), "</h2>")); 352 }, 353 renderCalendarBox: function (postYear, postMonth) { 354 $(".entry-content").append("<div class=\"calendar-box-".concat(postYear, "-").concat(postMonth, "\">")); 355 }, 356 isDateBeforeToday: function (date) { 357 return (new Date(date.toDateString()) < new Date(new Date().toDateString())); 358 }, 359 renderPost: function (eventYear, eventMonth, event) { 360 var archiveClass = exports.calendar.isDateBeforeToday(event.startTime) 361 ? " archive" 362 : ""; 363 var template = "<div class=\"calendar-item ".concat(event.extraCssClass || "").concat(archiveClass, "\" data-id=\"").concat(event.id, "\" data-link=\"").concat(event.link, "\" style=\"background-color:").concat(event.backgroundColor, "\"><div>"); 364 template += eventService_1.eventService.renderEventType(event); 365 template += "<h2>".concat(event.title, "</h2>"); 366 template += '<p class="time-and-place">'; 367 template += eventService_1.eventService.renderDateAndVenue(event); 368 template += "</p>"; 369 template += "<p class=\"ticket\">"; 370 if (event.ticket) { 371 template += "<a href=\"".concat(event.ticket, "\" target=\"_blank\">").concat(language_1.language.get(site_1.site._locale, "BiljettPl"), "</a>"); 372 } 373 template += "</p>"; 374 template += "</div></div>"; 375 $(".calendar-box-".concat(eventYear, "-").concat(eventMonth)).append(template); 376 }, 377 parsePost: function (currentYear, currentMonth, event) { 378 var eventYear = (0, dayjs_1.default)(event.startDate).year(); 379 var eventMonth = (0, dayjs_1.default)(event.startDate).month(); 380 //console.log(event.startDate, eventYear, eventMonth); 381 if (currentYear === -1 || 382 currentYear !== eventYear || 383 currentMonth === -1 || 384 currentMonth !== eventMonth) { 385 var now = (0, dayjs_1.default)(); 386 var addNow = false;
387 // console.log( 388 // "eventYear", 389 // eventYear, 390 // "eventMonth", 391 // eventMonth, 392 // "now.month()+1", 393 // now.month() + 1 394 // ); 395 if (!addNow && 396 now.year() === eventYear && 397 (now.month() + 1 === eventMonth || 398 now.month() + 1 >= eventMonth)) { 399 console.log("addNow", now.format("MMMM YYYY")); 400 addNow = true; 401 } 402 exports.calendar.renderMonth((0, dayjs_1.default)(event.startDate), addNow); 403 exports.calendar.renderCalendarBox(eventYear, eventMonth); 404 } 405 exports.calendar.renderPost(eventYear, eventMonth, event); 406 return { eventYear: eventYear, eventMonth: eventMonth }; 407 }, 408 parse: function (events) { 409 var currentYear = -1; 410 var currentMonth = -1; 411 events.forEach(function (event) { 412 if (event.startDate) { 413 var eventDate = exports.calendar.parsePost(currentYear, currentMonth, event); 414 currentYear = eventDate.eventYear; 415 currentMonth = eventDate.eventMonth; 416 } 417 }); 418 }, 419 parseFestivalpasses: function (events, locale) { 420 events.forEach(function (event) { 421 if (event.passes) { 422 var addPipe = event.ticket ? true : false; 423 var selector = "[data-id=\"".concat(event.id, "\"] .ticket"); 424 festivalpass_1.festivalpass.load(event.passes, selector, addPipe, exports.calendar.allPasses, locale); 425 } 426 }); 427 }, 428 load: function (events, locale) { 429 exports.calendar.parse(events); 430 exports.calendar.parseFestivalpasses(events, locale); 431 exports.calendar.listenBoxes(); 432 }, 433 listenBoxes: function () { 434 console.log("calendar listenBoxes"); 435 $("div.calendar-item").click(function (e) { 436 if (e.currentTarget.className.includes("external")) { 437 window.location.href = e.currentTarget.dataset.link; 438 } 439 else { 440 site_1.site.handleClick(this); 441 } 442 }); 443 }, 444 appendContent: function (events) { 445 events.forEach(function (event) { 446 if (!eventService_1.eventService.allEvents.find(function (e) { return e.id === event.id; }) && 447 !eventService_1.eventService.allEvents.find(function (e) { return e.slug === event.slug; })) { 448 exports.calendar.allEvents.push(event); 449 } 450 else { 451 console.log("event exists!", event.title); 452 } 453 }); 454 exports.calendar.allEvents = eventService_1.eventService.sort(exports.calendar.allEvents, eventService_1.SortOrder.DESC); 455 }, 456 checkHash: function () { 457 console.log("hash", window.location.hash); 458 if (window.location.hash) { 459 var target = window.location.hash.replace("#", ""); 460 //alert("hash" + target); 461 //location.hash = "#" + target; 462 var element_to_scroll_to = document.getElementById(target); 463 element_to_scroll_to.scrollIntoView(); 464 $(".site-title").addClass("scrolled"); 465 } 466 }, 467 init: function (locale) { 468 return __awaiter(this, void 0, void 0, function () { 469 var _a, _b, _c, _d; 470 return __generator(this, function (_e) { 471 switch (_e.label) { 472 case 0: 473 exports.calendar._locale = locale; 474 _a = exports.calendar; 475 return [4 /*yield*/, festivalpass_1.festivalpass.getPasses(locale)]; 476 case 1: 477 _a.allPasses = _e.sent(); 478 _b = exports.calendar; 479 return [4 /*yield*/, eventService_1.eventService.get(locale)]; 480 case 2: 481 _b.allEvents = _e.sent(); 482 _d = (_c = exports.calendar).appendContent; 483 return [4 /*yield*/, externalEventService_1.externalEventService.getForSorces(locale)]; 484 case 3: 485 _d.apply(_c, [_e.sent()]); 486 exports.calendar.allEvents = eventService_1.eventService.filterHasValidStartTime(exports.calendar.allEvents); 487 exports.calendar.allEvents = eventService_1.eventService.sort(exports.calendar.allEvents, eventService_1.SortOrder.DESC); 488 exports.calendar.load(exports.calendar.allEvents, locale); 489 setTimeout(function () { 490 exports.calendar.checkHash(); 491 }, 50); 492 console.log("calendar init", exports.calendar._locale); 493 return [2 /*return*/]; 494 } 495 }); 496 }); 497 }, 498}; 499 500},{"./config":4,"./eventService":7,"./externalEventService":9,"./festivalpass":10,"./language":13,"./site":21,"dayjs":25}],4:[function(require,module,exports){ 501"use strict"; 502var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 503 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 504 return new (P || (P = Promise))(function (resolve, reject) { 505 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 506 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 507 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 508 step((generator = generator.apply(thisArg, _arguments || [])).next()); 509 }); 510}; 511var __generator = (this && this.__generator) || function (thisArg, body) { 512 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 513 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 514 function verb(n) { return function (v) { return step([n, v]); }; } 515 function step(op) { 516 if (f) throw new TypeError("Generator is already executing."); 517 while (g && (g = 0, op[0] && (_ = 0)), _) try {
518 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 519 if (y = 0, t) op = [op[0] & 2, t.value]; 520 switch (op[0]) { 521 case 0: case 1: t = op; break; 522 case 4: _.label++; return { value: op[1], done: false }; 523 case 5: _.label++; y = op[1]; op = [0]; continue; 524 case 7: op = _.ops.pop(); _.trys.pop(); continue; 525 default: 526 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 527 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 528 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 529 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 530 if (t[2]) _.ops.pop(); 531 _.trys.pop(); continue; 532 } 533 op = body.call(thisArg, _); 534 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 535 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 536 } 537}; 538var __importDefault = (this && this.__importDefault) || function (mod) { 539 return (mod && mod.__esModule) ? mod : { "default": mod }; 540}; 541Object.defineProperty(exports, "__esModule", { value: true }); 542exports.config = void 0; 543var dayjs_1 = __importDefault(require("dayjs")); 544var localizedFormat_1 = __importDefault(require("dayjs/plugin/localizedFormat")); 545require("dayjs/locale/sv"); 546//import 'dayjs/locale/en'; 547exports.config = { 548 siteFolder: "/2026/", 549 siteUrl: "https://clandestinofestival.org", 550 defaultLang: "sv", 551 pageSize: 100, 552 earliestEventHour: 8, 553 defaultColor: "#ff4b37", 554 getSiteRoot: function () { 555 return $("html").attr("lang") === "sv-SE" 556 ? exports.config.siteFolder 557 : exports.config.siteFolder + "en/"; 558 }, 559 getRestUrl: function () { 560 return this.getSiteRoot() + "wp-json/wp/v2/"; 561 }, 562 configureLocale: function (locale) { 563 return __awaiter(this, void 0, void 0, function () { 564 return __generator(this, function (_a) { 565 console.log("config locale:", locale); 566 dayjs_1.default.locale(locale); 567 dayjs_1.default.extend(localizedFormat_1.default); 568 return [2 /*return*/]; 569 }); 570 }); 571 }, 572 externalEventSources: [ 573 "https://clandestinoinstitut.org/wp-json/wp/v2/posts/?per_page=300&categories=1&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC", 574 "https://clandestinofestival.org/2025/wp-json/wp/v2/posts/?per_page=100&categories=11&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC", 575 ], 576}; 577 578},{"dayjs":25,"dayjs/locale/sv":26,"dayjs/plugin/localizedFormat":30}],5:[function(require,module,exports){ 579"use strict"; 580var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 581 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 582 return new (P || (P = Promise))(function (resolve, reject) { 583 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 584 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 585 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 586 step((generator = generator.apply(thisArg, _arguments || [])).next()); 587 }); 588}; 589var __generator = (this && this.__generator) || function (thisArg, body) { 590 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 591 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 592 function verb(n) { return function (v) { return step([n, v]); }; } 593 function step(op) { 594 if (f) throw new TypeError("Generator is already executing."); 595 while (g && (g = 0, op[0] && (_ = 0)), _) try {
596 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 597 if (y = 0, t) op = [op[0] & 2, t.value]; 598 switch (op[0]) { 599 case 0: case 1: t = op; break; 600 case 4: _.label++; return { value: op[1], done: false }; 601 case 5: _.label++; y = op[1]; op = [0]; continue; 602 case 7: op = _.ops.pop(); _.trys.pop(); continue; 603 default: 604 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 605 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 606 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 607 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 608 if (t[2]) _.ops.pop(); 609 _.trys.pop(); continue; 610 } 611 op = body.call(thisArg, _); 612 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 613 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 614 } 615}; 616var __read = (this && this.__read) || function (o, n) { 617 var m = typeof Symbol === "function" && o[Symbol.iterator]; 618 if (!m) return o; 619 var i = m.call(o), r, ar = [], e; 620 try { 621 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); 622 } 623 catch (error) { e = { error: error }; } 624 finally { 625 try { 626 if (r && !r.done && (m = i["return"])) m.call(i); 627 } 628 finally { if (e) throw e.error; } 629 } 630 return ar; 631}; 632var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { 633 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 634 if (ar || !(i in from)) { 635 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 636 ar[i] = from[i]; 637 } 638 } 639 return to.concat(ar || Array.prototype.slice.call(from)); 640}; 641var __importDefault = (this && this.__importDefault) || function (mod) { 642 return (mod && mod.__esModule) ? mod : { "default": mod }; 643}; 644Object.defineProperty(exports, "__esModule", { value: true }); 645exports.contentService = void 0; 646var config_1 = require("./config"); 647var dayjs_1 = __importDefault(require("dayjs")); 648exports.contentService = { 649 _locale: config_1.config.defaultLang, 650 allContents: [], 651 breakLines: function (title) { 652 title = title.replace("<wbr />", "<wbr />"); 653 title = title.replace("<br />", "<br />"); 654 title = title.replace("<br>", "<br />"); 655 return title; 656 }, 657 stripTags: function (title) { 658 title = title.replace("<wbr />", ""); 659 title = title.replace("<br />", ""); 660 title = title.replace("<br />", ""); 661 return title; 662 }, 663 convert: function (post, locale) { 664 var _a, _b, _c, _d, _e, _f; 665 var event = { 666 id: post.id, 667 slug: post.slug, 668 title: exports.contentService.breakLines(post.title.rendered), 669 lank: post.acf.lank, 670 content: post.content["rendered"], 671 categories: post.categories, 672 sticky: post.sticky, 673 date: post.date, 674 type: post.type, 675 featuredImage: (_b = (_a = post.nss_featured_images) === null || _a === void 0 ? void 0 : _a.medium) === null || _b === void 0 ? void 0 : _b.src, 676 featuredImageHeight: (_d = (_c = post.nss_featured_images) === null || _c === void 0 ? void 0 : _c.medium) === null || _d === void 0 ? void 0 : _d.height, 677 featuredImageWidth: (_f = (_e = post.nss_featured_images) === null || _e === void 0 ? void 0 : _e.medium) === null || _f === void 0 ? void 0 : _f.width, 678 }; 679 return event; 680 }, 681 load: function (locale, category) { 682 return __awaiter(this, void 0, void 0, function () { 683 return __generator(this, function (_a) { 684 switch (_a.label) { 685 case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() + 686 "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(category, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC&lang=").concat(locale))]; 687 case 1: return [2 /*return*/, _a.sent()]; 688 } 689 }); 690 }); 691 }, 692 loadSingle: function (postId, postSlug) { 693 return __awaiter(this, void 0, void 0, function () { 694 var query, result; 695 return __generator(this, function (_a) { 696 switch (_a.label) { 697 case 0: 698 query = ""; 699 if (postId !== undefined) { 700 query += postId; 701 } 702 else { 703 query += "?slug=" + postSlug; 704 } 705 return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "posts/" + query)]; 706 case 1: 707 result = _a.sent(); 708 if (result.length === 1) { 709 // By slug returns array 710 return [2 /*return*/, result[0]]; 711 } 712 return [2 /*return*/, result]; 713 } 714 }); 715 }); 716 }, 717 getSingle: function (postId, postSlug) { 718 return __awaiter(this, void 0, void 0, function () { 719 var _a, _b; 720 return __generator(this, function (_c) { 721 switch (_c.label) { 722 case 0: 723 console.log("contentService.getSingle ".concat(postId, " ").concat(postSlug)); 724 _b = (_a = exports.contentService).convert; 725 return [4 /*yield*/, exports.contentService.loadSingle(postId, postSlug)
725]; 726 case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.contentService._locale])]; 727 } 728 }); 729 }); 730 }, 731 getSingleFromPreloaded: function (postId, postSlug) { 732 return __awaiter(this, void 0, void 0, function () { 733 var query; 734 return __generator(this, function (_a) { 735 console.log("contentService.allContents.length", exports.contentService.allContents.length); 736 query = function (event) { return event.id === postId; }; 737 if (postSlug !== undefined) { 738 query = function (event) { return event.id === postId; }; 739 } 740 return [2 /*return*/, exports.contentService.allContents.find(query)]; 741 }); 742 }); 743 }, 744 sort: function (contents) { 745 contents.sort(function (a, b) { 746 var eventA = (0, dayjs_1.default)(a.date); 747 var eventB = (0, dayjs_1.default)(b.date); 748 return eventB.toDate().getTime() - eventA.toDate().getTime(); 749 }); 750 return contents; 751 }, 752 addExtraClasses: function (contents) { 753 if (contents.length === 1) { 754 contents[0].extraCssClass += " only-one"; 755 } 756 }, 757 sortSticky: function (contents) { 758 var sticky = exports.contentService.sort(contents.filter(function (event) { return event.sticky; })); 759 var nonSticky = exports.contentService.sort(contents.filter(function (event) { return !event.sticky; })); 760 sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false)); 761 return sticky; 762 }, 763 get: function (locale, category) { 764 return __awaiter(this, void 0, void 0, function () { 765 var posts, contents; 766 return __generator(this, function (_a) { 767 switch (_a.label) { 768 case 0: 769 if (exports.contentService.allContents.length > 0) { 770 return [2 /*return*/, exports.contentService.allContents]; 771 } 772 return [4 /*yield*/, exports.contentService.load(locale, category)]; 773 case 1: 774 posts = _a.sent(); 775 contents = []; 776 posts.forEach(function (post) { 777 contents.push(exports.contentService.convert(post, locale)); 778 }); 779 contents = exports.contentService.sortSticky(contents); 780 return [2 /*return*/, contents]; 781 } 782 }); 783 }); 784 }, 785 init: function (locale, category) { 786 return __awaiter(this, void 0, void 0, function () { 787 var _a; 788 return __generator(this, function (_b) { 789 switch (_b.label) { 790 case 0: 791 exports.contentService._locale = locale; 792 _a = exports.contentService; 793 return [4 /*yield*/, exports.contentService.get(locale, category)]; 794 case 1: 795 _a.allContents = _b.sent(); 796 console.log("contentService init", exports.contentService._locale); 797 return [2 /*return*/]; 798 } 799 }); 800 }); 801 }, 802}; 803 804},{"./config":4,"dayjs":25}],6:[function(require,module,exports){ 805"use strict"; 806Object.defineProperty(exports, "__esModule", { value: true }); 807exports.element = void 0; 808exports.element = { 809 buttons: { 810 buttonToggle: document.getElementById("button-nav-wrapper-toggle"), 811 buttonToggleMobile: document.getElementById("button-nav-wrapper-toggle-mobile"), 812 buttonCloseSinglePane: document.getElementById("button-close-single-pane"), 813 // buttonShare: document.getElementById( 814 // "button-share" 815 // ) as HTMLAnchorElement, 816 buttonShareFb: document.getElementById("button-share-fb"), 817 //buttonShareTwitter: document.getElementById('button-share-twitter') as HTMLAnchorElement, 818 calendarContainer: document.getElementById("calendar-container"), 819 buttonAddToCalendar: document.getElementById("add-to-calendar-button"), 820 buttonShareUrl: document.getElementById("button-share-url"), 821 buttonCloseShare: document.getElementById("button-close-share"), 822 }, 823 wrappers: { 824 navWrapper: document.getElementById("nav-wrapper"), 825 mainWrapper: document.getElementById("main-wrapper"), 826 }, 827}; 828 829},{}],7:[function(require,module,exports){ 830"use strict"; 831var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 832 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 833 return new (P || (P = Promise))(function (resolve, reject) { 834 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 835 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 836 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 837 step((generator = generator.apply(thisArg, _arguments || [])).next()); 838 }); 839}; 840var __generator = (this && this.__generator) || function (thisArg, body) { 841 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 842 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 843 function verb(n) { return function (v) { return step([n, v]); }; } 844 function step(op) { 845 if (f) throw new TypeError("Generator is already executing."); 846 while (g && (g = 0, op[0] && (_ = 0)), _) try {
847 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 848 if (y = 0, t) op = [op[0] & 2, t.value]; 849 switch (op[0]) { 850 case 0: case 1: t = op; break; 851 case 4: _.label++; return { value: op[1], done: false }; 852 case 5: _.label++; y = op[1]; op = [0]; continue; 853 case 7: op = _.ops.pop(); _.trys.pop(); continue; 854 default: 855 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 856 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 857 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 858 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 859 if (t[2]) _.ops.pop(); 860 _.trys.pop(); continue; 861 } 862 op = body.call(thisArg, _); 863 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 864 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 865 } 866}; 867var __read = (this && this.__read) || function (o, n) { 868 var m = typeof Symbol === "function" && o[Symbol.iterator]; 869 if (!m) return o; 870 var i = m.call(o), r, ar = [], e; 871 try { 872 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); 873 } 874 catch (error) { e = { error: error }; } 875 finally { 876 try { 877 if (r && !r.done && (m = i["return"])) m.call(i); 878 } 879 finally { if (e) throw e.error; } 880 } 881 return ar; 882}; 883var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { 884 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 885 if (ar || !(i in from)) { 886 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 887 ar[i] = from[i]; 888 } 889 } 890 return to.concat(ar || Array.prototype.slice.call(from)); 891}; 892var __importDefault = (this && this.__importDefault) || function (mod) { 893 return (mod && mod.__esModule) ? mod : { "default": mod }; 894}; 895Object.defineProperty(exports, "__esModule", { value: true }); 896exports.eventService = exports.FEATURED_IMAGE_SIZE = exports.SortOrder = void 0; 897var config_1 = require("./config"); 898var page_1 = require("./page"); 899var dayjs_1 = __importDefault(require("dayjs")); 900var contentService_1 = require("./contentService"); 901var venueService_1 = require("./venueService"); 902var isSameOrBefore_1 = __importDefault(require("dayjs/plugin/isSameOrBefore")); 903var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter")); 904var validDate_1 = require("./validDate"); 905//import { testContent } from "./testContent"; 906var eventType_1 = require("./eventType"); 907var language_1 = require("./language"); 908//const TBA = "tba"; 909var SortOrder; 910(function (SortOrder) { 911 SortOrder["ASC"] = "asc"; 912 SortOrder["DESC"] = "desc"; 913 SortOrder["RANDOM"] = "random"; 914})(SortOrder = exports.SortOrder || (exports.SortOrder = {})); 915exports.FEATURED_IMAGE_SIZE = "medium"; 916exports.eventService = { 917 _locale: config_1.config.defaultLang, 918 allEvents: [], 919 allVenues: [], 920 renderCss: function (eventId, imageHeigh, imageWidth) { 921 var newWidth = (imageWidth * 300) / imageHeigh; 922 var css = "<style scoped=\"\">\n @media (min-width: 960px) {\n .single-box-".concat(eventId, " {\n width: ").concat(newWidth, "px !important;\n max-width: initial !important;\n }\n }\n </style>"); 923 $("#content").append(css); 924 }, 925 renderVenue: function (event) { 926 var template = ""; 927 if (event.venue) { 928 template += "<br>".concat(event.venueFormatted); 929 } 930 return template; 931 }, 932 renderDateAndVenue: function (event) { 933 var template = ""; 934 if (event.dateFormatted) { 935 template += "".concat(event.dateFormatted); 936 } 937 template += exports.eventService.renderVenue(event); 938 return template; 939 }, 940 renderEventStatuses: function (event) { 941 var template = ""; 942 if (event.cancelled) { 943 template += "<h2 class=\"cancelled-text\">".concat(language_1.language.get(exports.eventService._locale, "Cancelled"), "</h2>"); 944 } 945 else { 946 if (event.soldOut) { 947 template += "<h2 class=\"soldout-text\">".concat(language_1.language.get(exports.eventService._locale, "SoldOut"), "</h2>"); 948 } 949 } 950 return template; 951 }, 952 renderEventType: function (event) { 953 var template = "<p class=\"event-type\">"; 954 switch (event.eventType) {
955 case eventType_1.EventTypes.FESTIVAL: 956 template += eventType_1.eventType.getEventTypeDescription(event.eventType); 957 //template += eventService.renderDateAndVenue(event); 958 // if (event.venue) { 959 // // Do not render TBA 960 // template += eventService.renderVenue(event); 961 // } 962 break; 963 case eventType_1.EventTypes.BEYOND: 964 template += eventType_1.eventType.getEventTypeDescription(event.eventType); 965 //template += eventService.renderDateAndVenue(event); 966 break; 967 case eventType_1.EventTypes.PODS: 968 template += eventType_1.eventType.getEventTypeDescription(event.eventType); 969 //template += eventService.renderDateAndVenue(event); 970 break; 971 case eventType_1.EventTypes.TALKS: 972 template += eventType_1.eventType.getEventTypeDescription(event.eventType); 973 //template += eventService.renderDateAndVenue(event); 974 break; 975 //default: 976 // template += eventService.renderDateAndVenue(event); 977 } 978 return template + "</p>"; 979 }, 980 renderPost: function (event) { 981 if (event.featuredImage) { 982 exports.eventService.renderCss(event.id, event.featuredImageHeight, event.featuredImageWidth); 983 } 984 var template = "<a href=\"".concat(config_1.config.siteFolder).concat(event.slug, "/\" data-id=\"").concat(event.id, "\" data-slug=\"").concat(event.slug, "\" data-format=\"\" class=\"single-box single-box-").concat(event.id, " ").concat(event.extraCssClass || "", "\" title=\"").concat(event.title, "\" rel=\"bookmark\">"); 985 template += exports.eventService.renderEventStatuses(event); 986 if (event.featuredImage) { 987 template += "<img width=\"1024\" height=\"683\" src=\"".concat(event.featuredImage, "\" class=\"attachment-medium size-medium wp-post-image\" alt=\"\" decoding=\"async\" fetchpriority=\"high\">"); 988 } 989 template += '<div class="caption-text">'; 990 template += exports.eventService.renderEventType(event); 991 template += "<h2>".concat(event.title, "</h2>"); 992 template += '<p class="time-and-place">'; 993 template += exports.eventService.renderDateAndVenue(event); 994 template += "</p>"; 995 template += "</div>"; 996 template += "</a>"; 997 $("#content").append(template); 998 }, 999 adjustMidnight: function (date) { 1000 if (date.hour() < config_1.config.earliestEventHour) { 1001 return date.add(1, "day"); 1002 } 1003 return date; 1004 }, 1005 addTime: function (date, time) { 1006 return time 1007 ? exports.eventService.adjustMidnight((0, dayjs_1.default)(date + time)).toDate() 1008 : undefined; 1009 }, 1010 getDoorsFormattedTime: function (dateString) { 1011 if (!dateString) { 1012 return undefined; 1013 } 1014 return dateString.replace(":", "."); 1015 }, 1016 convert: function (post, locale) { 1017 var _a, _b, _c, _d, _e, _f; 1018 // let venue: ClandestinoVenue = eventService.allVenues.find( 1019 // (v) => v.id === post.acf.scen?.ID 1020 // ); 1021 // if (!venue) { 1022 // if (post.acf?.scen) { 1023 // // Fix for external events 1024 // venue = { 1025 // id: 0, 1026 // title: post.acf["scen"]?.post_title, 1027 // slug: TBA, 1028 // active: true, 1029 // }; 1030 // } 1031 // venue = { 1032 // id: 0, 1033 // title: TBA, 1034 // slug: TBA, 1035 // active: true, 1036 // }; 1037 // } 1038 var venue = venueService_1.venueService.getVenueOrTBA(post); 1039 var venueFormatted = venue.title; 1040 var event = { 1041 id: post.id, 1042 slug: post.slug, 1043 title: contentService_1.contentService.breakLines(post.title.rendered), 1044 content: post.content["rendered"], 1045 sticky: post.sticky, 1046 date: post.date, 1047 type: post.type, 1048 featuredImage: (_b = (_a = post.nss_featured_images) === null || _a === void 0 ? void 0 : _a.medium) === null || _b === void 0 ? void 0 : _b.src, 1049 featuredImageHeight: (_d = (_c = post.nss_featured_images) === null || _c === void 0 ? void 0 : _c.medium) === null || _d === void 0 ? void 0 : _d.height, 1050 featuredImageWidth: (_f = (_e = post.nss_featured_images) === null || _e === void 0 ? void 0 : _e.medium) === null || _f === void 0 ? void 0 : _f.width, 1051 venue: venue, 1052 venueFormatted: venueFormatted, 1053 //venueTitle: post.acf["scen"]?.post_title || TBA, 1054 startDate: post.acf.datum, 1055 endDate: post.acf.slutdatum, 1056 doorsOpen: exports.eventService.addTime(post.acf.datum, post.acf.dorrar_oppnar), 1057 doorsOpenFormatted: exports.eventService.getDoorsFormattedTime(post.acf.dorrar_oppnar), 1058 startTime: exports.eventService.addTime(post.acf.datum, post.acf.starttid), 1059 endTime: exports.eventService.addTime(post.acf.datum, post.acf.sluttid),
1060 startTime2: exports.eventService.addTime(post.acf.datum, post.acf.starttid2), 1061 endTime2: exports.eventService.addTime(post.acf.datum, post.acf.sluttid2), 1062 startTime3: exports.eventService.addTime(post.acf.datum, post.acf.starttid3), 1063 endTime3: exports.eventService.addTime(post.acf.datum, post.acf.sluttid3), 1064 backgroundColor: post.acf.bakgrundsfarg || (venue === null || venue === void 0 ? void 0 : venue.color) || config_1.config.defaultColor, 1065 ticket: post.acf.biljett, 1066 passes: post.acf.festivalpass, 1067 dateTimeFormatted: exports.eventService.getDateAndTime(post, locale, true), 1068 dateFormatted: exports.eventService.getDateAndTime(post, locale, false), 1069 categories: post.categories, 1070 eventType: post.acf.event_typ, 1071 soldOut: post.acf.slutsald, 1072 cancelled: post.acf.installd, 1073 extraCssClass: "", 1074 }; 1075 //event.cancelled = true; 1076 //console.log("e", event); 1077 //testContent.setTestImages(event); 1078 exports.eventService.addArchivedClass(event); 1079 exports.eventService.addCancelledClass(event); 1080 if (!event.cancelled) { 1081 exports.eventService.addSoldOutClass(event); 1082 } 1083 return event; 1084 }, 1085 getStartTime: function (startTime, separator) { 1086 if (!startTime) { 1087 return ""; 1088 } 1089 return separator + startTime.replace(":00", "").replace(":", "."); 1090 }, 1091 getEndTime: function (endTime) { 1092 if (!endTime) { 1093 return ""; 1094 } 1095 return "â" + endTime.replace(":00", "").replace(":", "."); 1096 }, 1097 // getScene: function (scene: string): string { 1098 // if (!scene) { 1099 // return TBA; 1100 // } 1101 // return scene; 1102 // }, 1103 getTimes: function (post) { 1104 var kl = language_1.language.get(exports.eventService._locale, "Kl"); 1105 var times = ""; 1106 times += exports.eventService.getStartTime(post.acf["starttid"], " ".concat(kl, " ")); 1107 times += exports.eventService.getEndTime(post.acf["sluttid"]); 1108 times += exports.eventService.getStartTime(post.acf["starttid2"], ", "); 1109 times += exports.eventService.getEndTime(post.acf["sluttid2"]); 1110 times += exports.eventService.getStartTime(post.acf["starttid3"], ", "); 1111 times += exports.eventService.getEndTime(post.acf["sluttid3"]); 1112 return times; 1113 }, 1114 getDateAndTime: function (post, locale, renderTimes) { 1115 if (!post.acf["datum"]) { 1116 return ""; 1117 } 1118 var timeAndPlace = ""; 1119 if (post.acf["slutdatum"] !== "" && 1120 post.acf["slutdatum"] !== undefined) { 1121 var startDay = (0, dayjs_1.default)(post.acf["datum"]).format("D"); 1122 var startMonth = (0, dayjs_1.default)(post.acf["datum"]).format("MMMM"); 1123 var endDay = (0, dayjs_1.default)(post.acf["slutdatum"]).format("D"); 1124 var endMonth = (0, dayjs_1.default)(post.acf["slutdatum"]).format("MMMM"); 1125 var year = (0, dayjs_1.default)(post.acf["slutdatum"]).format("YYYY"); 1126 if (locale == "sv") { 1127 if (startMonth == endMonth) { 1128 timeAndPlace += startDay; 1129 } 1130 else { 1131 timeAndPlace += startDay; 1132 timeAndPlace += " " + startMonth; 1133 } 1134 if (startDay != endDay) { 1135 timeAndPlace += "â" + endDay; 1136 } 1137 timeAndPlace += " " + endMonth; 1138 timeAndPlace += " " + year; 1139 } 1140 else { 1141 timeAndPlace += startMonth + " "; 1142 if (startMonth == endMonth) { 1143 timeAndPlace += startDay; 1144 if (startDay != endDay) { 1145 timeAndPlace += "â" + endDay; 1146 } 1147 } 1148 else { 1149 timeAndPlace += startDay; 1150 timeAndPlace += "â" + endMonth; 1151 timeAndPlace += " " + endDay; 1152 } 1153 timeAndPlace += ", " + year; 1154 } 1155 } 1156 else { 1157 timeAndPlace = (0, dayjs_1.default)(post.acf["datum"]).format("LL"); 1158 } 1159 if (renderTimes) {
1160 timeAndPlace += ", " + exports.eventService.getTimes(post); 1161 } 1162 // timeAndPlace += 1163 // "<br>" + eventService.getScene(post.acf["scen"]?.post_title); 1164 return timeAndPlace; 1165 }, 1166 // setEventTypeDescriptions: function (event: ClandestinoEvent) { 1167 // switch (event.eventType) { 1168 // case "festival": 1169 // let etef = 1170 // '<p class="event-type">' + eventTypes.beyond + "</p>"; 1171 // event.dateAndPlace = eventTypes.festival; 1172 // event.timeAndPlace = etef + eventTypes.festival; 1173 // console.log("// code block festival"); 1174 // break; 1175 // case "beyond": 1176 // let ettb = 1177 // '<p class="event-type">' + eventTypes.beyond + "</p>"; 1178 // event.dateAndPlace = 1179 // eventTypes.beyond + "<br>" + event.dateAndPlace; 1180 // event.timeAndPlace = ettb + event.timeAndPlace; 1181 // console.log("// code block beyond"); 1182 // break; 1183 // default: 1184 // // code block 1185 // } 1186 // }, 1187 isDateBeforeToday: function (date) { 1188 return (new Date(date.toDateString()) < new Date(new Date().toDateString())); 1189 }, 1190 addArchivedClass: function (event) { 1191 if (!event.startTime) { 1192 //event.extraCssClass += " archived"; 1193 return; 1194 } 1195 var archivedClass = exports.eventService.isDateBeforeToday(event.startTime) 1196 ? " archived" 1197 : ""; 1198 event.extraCssClass += archivedClass; 1199 }, 1200 addSoldOutClass: function (event) { 1201 var soldOutClass = event.soldOut ? " soldout" : ""; 1202 event.extraCssClass += soldOutClass; 1203 }, 1204 addCancelledClass: function (event) { 1205 var cancelledClass = event.cancelled ? " cancelled" : ""; 1206 event.extraCssClass += cancelledClass; 1207 }, 1208 load: function () { 1209 return __awaiter(this, void 0, void 0, function () { 1210 return __generator(this, function (_a) { 1211 switch (_a.label) { 1212 case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() + 1213 "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(page_1.sitemap[page_1.Locales[exports.eventService._locale]].PROGRAM 1214 .category, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"))]; 1215 case 1: return [2 /*return*/, _a.sent()]; 1216 } 1217 }); 1218 }); 1219 }, 1220 getSingle: function (postId, postSlug) { 1221 return __awaiter(this, void 0, void 0, function () { 1222 var _a, _b; 1223 return __generator(this, function (_c) { 1224 switch (_c.label) { 1225 case 0: 1226 _b = (_a = exports.eventService).convert; 1227 return [4 /*yield*/, contentService_1.contentService.loadSingle(postId, postSlug)]; 1228 case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.eventService._locale])]; 1229 } 1230 }); 1231 }); 1232 }, 1233 getSingleFromPreloaded: function (postId, postSlug) { 1234 return __awaiter(this, void 0, void 0, function () { 1235 var query; 1236 return __generator(this, function (_a) { 1237 console.log("eventService.allEvents.length", exports.eventService.allEvents.length); 1238 query = function (event) { return event.id === postId; }; 1239 if (postSlug !== undefined) { 1240 query = function (event) { return event.id === postId; }; 1241 } 1242 return [2 /*return*/, exports.eventService.allEvents.find(query)]; 1243 }); 1244 }); 1245 }, 1246 shuffle: function (array) { 1247 var _a; 1248 var currentIndex = array.length; 1249 // While there remain elements to shuffle... 1250 while (currentIndex != 0) { 1251 // Pick a remaining element... 1252 var randomIndex = Math.floor(Math.random() * currentIndex); 1253 currentIndex--; 1254 // And swap it with the current element. 1255 _a = __read([ 1256 array[randomIndex], 1257 array[currentIndex], 1258 ], 2), array[currentIndex] = _a[0], array[randomIndex] = _a[1]; 1259 } 1260 return array; 1261 }, 1262 sort: function (events, sortOrder) { 1263 if (sortOrder === void 0) { sortOrder = SortOrder.ASC; } 1264 if (sortOrder === SortOrder.RANDOM) { 1265 return exports.eventService.shuffle(events); 1266 } 1267 events.sort(function (a, b) { 1268 var _a, _b, _c, _d; 1269 return sortOrder === SortOrder.ASC 1270 ? ((_a = a.startTime) === null || _a === void 0 ? void 0 : _a.getTime()) - ((_b = b.startTime) === null || _b === void 0 ? void 0 : _b.getTime()) 1271 : ((_c = b.startTime) === null || _c === void 0 ? void 0 : _c.getTime()) - ((_d = a.startTime) === null || _d === void 0 ? void 0 : _d.getTime()); 1272 }); 1273 return events; 1274 }, 1275 sortSticky: function (events, sortOrder) { 1276 if (sortOrder === void 0) { sortOrder = SortOrder.ASC; } 1277 var sticky = exports.eventService.sort(events.filter(function (event) { return event.sticky; })); 1278 var nonSticky = exports.eventService.sort(events.filter(function (event) { return !event.sticky; }), sortOrder); 1279 sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false)); 1280 return sticky; 1281 }, 1282 sortPastAndFuture: function (events, removeBeforeDate) { 1283 dayjs_1.default.extend(isSameOrBefore_1.default); 1284 dayjs_1.default.extend(isSameOrAfter_1.default); 1285 var future = events.filter(function (_a) { 1286 var startDate = _a.startDate; 1287 return (0, dayjs_1.default)(startDate).isSameOrAfter(removeBeforeDate, "second"); 1288 }); 1289 var past = events.filter(function (_a) { 1290 var startDate = _a.startDate; 1291 return (0, dayjs_1.default)(startDate).isSameOrBefore(removeBeforeDate, "second"); 1292 }); 1293 future.push.apply(future, __spreadArray([], __read(past), false)); 1294 console.log("count past:" + past.length); 1295 console.log("count future:" + future.length); 1296 return future; 1297 }, 1298 filterOld: function (events, removeBeforeDate) { 1299 return __awaiter(this, void 0, void 0, function () { 1300 return __generator(this, function (_a) { 1301 console.log("removeBeforeDate", removeBeforeDate); 1302 dayjs_1.default.extend(isSameOrAfter_1.default); 1303 return [2 /*return*/, events.filter(function (_a) { 1304 var date = _a.date, endTime = _a.endTime; 1305 return (0, dayjs_1.default)(endTime || date).isSameOrAfter(removeBeforeDate, "second"); 1306 })]; 1307 }); 1308 }); 1309 }, 1310 filterHasValidStartTime: function (events) { 1311 return events.filter(function (event) { return (0, validDate_1.validDate)(event.startTime); }); 1312 }, 1313 appendContent: function (events) {
1314 events.forEach(function (event) { 1315 if (!exports.eventService.allEvents.find(function (e) { return e.id === event.id; })) { 1316 exports.eventService.allEvents.push(event); 1317 } 1318 }); 1319 exports.eventService.sortSticky(exports.eventService.allEvents); 1320 }, 1321 get: function (locale) { 1322 return __awaiter(this, void 0, void 0, function () { 1323 var posts, events; 1324 return __generator(this, function (_a) { 1325 switch (_a.label) { 1326 case 0: 1327 if (exports.eventService.allEvents.length > 0) { 1328 return [2 /*return*/, exports.eventService.allEvents]; 1329 } 1330 return [4 /*yield*/, exports.eventService.load()]; 1331 case 1: 1332 posts = _a.sent(); 1333 events = []; 1334 posts.forEach(function (post) { 1335 events.push(exports.eventService.convert(post, locale)); 1336 }); 1337 events = exports.eventService.sortSticky(events); 1338 return [2 /*return*/, events]; 1339 } 1340 }); 1341 }); 1342 }, 1343 getForSchedule: function (locale) { 1344 return __awaiter(this, void 0, void 0, function () { 1345 var events, eventsHasProps, multiEvents; 1346 return __generator(this, function (_a) { 1347 switch (_a.label) { 1348 case 0: return [4 /*yield*/, exports.eventService.get(locale)]; 1349 case 1: 1350 events = _a.sent(); 1351 eventsHasProps = events.filter(function (e) { return e.startDate && e.endTime; }); 1352 multiEvents = eventsHasProps.filter(function (e) { return !(0, dayjs_1.default)(e.startDate).isSame(e.endDate); }); 1353 multiEvents.forEach(function (event) { 1354 var startTimeCounter = (0, dayjs_1.default)(event.startDate); 1355 var endTimeCounter = (0, dayjs_1.default)(event.endDate); 1356 while (startTimeCounter.isSameOrBefore(event.endDate, "day")) { 1357 if (startTimeCounter.isAfter(event.startDate, "day")) { 1358 var clone = structuredClone(event); 1359 clone.startDate = startTimeCounter.toDate(); 1360 clone.endDate = endTimeCounter.toDate(); 1361 clone.startTime = exports.eventService.addTime((0, dayjs_1.default)(clone.startDate).format("YYYY-MM-DD"), (0, dayjs_1.default)(event.startTime).format("HH:mm")); 1362 clone.endTime = exports.eventService.addTime((0, dayjs_1.default)(clone.endDate).format("YYYY-MM-DD"), (0, dayjs_1.default)(event.endTime).format("HH:mm")); 1363 eventsHasProps.push(clone); 1364 } 1365 startTimeCounter = startTimeCounter.add(1, "day"); 1366 endTimeCounter = endTimeCounter.add(1, "day"); 1367 } 1368 }); 1369 return [2 /*return*/, eventsHasProps]; 1370 } 1371 }); 1372 }); 1373 }, 1374 init: function (locale) { 1375 return __awaiter(this, void 0, void 0, function () { 1376 var _a; 1377 return __generator(this, function (_b) { 1378 switch (_b.label) { 1379 case 0: 1380 exports.eventService._locale = locale; 1381 return [4 /*yield*/, venueService_1.venueService.init(locale)]; 1382 case 1: 1383 _b.sent(); 1384 exports.eventService.allVenues = venueService_1.venueService.allVenues; 1385 _a = exports.eventService; 1386 return [4 /*yield*/, exports.eventService.get(locale)]; 1387 case 2: 1388 _a.allEvents = _b.sent(); 1389 console.log("eventService init", exports.eventService._locale); 1390 return [2 /*return*/]; 1391 } 1392 }); 1393 }); 1394 }, 1395}; 1396 1397},{"./config":4,"./contentService":5,"./eventType":8,"./language":13,"./page":16,"./validDate":23,"./venueService":24,"dayjs":25,"dayjs/plugin/isSameOrAfter":28,"dayjs/plugin/isSameOrBefore":29}],8:[function(require,module,exports){ 1398"use strict"; 1399var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1400 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1401 return new (P || (P = Promise))(function (resolve, reject) { 1402 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1403 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1404 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1405 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1406 }); 1407}; 1408var __generator = (this && this.__generator) || function (thisArg, body) { 1409 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 1410 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 1411 function verb(n) { return function (v) { return step([n, v]); }; } 1412 function step(op) { 1413 if (f) throw new TypeError("Generator is already executing."); 1414 while (g && (g = 0, op[0] && (_ = 0)), _) try {
1415 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 1416 if (y = 0, t) op = [op[0] & 2, t.value]; 1417 switch (op[0]) { 1418 case 0: case 1: t = op; break; 1419 case 4: _.label++; return { value: op[1], done: false }; 1420 case 5: _.label++; y = op[1]; op = [0]; continue; 1421 case 7: op = _.ops.pop(); _.trys.pop(); continue; 1422 default: 1423 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 1424 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 1425 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 1426 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 1427 if (t[2]) _.ops.pop(); 1428 _.trys.pop(); continue; 1429 } 1430 op = body.call(thisArg, _); 1431 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 1432 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 1433 } 1434}; 1435Object.defineProperty(exports, "__esModule", { value: true }); 1436exports.eventType = exports.EventTypes = void 0; 1437var language_1 = require("./language"); 1438var EventTypes; 1439(function (EventTypes) { 1440 EventTypes["FESTIVAL"] = "festival"; 1441 EventTypes["BEYOND"] = "beyond"; 1442 EventTypes["FESTIVAL_AND_BEYOND"] = "festival_and_beyond"; 1443 EventTypes["TALKS"] = "talks"; 1444 EventTypes["PODS"] = "pods"; 1445})(EventTypes = exports.EventTypes || (exports.EventTypes = {})); 1446exports.eventType = { 1447 eventTypes: [], 1448 getEventTypeDescription: function (value) { 1449 return exports.eventType.eventTypes.find(function (et) { return et.value === value; }) 1450 .description; 1451 }, 1452 getKeyByValue: function (obj, value) { 1453 return Object.keys(obj).find(function (key) { return obj[key] === value; }); 1454 }, 1455 init: function (locale) { 1456 return __awaiter(this, void 0, void 0, function () { 1457 var festival, beyond, festival_and_beyond, talks, pods; 1458 return __generator(this, function (_a) { 1459 festival = { 1460 value: "festival", 1461 description: language_1.language.get(locale, "ClandestinoFestival"), 1462 }; 1463 beyond = { 1464 value: "beyond", 1465 description: "Clandestino & Beyond", 1466 }; 1467 festival_and_beyond = { 1468 value: "festival_and_beyond", 1469 description: "Clandestino Festival & Beyond", 1470 }; 1471 talks = { 1472 value: "talks", 1473 description: "Clandestino Talks", 1474 }; 1475 pods = { 1476 value: "pods", 1477 description: "Clandestino Podcast", 1478 }; 1479 exports.eventType.eventTypes.push(festival); 1480 exports.eventType.eventTypes.push(beyond); 1481 exports.eventType.eventTypes.push(festival_and_beyond); 1482 exports.eventType.eventTypes.push(talks); 1483 exports.eventType.eventTypes.push(pods); 1484 return [2 /*return*/]; 1485 }); 1486 }); 1487 }, 1488}; 1489 1490},{"./language":13}],9:[function(require,module,exports){ 1491"use strict"; 1492var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1493 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1494 return new (P || (P = Promise))(function (resolve, reject) { 1495 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1496 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1497 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1498 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1499 }); 1500}; 1501var __generator = (this && this.__generator) || function (thisArg, body) { 1502 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 1503 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 1504 function verb(n) { return function (v) { return step([n, v]); }; } 1505 function step(op) { 1506 if (f) throw new TypeError("Generator is already executing."); 1507 while (g && (g = 0, op[0] && (_ = 0)), _) try {
1508 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 1509 if (y = 0, t) op = [op[0] & 2, t.value]; 1510 switch (op[0]) { 1511 case 0: case 1: t = op; break; 1512 case 4: _.label++; return { value: op[1], done: false }; 1513 case 5: _.label++; y = op[1]; op = [0]; continue; 1514 case 7: op = _.ops.pop(); _.trys.pop(); continue; 1515 default: 1516 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 1517 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 1518 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 1519 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 1520 if (t[2]) _.ops.pop(); 1521 _.trys.pop(); continue; 1522 } 1523 op = body.call(thisArg, _); 1524 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 1525 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 1526 } 1527}; 1528var __values = (this && this.__values) || function(o) { 1529 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; 1530 if (m) return m.call(o); 1531 if (o && typeof o.length === "number") return { 1532 next: function () { 1533 if (o && i >= o.length) o = void 0; 1534 return { value: o && o[i++], done: !o }; 1535 } 1536 }; 1537 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); 1538}; 1539Object.defineProperty(exports, "__esModule", { value: true }); 1540exports.externalEventService = void 0; 1541var config_1 = require("./config"); 1542var eventService_1 = require("./eventService"); 1543exports.externalEventService = { 1544 _locale: config_1.config.defaultLang, 1545 load: function (source) { 1546 return __awaiter(this, void 0, void 0, function () { 1547 return __generator(this, function (_a) { 1548 switch (_a.label) { 1549 case 0: return [4 /*yield*/, $.get(source)]; 1550 case 1: return [2 /*return*/, _a.sent()]; 1551 } 1552 }); 1553 }); 1554 }, 1555 appendPosts: function (posts, append) { 1556 append.forEach(function (post) { 1557 posts.push(post); 1558 }); 1559 return posts; 1560 }, 1561 setExternal: function (event, link) { 1562 //event.backgroundColor = "#001100"; 1563 event.extraCssClass = "external"; 1564 event.link = link; 1565 }, 1566 get: function (source, locale) { 1567 return __awaiter(this, void 0, void 0, function () { 1568 var posts, events, posts_1, posts_1_1, post, event_1; 1569 var e_1, _a; 1570 return __generator(this, function (_b) { 1571 switch (_b.label) { 1572 case 0: return [4 /*yield*/, exports.externalEventService.load(source)]; 1573 case 1: 1574 posts = _b.sent(); 1575 events = []; 1576 try { 1577 for (posts_1 = __values(posts), posts_1_1 = posts_1.next(); !posts_1_1.done; posts_1_1 = posts_1.next()) { 1578 post = posts_1_1.value; 1579 event_1 = eventService_1.eventService.convert(post, locale); 1580 exports.externalEventService.setExternal(event_1, post.link); 1581 events.push(event_1); 1582 } 1583 } 1584 catch (e_1_1) { e_1 = { error: e_1_1 }; } 1585 finally { 1586 try { 1587 if (posts_1_1 && !posts_1_1.done && (_a = posts_1.return)) _a.call(posts_1); 1588 } 1589 finally { if (e_1) throw e_1.error; } 1590 } 1591 //events = eventService.sortSticky(events); 1592 return [2 /*return*/, events]; 1593 } 1594 }); 1595 }); 1596 }, 1597 getForSorces: function (locale) { 1598 return __awaiter(this, void 0, void 0, function () { 1599 var events, _a, _b, source, _c, _d, e_2_1; 1600 var e_2, _e; 1601 return __generator(this, function (_f) { 1602 switch (_f.label) { 1603 case 0: 1604 events = []; 1605 _f.label = 1; 1606 case 1: 1607 _f.trys.push([1, 6, 7, 8]); 1608 _a = __values(config_1.config.externalEventSources), _b = _a.next(); 1609 _f.label = 2; 1610 case 2: 1611 if (!!_b.done) return [3 /*break*/, 5]; 1612 source = _b.value; 1613 _d = (_c = events).concat; 1614 return [4 /*yield*/, exports.externalEventService.get(source, locale)]; 1615 case 3: 1616 events = _d.apply(_c, [_f.sent()]); 1617 _f.label = 4; 1618 case 4: 1619 _b = _a.next(); 1620 return [3 /*break*/, 2]; 1621 case 5: return [3 /*break*/, 8]; 1622 case 6: 1623 e_2_1 = _f.sent(); 1624 e_2 = { error: e_2_1 }; 1625 return [3 /*break*/, 8]; 1626 case 7: 1627 try { 1628 if (_b && !_b.done && (_e = _a.return)) _e.call(_a); 1629 } 1630 finally { if (e_2) throw e_2.error; } 1631 return [7 /*endfinally*/]; 1632 case 8: return [2 /*return*/, events]; 1633 } 1634 }); 1635 }); 1636 }, 1637}; 1638 1639},{"./config":4,"./eventService":7}],10:[function(require,module,exports){ 1640"use strict"; 1641var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1642 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1643 return new (P || (P = Promise))(function (resolve, reject) { 1644 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1645 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1646 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1647 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1648 }); 1649}; 1650var __generator = (this && this.__generator) || function (thisArg, body) { 1651 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 1652 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 1653 function verb(n) { return function (v) { return step([n, v]); }; } 1654 function step(op) { 1655 if (f) throw new TypeError("Generator is already executing."); 1656 while (g && (g = 0, op[0] && (_ = 0)), _) try {
1657 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 1658 if (y = 0, t) op = [op[0] & 2, t.value]; 1659 switch (op[0]) { 1660 case 0: case 1: t = op; break; 1661 case 4: _.label++; return { value: op[1], done: false }; 1662 case 5: _.label++; y = op[1]; op = [0]; continue; 1663 case 7: op = _.ops.pop(); _.trys.pop(); continue; 1664 default: 1665 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 1666 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 1667 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 1668 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 1669 if (t[2]) _.ops.pop(); 1670 _.trys.pop(); continue; 1671 } 1672 op = body.call(thisArg, _); 1673 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 1674 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 1675 } 1676}; 1677var __read = (this && this.__read) || function (o, n) { 1678 var m = typeof Symbol === "function" && o[Symbol.iterator]; 1679 if (!m) return o; 1680 var i = m.call(o), r, ar = [], e; 1681 try { 1682 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); 1683 } 1684 catch (error) { e = { error: error }; } 1685 finally { 1686 try { 1687 if (r && !r.done && (m = i["return"])) m.call(i); 1688 } 1689 finally { if (e) throw e.error; } 1690 } 1691 return ar; 1692}; 1693var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { 1694 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 1695 if (ar || !(i in from)) { 1696 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 1697 ar[i] = from[i]; 1698 } 1699 } 1700 return to.concat(ar || Array.prototype.slice.call(from)); 1701}; 1702var __importDefault = (this && this.__importDefault) || function (mod) { 1703 return (mod && mod.__esModule) ? mod : { "default": mod }; 1704}; 1705Object.defineProperty(exports, "__esModule", { value: true }); 1706exports.festivalpass = void 0; 1707var config_1 = require("./config"); 1708var eventService_1 = require("./eventService"); 1709var language_1 = require("./language"); 1710var dayjs_1 = __importDefault(require("dayjs")); 1711var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter")); 1712var venueService_1 = require("./venueService"); 1713var contentService_1 = require("./contentService"); 1714exports.festivalpass = { 1715 _locale: config_1.config.defaultLang, 1716 renderPassLink: function (pass, selector) { 1717 if (!pass.sticky) { 1718 pass.title = language_1.language.get(exports.festivalpass._locale, "BiljettPl"); 1719 } 1720 var template = "<a id=\"".concat(pass.id, "\" href=\"").concat(pass.ticket, "\" class=\"festivalpass\" title=\"").concat(pass.title, "\" rel=\"bookmark\" target=\"_blank\">"); 1721 template += "".concat(pass.title); 1722 template += "</a>"; 1723 $(selector).append(template); 1724 }, 1725 renderPass: function (pass, selector) { 1726 var template = "<span id=\"".concat(pass.id, "\" class=\"festivalpass\" title=\"").concat(pass.title, "\">"); 1727 template += "".concat(pass.title); 1728 template += "</span>"; 1729 $(selector).append(template); 1730 }, 1731 parsePass: function (pass, selector) { 1732 pass.ticket == "" 1733 ? exports.festivalpass.renderPass(pass, selector) 1734 : exports.festivalpass.renderPassLink(pass, selector); 1735 }, 1736 parse: function (passes, eventPasses, selector, addPipe) { 1737 passes.forEach(function (pass) { 1738 //pass.ticket!=='' && 1739 if (eventPasses.includes(pass.id)) { 1740 // Check if already appended 1741 if ($(selector).find("#".concat(pass.id)).length) { 1742 return; 1743 } 1744 if (addPipe) { 1745 $(selector).append(" | "); 1746 addPipe = false;
1747 } 1748 exports.festivalpass.parsePass(pass, selector); 1749 if (passes.length > 1) { 1750 addPipe = true; 1751 } 1752 } 1753 }); 1754 }, 1755 translatePasses: function (passes, locale) { 1756 passes.forEach(function (pass) { 1757 var _a, _b, _c; 1758 if ((_a = pass.title) === null || _a === void 0 ? void 0 : _a.includes("Gold")) { 1759 if (locale === "sv") { 1760 pass.title = language_1.language.get(locale, "Goldpass"); 1761 } 1762 if (pass.venueFormatted === "tba") { 1763 pass.venueFormatted = ""; 1764 } 1765 pass.dateFormatted = " "; 1766 } 1767 if ((_b = pass.title) === null || _b === void 0 ? void 0 : _b.includes("Festival Pass")) { 1768 if (locale === "sv") { 1769 pass.title = language_1.language.get(locale, "Festivalpass"); 1770 } 1771 } 1772 if ((_c = pass.title) === null || _c === void 0 ? void 0 : _c.includes("Fri entré â Anmälan krävs")) { 1773 if (locale === "en") { 1774 pass.title = language_1.language.get(locale, "FreeAdmissionRegistrationRequired"); 1775 } 1776 } 1777 }); 1778 }, 1779 loadPasses: function () { 1780 return __awaiter(this, void 0, void 0, function () { 1781 var url; 1782 return __generator(this, function (_a) { 1783 switch (_a.label) { 1784 case 0: 1785 url = config_1.config.getRestUrl() + 1786 "festivalpass?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"); 1787 return [4 /*yield*/, $.get(url)]; 1788 case 1: return [2 /*return*/, _a.sent()]; 1789 } 1790 }); 1791 }); 1792 }, 1793 sortByViewOrder: function (passes) { 1794 passes.sort(function (a, b) { 1795 return a.viewOrder - b.viewOrder; 1796 }); 1797 return passes; 1798 }, 1799 sortByDate: function (passes) { 1800 passes.sort(function (a, b) { 1801 var eventA = (0, dayjs_1.default)(a.date); 1802 var eventB = (0, dayjs_1.default)(b.date); 1803 return eventA.toDate().getTime() - eventB.toDate().getTime(); 1804 }); 1805 return passes; 1806 }, 1807 sortBySticky: function (passes) { 1808 return __awaiter(this, void 0, void 0, function () { 1809 var sticky, nonSticky; 1810 return __generator(this, function (_a) { 1811 sticky = exports.festivalpass.sortByViewOrder(passes.filter(function (pass) { return pass.sticky; })); 1812 nonSticky = exports.festivalpass.sortByDate(passes.filter(function (pass) { return !pass.sticky; })); 1813 sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false)); 1814 return [2 /*return*/, sticky]; 1815 }); 1816 }); 1817 }, 1818 filterOld: function (passes, removeBeforeDate) { 1819 return __awaiter(this, void 0, void 0, function () { 1820 return __generator(this, function (_a) { 1821 console.log("removeBeforeDate", removeBeforeDate); 1822 dayjs_1.default.extend(isSameOrAfter_1.default); 1823 return [2 /*return*/, passes.filter(function (_a) { 1824 var date = _a.date, endDate = _a.endDate; 1825 return (0, dayjs_1.default)(endDate || date).isSameOrAfter(removeBeforeDate, "second"); 1826 })]; 1827 }); 1828 }); 1829 }, 1830 convert: function (post, locale) { 1831 // let venue = eventService.allVenues.find( 1832 // (v) => v.id === post.acf.scen.ID 1833 // ); 1834 var venue = venueService_1.venueService.getVenueOrTBA(post); 1835 var venueFormatted = venue.title; 1836 var pass = { 1837 id: post.id, 1838 title: contentService_1.contentService.breakLines(post.title.rendered), 1839 date: post.acf.datum, 1840 endDate: post.acf.slutdatum, 1841 overTitle: post.acf.overrubrik, 1842 eventType: post.acf.event_typ, 1843 venueFormatted: venueFormatted, 1844 backgroundColor: post.acf.bakgrundsfarg || (venue === null || venue === void 0 ? void 0 : venue.color) || config_1.config.defaultColor, 1845 ticket: post.acf.biljett, 1846 dateFormatted: eventService_1.eventService.getDateAndTime(post, locale, false), 1847 dateTimeFormatted: eventService_1.eventService.getDateAndTime(post, locale, true), 1848 viewOrder: post.acf.ordning, 1849 sticky: post.sticky || post.acf.klistrad || false, 1850 }; 1851 return pass; 1852 }, 1853 getPasses: function (locale) { 1854 return __awaiter(this, void 0, void 0, function () { 1855 var postPasses, passes; 1856 return __generator(this, function (_a) { 1857 switch (_a.label) { 1858 case 0: return [4 /*yield*/, exports.festivalpass.loadPasses()]; 1859 case 1: 1860 postPasses = _a.sent(); 1861 passes = [];
1862 postPasses.forEach(function (ticket) { 1863 var pass = exports.festivalpass.convert(ticket, locale); 1864 passes.push(pass); 1865 }); 1866 exports.festivalpass.sortByViewOrder(passes); 1867 exports.festivalpass.translatePasses(passes, locale); 1868 return [2 /*return*/, passes]; 1869 } 1870 }); 1871 }); 1872 }, 1873 load: function (eventPasses, selector, addPipe, tickets, locale) { 1874 return __awaiter(this, void 0, void 0, function () { 1875 return __generator(this, function (_a) { 1876 switch (_a.label) { 1877 case 0: 1878 exports.festivalpass._locale = locale; 1879 if (!(tickets.length === 0)) return [3 /*break*/, 2]; 1880 return [4 /*yield*/, exports.festivalpass.getPasses(locale)]; 1881 case 1: 1882 tickets = _a.sent(); 1883 _a.label = 2; 1884 case 2: 1885 exports.festivalpass.parse(tickets, eventPasses, selector, addPipe); 1886 return [2 /*return*/]; 1887 } 1888 }); 1889 }); 1890 }, 1891}; 1892 1893},{"./config":4,"./contentService":5,"./eventService":7,"./language":13,"./venueService":24,"dayjs":25,"dayjs/plugin/isSameOrAfter":28}],11:[function(require,module,exports){ 1894"use strict"; 1895var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1896 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1897 return new (P || (P = Promise))(function (resolve, reject) { 1898 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1899 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1900 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1901 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1902 }); 1903}; 1904var __generator = (this && this.__generator) || function (thisArg, body) { 1905 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 1906 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 1907 function verb(n) { return function (v) { return step([n, v]); }; } 1908 function step(op) { 1909 if (f) throw new TypeError("Generator is already executing."); 1910 while (g && (g = 0, op[0] && (_ = 0)), _) try { 1911 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 1912 if (y = 0, t) op = [op[0] & 2, t.value]; 1913 switch (op[0]) { 1914 case 0: case 1: t = op; break; 1915 case 4: _.label++; return { value: op[1], done: false }; 1916 case 5: _.label++; y = op[1]; op = [0]; continue; 1917 case 7: op = _.ops.pop(); _.trys.pop(); continue; 1918 default: 1919 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 1920 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 1921 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 1922 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 1923 if (t[2]) _.ops.pop(); 1924 _.trys.pop(); continue; 1925 } 1926 op = body.call(thisArg, _); 1927 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 1928 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 1929 } 1930}; 1931var __values = (this && this.__values) || function(o) { 1932 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; 1933 if (m) return m.call(o); 1934 if (o && typeof o.length === "number") return { 1935 next: function () { 1936 if (o && i >= o.length) o = void 0; 1937 return { value: o && o[i++], done: !o }; 1938 } 1939 }; 1940 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); 1941}; 1942Object.defineProperty(exports, "__esModule", { value: true }); 1943exports.historical = void 0; 1944var config_1 = require("./config"); 1945var language_1 = require("./language"); 1946exports.historical = { 1947 _locale: config_1.config.defaultLang, 1948 addLetterClasses: function () { 1949 return __awaiter(this, void 0, void 0, function () { 1950 return __generator(this, function (_a) { 1951 $(".wp-block-list").each(function (index) { 1952 var letter = $(this).siblings("p")[index]; 1953 $(letter).addClass("letter"); 1954 $(letter).addClass("letter" + index); 1955 }); 1956 return [2 /*return*/]; 1957 }); 1958 }); 1959 }, 1960 createSearchInput: function () { 1961 return __awaiter(this, void 0, void 0, function () { 1962 var label, s; 1963 return __generator(this, function (_a) { 1964 label = language_1.language.get(exports.historical._locale, "SearchAct"); 1965 s = $("<input id=\"search\" placeholder=\"".concat(label, "\" />")); 1966 $(".single-description").prepend(s); 1967 return [2 /*return*/]; 1968 }); 1969 }); 1970 }, 1971 handleSearchAct: function () { 1972 return __awaiter(this, void 0, void 0, function () { 1973 return __generator(this, function (_a) { 1974 $("input#search").on("input", function () { 1975 $("select#year").val("-1"); 1976 //console.log((this as HTMLInputElement).value); 1977 var searchTerm = this.value.toLowerCase(); 1978 $(".wp-block-list").each(function (index) { 1979 var letter = $(this).siblings("p")[index]; 1980 //$(letter).addClass("letter"); 1981 //$(letter).addClass("letter" + index); 1982 var hideLetter = true; 1983 $(this) 1984 .children() 1985 .each(function (index) { 1986 var text = $(this).text().toLowerCase(); 1987 var hide = true; 1988 if (text.includes(searchTerm) && hide) { 1989 hide = false;
1990 } 1991 if (hide && searchTerm != "") { 1992 //console.log("hide:" + $(this)); 1993 $(this).addClass("is-hidden"); 1994 } 1995 else { 1996 $(this).removeClass("is-hidden"); 1997 if (hideLetter) { 1998 hideLetter = false; 1999 } 2000 } 2001 }); 2002 if (hideLetter) { 2003 $(letter).addClass("is-hidden"); 2004 } 2005 else { 2006 $(letter).removeClass("is-hidden"); 2007 } 2008 }); 2009 }); 2010 return [2 /*return*/]; 2011 }); 2012 }); 2013 }, 2014 sortYears: function (years) { 2015 return __awaiter(this, void 0, void 0, function () { 2016 return __generator(this, function (_a) { 2017 return [2 /*return*/, years.sort()]; 2018 }); 2019 }); 2020 }, 2021 createYearDropdownList: function (years) { 2022 return __awaiter(this, void 0, void 0, function () { 2023 var label, s, years_1, years_1_1, val; 2024 var e_1, _a; 2025 return __generator(this, function (_b) { 2026 label = language_1.language.get(exports.historical._locale, "SelectYear"); 2027 s = $('<select id="year" />'); 2028 $("<option />", { value: "-1", text: label }).appendTo(s); 2029 try { 2030 for (years_1 = __values(years), years_1_1 = years_1.next(); !years_1_1.done; years_1_1 = years_1.next()) { 2031 val = years_1_1.value; 2032 $("<option />", { value: val, text: val }).appendTo(s); 2033 } 2034 } 2035 catch (e_1_1) { e_1 = { error: e_1_1 }; } 2036 finally { 2037 try { 2038 if (years_1_1 && !years_1_1.done && (_a = years_1.return)) _a.call(years_1); 2039 } 2040 finally { if (e_1) throw e_1.error; } 2041 } 2042 //s.prepend(".single-description"); // or wherever it should be 2043 $(".single-description").prepend(s); 2044 return [2 /*return*/]; 2045 }); 2046 }); 2047 }, 2048 handleSelectYear: function () { 2049 return __awaiter(this, void 0, void 0, function () { 2050 return __generator(this, function (_a) { 2051 $("select#year").on("change", function () { 2052 $("input#search").val(""); 2053 //console.log(this.value); 2054 var selectedYear = parseInt(this.value); 2055 $(".wp-block-list").each(function (index) { 2056 var letter = $(this).siblings("p")[index]; 2057 //$(letter).addClass("letter"); 2058 //$(letter).addClass("letter" + index); 2059 var hideLetter = true; 2060 $(this) 2061 .children() 2062 .each(function (index) { 2063 var e_2, _a; 2064 var text = $(this).text(); 2065 //var res = text.matchAll(/(?:(?:19|20)[0-9]{2})/); 2066 var hide = true; 2067 var regex = /(?:(?:19|20)[0-9]{2})/g; 2068 try { 2069 for (var _b = __values(text.matchAll(regex)), _c = _b.next(); !_c.done; _c = _b.next()) { 2070 var match = _c.value; 2071 //console.log(match[0]); 2072 var year = parseInt(match[0]); 2073 if (year === selectedYear && hide) { 2074 hide = false;
2075 } 2076 } 2077 } 2078 catch (e_2_1) { e_2 = { error: e_2_1 }; } 2079 finally { 2080 try { 2081 if (_c && !_c.done && (_a = _b.return)) _a.call(_b); 2082 } 2083 finally { if (e_2) throw e_2.error; } 2084 } 2085 if (hide && selectedYear != -1) { 2086 //console.log("hide:" + $(this)); 2087 $(this).addClass("is-hidden"); 2088 } 2089 else { 2090 $(this).removeClass("is-hidden"); 2091 if (hideLetter) { 2092 hideLetter = false; 2093 } 2094 } 2095 }); 2096 if (hideLetter) { 2097 $(letter).addClass("is-hidden"); 2098 } 2099 else { 2100 $(letter).removeClass("is-hidden"); 2101 } 2102 }); 2103 }); 2104 return [2 /*return*/]; 2105 }); 2106 }); 2107 }, 2108 parseYears: function () { 2109 return __awaiter(this, void 0, void 0, function () { 2110 var years, _a, _b; 2111 return __generator(this, function (_c) { 2112 switch (_c.label) { 2113 case 0: 2114 years = []; 2115 $(".wp-block-list li").each(function (index) { 2116 var e_3, _a; 2117 //console.log(index + ": " + $(this).text()); 2118 var text = $(this).text(); 2119 //var res = text.matchAll(/(?:(?:19|20)[0-9]{2})/); 2120 var regex = /(?:(?:19|20)[0-9]{2})/g; 2121 try { 2122 for (var _b = __values(text.matchAll(regex)), _c = _b.next(); !_c.done; _c = _b.next()) { 2123 var match = _c.value; 2124 //console.log(match[0]); 2125 var year = parseInt(match[0]); 2126 if (year === 2000) { 2127 break; 2128 } 2129 if (!years.includes(year)) 2130 years.push(year); 2131 } 2132 } 2133 catch (e_3_1) { e_3 = { error: e_3_1 }; } 2134 finally { 2135 try { 2136 if (_c && !_c.done && (_a = _b.return)) _a.call(_b); 2137 } 2138 finally { if (e_3) throw e_3.error; } 2139 } 2140 //console.log(res); 2141 }); 2142 _b = (_a = exports.historical).createYearDropdownList; 2143 return [4 /*yield*/, exports.historical.sortYears(years)]; 2144 case 1: 2145 _b.apply(_a, [_c.sent()]); 2146 exports.historical.handleSelectYear(); 2147 return [2 /*return*/]; 2148 } 2149 }); 2150 }); 2151 }, 2152 init: function (locale, currentPage) { 2153 return __awaiter(this, void 0, void 0, function () { 2154 return __generator(this, function (_a) { 2155 switch (_a.label) { 2156 case 0: 2157 exports.historical._locale = locale; 2158 console.log("historical init", exports.historical._locale); 2159 return [4 /*yield*/, exports.historical.addLetterClasses()]; 2160 case 1: 2161 _a.sent(); 2162 return [4 /*yield*/, exports.historical.parseYears()]; 2163 case 2: 2164 _a.sent(); 2165 return [4 /*yield*/, exports.historical.createSearchInput()]; 2166 case 3: 2167 _a.sent(); 2168 return [4 /*yield*/, exports.historical.handleSearchAct()]; 2169 case 4: 2170 _a.sent(); 2171 return [2 /*return*/]; 2172 } 2173 }); 2174 }); 2175 }, 2176}; 2177 2178},{"./config":4,"./language":13}],12:[function(require,module,exports){ 2179"use strict"; 2180var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2181 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2182 return new (P || (P = Promise))(function (resolve, reject) { 2183 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2184 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2185 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2186 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2187 }); 2188}; 2189var __generator = (this && this.__generator) || function (thisArg, body) { 2190 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 2191 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 2192 function verb(n) { return function (v) { return step([n, v]); }; } 2193 function step(op) { 2194 if (f) throw new TypeError("Generator is already executing."); 2195 while (g && (g = 0, op[0] && (_ = 0)), _) try {
2196 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 2197 if (y = 0, t) op = [op[0] & 2, t.value]; 2198 switch (op[0]) { 2199 case 0: case 1: t = op; break; 2200 case 4: _.label++; return { value: op[1], done: false }; 2201 case 5: _.label++; y = op[1]; op = [0]; continue; 2202 case 7: op = _.ops.pop(); _.trys.pop(); continue; 2203 default: 2204 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 2205 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 2206 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 2207 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 2208 if (t[2]) _.ops.pop(); 2209 _.trys.pop(); continue; 2210 } 2211 op = body.call(thisArg, _); 2212 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 2213 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 2214 } 2215}; 2216Object.defineProperty(exports, "__esModule", { value: true }); 2217exports.info = void 0; 2218var config_1 = require("./config"); 2219var site_1 = require("./site"); 2220var contentService_1 = require("./contentService"); 2221var page_1 = require("./page"); 2222var venueService_1 = require("./venueService"); 2223var historical_1 = require("./historical"); 2224exports.info = { 2225 _locale: config_1.config.defaultLang, 2226 allContents: [], 2227 renderPost: function (content) { 2228 var link = "".concat(config_1.config.siteFolder, "info/").concat(content.slug, "/"); 2229 var dataFormat = ""; 2230 if (content.lank) { 2231 link = content.lank; 2232 dataFormat = " data-format=\"link\""; 2233 } 2234 var template = "<a href=\"".concat(link, "\" data-id=\"").concat(content.id, "\" data-slug=\"info/").concat(content.slug, "\"").concat(dataFormat, " class=\"single-box info ").concat(content.slug, "\" title=\"").concat(content.title, "\" rel=\"bookmark\">\n <div class=\"caption-text\" id=\"0\"><h2>").concat(content.title, "</h2></div>\n </a>"); 2235 $("#content").append(template); 2236 }, 2237 parse: function (contents, locale, currentPage) { 2238 contents.forEach(function (event) { 2239 exports.info.renderPost(event); 2240 }); 2241 exports.info.listenBoxes(locale, currentPage); 2242 }, 2243 load: function () { 2244 return __awaiter(this, void 0, void 0, function () { 2245 return __generator(this, function (_a) { 2246 switch (_a.label) { 2247 case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() + 2248 "info?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=meta_value_num&filter[meta_key]=ordning&filter[order]=ASC"))]; 2249 case 1: return [2 /*return*/, _a.sent()]; 2250 } 2251 }); 2252 }); 2253 }, 2254 loadSingle: function (postId, postSlug) { 2255 return __awaiter(this, void 0, void 0, function () { 2256 var query, result; 2257 return __generator(this, function (_a) { 2258 switch (_a.label) { 2259 case 0: 2260 query = ""; 2261 if (postId) { 2262 query += postId; 2263 } 2264 else { 2265 query += "?slug=" + postSlug; 2266 } 2267 return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "info/" + query)]; 2268 case 1: 2269 result = _a.sent(); 2270 if (result.length === 1) { 2271 // By slug returns array 2272 return [2 /*return*/, result[0]]; 2273 } 2274 return [2 /*return*/, result]; 2275 } 2276 }); 2277 }); 2278 }, 2279 listenBoxes: function (locale, currentPage) { 2280 console.log("info listenBoxes"); 2281 $("a.single-box").click(function (e) { 2282 return __awaiter(this, void 0, void 0, function () { 2283 var postFormat, slug; 2284 return __generator(this, function (_a) { 2285 switch (_a.label) { 2286 case 0: 2287 postFormat = $(this).data("format"); 2288 slug = $(this).data("slug"); 2289 if ("link" === postFormat) { 2290 return [2 /*return*/]; 2291 } 2292 e.stopPropagation(); 2293 e.preventDefault(); 2294 return [4 /*yield*/, site_1.site.handleClick(this, "info")]; 2295 case 1: 2296 _a.sent(); 2297 if (slug.includes("previous")) { 2298 // Hackish 2299 historical_1.historical.init(locale, currentPage); 2300 } 2301 return [2 /*return*/]; 2302 } 2303 }); 2304 }); 2305 }); 2306 }, 2307 get: function (locale) { 2308 return __awaiter(this, void 0, void 0, function () { 2309 var posts, contents; 2310 return __generator(this, function (_a) { 2311 switch (_a.label) { 2312 case 0: 2313 if (exports.info.allContents.length > 0) { 2314 return [2 /*return*/, exports.info.allContents]; 2315 } 2316 return [4 /*yield*/, exports.info.load()]; 2317 case 1: 2318 posts = _a.sent(); 2319 contents = [];
2320 posts.forEach(function (post) { 2321 contents.push(contentService_1.contentService.convert(post, locale)); 2322 }); 2323 return [2 /*return*/, contents]; 2324 } 2325 }); 2326 }); 2327 }, 2328 addVenues: function (content) { 2329 return __awaiter(this, void 0, void 0, function () { 2330 return __generator(this, function (_a) { 2331 switch (_a.label) { 2332 case 0: 2333 console.log("info.addVenues ".concat(content.slug)); 2334 if (!(content.slug === 2335 page_1.sitemap[page_1.Locales[exports.info._locale]].VENUES.singleUrl)) return [3 /*break*/, 2]; 2336 return [4 /*yield*/, venueService_1.venueService.init(exports.info._locale)]; 2337 case 1: 2338 _a.sent(); 2339 venueService_1.venueService.allVenues.forEach(function (venue) { 2340 venueService_1.venueService.append(content, venue); 2341 }); 2342 _a.label = 2; 2343 case 2: return [2 /*return*/, content]; 2344 } 2345 }); 2346 }); 2347 }, 2348 getSingle: function (postId, postSlug) { 2349 return __awaiter(this, void 0, void 0, function () { 2350 var _a, _b, _c, _d; 2351 return __generator(this, function (_e) { 2352 switch (_e.label) { 2353 case 0: 2354 console.log("info.getSingle ".concat(postId, " ").concat(postSlug)); 2355 _b = (_a = exports.info).addVenues; 2356 _d = (_c = contentService_1.contentService).convert; 2357 return [4 /*yield*/, exports.info.loadSingle(postId, postSlug)]; 2358 case 1: return [2 /*return*/, _b.apply(_a, [_d.apply(_c, [_e.sent(), exports.info._locale])])]; 2359 } 2360 }); 2361 }); 2362 }, 2363 init: function (locale, currentPage) { 2364 return __awaiter(this, void 0, void 0, function () { 2365 var _a, content; 2366 return __generator(this, function (_b) { 2367 switch (_b.label) { 2368 case 0: 2369 exports.info._locale = locale; 2370 _a = exports.info; 2371 return [4 /*yield*/, exports.info.get(locale)]; 2372 case 1: 2373 _a.allContents = _b.sent(); 2374 exports.info.parse(exports.info.allContents, locale, currentPage); 2375 console.log("info init", exports.info._locale); 2376 if (!currentPage.singleUrl) return [3 /*break*/, 5]; 2377 return [4 /*yield*/, exports.info.getSingle(null, currentPage.singleUrl)]; 2378 case 2: 2379 content = (_b.sent()); 2380 return [4 /*yield*/, site_1.site.loadSingle(content.id, currentPage.singleUrl, "info")]; 2381 case 3: 2382 _b.sent(); 2383 if (!(currentPage.subPage === page_1.Pages.HISTORICAL)) return [3 /*break*/, 5]; 2384 return [4 /*yield*/, historical_1.historical.init(locale, currentPage)]; 2385 case 4: 2386 _b.sent(); 2387 _b.label = 5; 2388 case 5: return [2 /*return*/]; 2389 } 2390 }); 2391 }); 2392 }, 2393}; 2394 2395},{"./config":4,"./contentService":5,"./historical":11,"./page":16,"./site":21,"./venueService":24}],13:[function(require,module,exports){ 2396"use strict"; 2397Object.defineProperty(exports, "__esModule", { value: true }); 2398exports.language = void 0; 2399var translation = { 2400 sv: { 2401 Biljett: "Biljett", 2402 BiljettPl: "Biljetter", 2403 Doors: "Dörrar öppnar", 2404 Opens: "Ãppnar", 2405 SoldOut: "SlutsÃ¥ld", 2406 Cancelled: "Inställd", 2407 SelectYear: "Välj Ã¥r", 2408 SearchAct: "Sök akt", 2409 //ClandestinoFestival: "Clandestino Festival<br>29 majâ1 juni 2025", 2410 ClandestinoFestival: "Clandestino Festival", 2411 Goldpass: "Guldpass", 2412 Festivalpass: "Festivalpass", 2413 Kl: "kl", 2414 FreeAdmissionRegistrationRequired: "Fri entré â Anmälan krävs" 2415 }, 2416 en: { 2417 Biljett: "Ticket", 2418 BiljettPl: "Tickets", 2419 Doors: "Doors open", 2420 Opens: "Open", 2421 SoldOut: "Sold Out", 2422 Cancelled: "Cancelled", 2423 SelectYear: "Select year", 2424 SearchAct: "Search act", 2425 //ClandestinoFestival: "Clandestino Festival<br>May 29âJune 1 2025", 2426 ClandestinoFestival: "Clandestino Festival", 2427 Goldpass: "Gold Pass", 2428 Festivalpass: "Festival Pass", 2429 Kl: "hrs", 2430 FreeAdmissionRegistrationRequired: "Free admission â Registration required" 2431 }, 2432}; 2433exports.language = { 2434 get: function (lan, trans) { 2435 return translation[lan][trans]; 2436 }, 2437 init: function () { 2438 console.log('language init'); 2439 } 2440}; 2441 2442},{}],14:[function(require,module,exports){ 2443"use strict"; 2444Object.defineProperty(exports, "__esModule", { value: true }); 2445exports.logo = void 0; 2446exports.logo = { 2447 scrolledLogo: function () { 2448 var scrolled = ($('.scrolled').length > 0); 2449 var singleView = ($('.single-focus').length > 0); 2450 var scrollObject; 2451 var breakpoint; 2452 if (singleView) { 2453 if (scrolled) { 2454 return; 2455 } 2456 scrollObject = $('.single-description').first(); 2457 breakpoint = 110; 2458 } 2459 else { 2460 scrollObject = $('#content').first(); 2461 breakpoint = -90; 2462 } 2463 var contentPosTop = scrollObject.position().top; 2464 if (contentPosTop < breakpoint) { 2465 $('.site-title').addClass('scrolled'); 2466 } 2467 else { 2468 $('.site-title').removeClass('scrolled'); 2469 } 2470 }, 2471 listen: function () { 2472 var didScroll = false;
2473 document.addEventListener('wheel', function (evt) { 2474 didScroll = true; 2475 }, { capture: false, passive: true }); 2476 document.addEventListener('touchmove', function (evt) { 2477 didScroll = true; 2478 }, { capture: false, passive: true }); 2479 setInterval(function () { 2480 if (didScroll) { 2481 didScroll = false; 2482 exports.logo.scrolledLogo(); 2483 } 2484 }, 170); 2485 }, 2486 init: function () { 2487 console.log('logo init'); 2488 exports.logo.listen(); 2489 } 2490}; 2491 2492},{}],15:[function(require,module,exports){ 2493"use strict"; 2494var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2495 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2496 return new (P || (P = Promise))(function (resolve, reject) { 2497 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2498 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2499 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2500 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2501 }); 2502}; 2503var __generator = (this && this.__generator) || function (thisArg, body) { 2504 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 2505 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 2506 function verb(n) { return function (v) { return step([n, v]); }; } 2507 function step(op) { 2508 if (f) throw new TypeError("Generator is already executing."); 2509 while (g && (g = 0, op[0] && (_ = 0)), _) try { 2510 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 2511 if (y = 0, t) op = [op[0] & 2, t.value]; 2512 switch (op[0]) { 2513 case 0: case 1: t = op; break; 2514 case 4: _.label++; return { value: op[1], done: false }; 2515 case 5: _.label++; y = op[1]; op = [0]; continue; 2516 case 7: op = _.ops.pop(); _.trys.pop(); continue; 2517 default: 2518 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 2519 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 2520 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 2521 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 2522 if (t[2]) _.ops.pop(); 2523 _.trys.pop(); continue; 2524 } 2525 op = body.call(thisArg, _); 2526 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 2527 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 2528 } 2529}; 2530Object.defineProperty(exports, "__esModule", { value: true }); 2531exports.news = void 0; 2532var config_1 = require("./config"); 2533var site_1 = require("./site"); 2534var eventService_1 = require("./eventService"); 2535var contentService_1 = require("./contentService"); 2536exports.news = { 2537 _locale: config_1.config.defaultLang, 2538 allEvents: [], 2539 parse: function (events) { 2540 events.forEach(function (event) { 2541 eventService_1.eventService.renderPost(event); 2542 }); 2543 }, 2544 load: function (events, locale) { 2545 exports.news.parse(events); 2546 exports.news.listenBoxes(); 2547 }, 2548 listenBoxes: function () { 2549 console.log("news listenBoxes"); 2550 $("a.single-box").click(function (e) { 2551 site_1.site.handleClick(this); 2552 e.stopPropagation(); 2553 e.preventDefault(); 2554 }); 2555 }, 2556 init: function (locale, currentPage) { 2557 return __awaiter(this, void 0, void 0, function () { 2558 return __generator(this, function (_a) { 2559 switch (_a.label) { 2560 case 0: 2561 exports.news._locale = locale; 2562 //await eventService.init(locale); 2563 return [4 /*yield*/, contentService_1.contentService.init(locale, currentPage.category)]; 2564 case 1: 2565 //await eventService.init(locale); 2566 _a.sent(); 2567 eventService_1.eventService.appendContent(contentService_1.contentService.allContents); 2568 exports.news.allEvents = eventService_1.eventService.allEvents.filter(function (e) { 2569 return e.categories.includes(currentPage.category); 2570 }); 2571 exports.news.allEvents = eventService_1.eventService.sortSticky(exports.news.allEvents, eventService_1.SortOrder.RANDOM); 2572 contentService_1.contentService.addExtraClasse
2572s(exports.news.allEvents); 2573 exports.news.load(exports.news.allEvents, locale); 2574 console.log("news init", exports.news._locale); 2575 return [2 /*return*/]; 2576 } 2577 }); 2578 }); 2579 }, 2580}; 2581 2582},{"./config":4,"./contentService":5,"./eventService":7,"./site":21}],16:[function(require,module,exports){ 2583"use strict"; 2584var _a; 2585Object.defineProperty(exports, "__esModule", { value: true }); 2586exports.page = exports.sitemap = exports.Locales = exports.Pages = void 0; 2587var Pages; 2588(function (Pages) { 2589 Pages["NEWS"] = "NEWS"; 2590 Pages["PROGRAM"] = "PROGRAM"; 2591 Pages["TICKETS"] = "TICKET"; 2592 Pages["SCHEDULE"] = "SCHEDULE"; 2593 Pages["CALENDAR"] = "CALENDAR"; 2594 Pages["INFO"] = "INFO"; 2595 Pages["VENUES"] = "VENUES"; 2596 Pages["BACKSTAGE"] = "BACKSTAGE"; 2597 //ACCESSIBILITY = "ACCESSIBILITY", 2598 Pages["FAQ"] = "FAQ"; 2599 Pages["PARTNERS"] = "PARTNERS"; 2600 Pages["PODCAST"] = "PODCAST"; 2601 Pages["HISTORICAL"] = "HISTORICAL"; 2602 Pages["ARCHIVE_OF_IMAGES"] = "ARCHIVE_OF_IMAGES"; 2603 Pages["PRESS"] = "PRESS"; 2604})(Pages = exports.Pages || (exports.Pages = {})); 2605var Locales; 2606(function (Locales) { 2607 Locales["sv"] = "sv"; 2608 Locales["en"] = "en"; 2609})(Locales = exports.Locales || (exports.Locales = {})); 2610exports.sitemap = (_a = {}, 2611 _a[Locales.sv] = { 2612 NEWS: { page: Pages.NEWS, url: "", category: 9 }, 2613 PROGRAM: { page: Pages.PROGRAM, url: "program", category: 11 }, 2614 TICKET: { page: Pages.TICKETS, url: "biljetter" }, 2615 SCHEDULE: { page: Pages.SCHEDULE, url: "spelschema" }, 2616 CALENDAR: { page: Pages.CALENDAR, url: "kalender" }, 2617 INFO: { page: Pages.INFO, url: "info" }, 2618 VENUES: { page: Pages.INFO, url: "info", singleUrl: "scener" }, 2619 // ACCESSIBILITY: { 2620 // page: Pages.INFO, 2621 // url: "info", 2622 // singleUrl: "tillganglighet", 2623 // }, 2624 FAQ: { page: Pages.INFO, url: "info", singleUrl: "faq" }, 2625 PARTNERS: { page: Pages.INFO, url: "info", singleUrl: "partners" }, 2626 BACKSTAGE: { page: Pages.INFO, url: "info", singleUrl: "backstage" }, 2627 HISTORICAL: { 2628 page: Pages.INFO, 2629 subPage: Pages.HISTORICAL, 2630 url: "info", 2631 singleUrl: "previous-line-up", 2632 }, 2633 PODCAST: { page: Pages.PODCAST, url: "pods", category: 10 }, 2634 ARCHIVE_OF_IMAGES: { page: Pages.ARCHIVE_OF_IMAGES, url: "bildarkiv" }, 2635 PRESS: { page: Pages.PRESS, url: "press" }, 2636 }, 2637 _a[Locales.en] = { 2638 NEWS: { page: Pages.NEWS, url: "", category: 15 }, 2639 PROGRAM: { page: Pages.PROGRAM, url: "program", category: 17 }, 2640 TICKET: { page: Pages.TICKETS, url: "tickets" }, 2641 SCHEDULE: { page: Pages.SCHEDULE, url: "schedule" }, 2642 CALENDAR: { page: Pages.CALENDAR, url: "calendar" }, 2643 INFO: { page: Pages.INFO, url: "info" }, 2644 VENUES: { page: Pages.INFO, url: "info", singleUrl: "venues" }, 2645 // ACCESSIBILITY: { 2646 // page: Pages.INFO, 2647 // url: "info", 2648 // singleUrl: "accessibility", 2649 // }, 2650 FAQ: { page: Pages.INFO, url: "info", singleUrl: "faq" }, 2651 PARTNERS: { page: Pages.INFO, url: "info", singleUrl: "partners" }, 2652 BACKSTAGE: { page: Pages.INFO, url: "info", singleUrl: "backstage" }, 2653 PODCAST: { page: Pages.PODCAST, url: "pods", category: 16 }, 2654 ARCHIVE_OF_IMAGES: { 2655 page: Pages.ARCHIVE_OF_IMAGES, 2656 url: "archive-of-images", 2657 }, 2658 PRESS: { page: Pages.PRESS, url: "press" }, 2659 }, 2660 _a); 2661exports.page = { 2662 findPageByUrl: function (url, subPage, locale) { 2663 var page = Object.values(exports.sitemap[locale]).find(function (e) { return e.url === url && e.singleUrl === subPage; }); 2664 if (page) { 2665 return page; 2666 } 2667 return Object.values(exports.sitemap[locale]).find(function (e) { return e.url === url; }); 2668 }, 2669}; 2670 2671},{}],17:[function(require,module,exports){ 2672"use strict"; 2673var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2674 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2675 return new (P || (P = Promise))(function (resolve, reject) { 2676 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2677 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2678 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2679 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2680 }); 2681}; 2682var __generator = (this && this.__generator) || function (thisArg, body) { 2683 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 2684 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 2685 function verb(n) { return function (v) { return step([n, v]); }; } 2686 function step(op) { 2687 if (f) throw new TypeError("Generator is already executing."); 2688 while (g && (g = 0, op[0] && (_ = 0)), _) try {
2689 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 2690 if (y = 0, t) op = [op[0] & 2, t.value]; 2691 switch (op[0]) { 2692 case 0: case 1: t = op; break; 2693 case 4: _.label++; return { value: op[1], done: false }; 2694 case 5: _.label++; y = op[1]; op = [0]; continue; 2695 case 7: op = _.ops.pop(); _.trys.pop(); continue; 2696 default: 2697 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 2698 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 2699 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 2700 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 2701 if (t[2]) _.ops.pop(); 2702 _.trys.pop(); continue; 2703 } 2704 op = body.call(thisArg, _); 2705 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 2706 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 2707 } 2708}; 2709Object.defineProperty(exports, "__esModule", { value: true }); 2710exports.pods = void 0; 2711var config_1 = require("./config"); 2712var site_1 = require("./site"); 2713var contentService_1 = require("./contentService"); 2714var eventService_1 = require("./eventService"); 2715exports.pods = { 2716 _locale: config_1.config.defaultLang, 2717 allContents: [], 2718 archivePodBeforeId: 12344, 2719 parse: function (contents) { 2720 contents.forEach(function (content) { 2721 if (content.id <= exports.pods.archivePodBeforeId || content.id == 12333) { 2722 content.extraCssClass = "pods-archive"; 2723 } 2724 var event = content; 2725 event.eventType = "pods"; 2726 eventService_1.eventService.renderPost(event); 2727 }); 2728 }, 2729 load: function (contents, locale) { 2730 exports.pods.parse(contents); 2731 exports.pods.listenBoxes(); 2732 }, 2733 listenBoxes: function () { 2734 console.log("pods listenBoxes"); 2735 $("a.single-box").click(function (e) { 2736 site_1.site.handleClick(this); 2737 e.stopPropagation(); 2738 e.preventDefault(); 2739 }); 2740 }, 2741 init: function (locale, currentPage) { 2742 return __awaiter(this, void 0, void 0, function () { 2743 return __generator(this, function (_a) { 2744 switch (_a.label) { 2745 case 0: 2746 exports.pods._locale = locale; 2747 return [4 /*yield*/, contentService_1.contentService.init(locale, currentPage.category)]; 2748 case 1: 2749 _a.sent(); 2750 exports.pods.allContents = contentService_1.contentService.allContents; 2751 exports.pods.load(exports.pods.allContents, locale); 2752 console.log("pods init", exports.pods._locale); 2753 return [2 /*return*/]; 2754 } 2755 }); 2756 }); 2757 }, 2758}; 2759 2760},{"./config":4,"./contentService":5,"./eventService":7,"./site":21}],18:[function(require,module,exports){ 2761"use strict"; 2762var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2763 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2764 return new (P || (P = Promise))(function (resolve, reject) { 2765 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2766 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2767 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2768 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2769 }); 2770}; 2771var __generator = (this && this.__generator) || function (thisArg, body) { 2772 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 2773 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 2774 function verb(n) { return function (v) { return step([n, v]); }; } 2775 function step(op) { 2776 if (f) throw new TypeError("Generator is already executing."); 2777 while (g && (g = 0, op[0] && (_ = 0)), _) try {
2778 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 2779 if (y = 0, t) op = [op[0] & 2, t.value]; 2780 switch (op[0]) { 2781 case 0: case 1: t = op; break; 2782 case 4: _.label++; return { value: op[1], done: false }; 2783 case 5: _.label++; y = op[1]; op = [0]; continue; 2784 case 7: op = _.ops.pop(); _.trys.pop(); continue; 2785 default: 2786 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 2787 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 2788 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 2789 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 2790 if (t[2]) _.ops.pop(); 2791 _.trys.pop(); continue; 2792 } 2793 op = body.call(thisArg, _); 2794 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 2795 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 2796 } 2797}; 2798var __importDefault = (this && this.__importDefault) || function (mod) { 2799 return (mod && mod.__esModule) ? mod : { "default": mod }; 2800}; 2801Object.defineProperty(exports, "__esModule", { value: true }); 2802exports.program = void 0; 2803var config_1 = require("./config"); 2804var site_1 = require("./site"); 2805var eventService_1 = require("./eventService"); 2806var contentService_1 = require("./contentService"); 2807var dayjs_1 = __importDefault(require("dayjs")); 2808exports.program = { 2809 _locale: config_1.config.defaultLang, 2810 allEvents: [], 2811 removeAfterDays: 1, 2812 parse: function (events) { 2813 events.forEach(function (event) { 2814 eventService_1.eventService.renderPost(event); 2815 }); 2816 }, 2817 load: function (events, locale) { 2818 exports.program.parse(events); 2819 exports.program.listenBoxes(); 2820 }, 2821 listenBoxes: function () { 2822 console.log("lineup listenBoxes"); 2823 $("a.single-box").click(function (e) { 2824 site_1.site.handleClick(this); 2825 e.stopPropagation(); 2826 e.preventDefault(); 2827 }); 2828 }, 2829 init: function (locale) { 2830 return __awaiter(this, void 0, void 0, function () { 2831 var _a; 2832 return __generator(this, function (_b) { 2833 switch (_b.label) { 2834 case 0: 2835 exports.program._locale = locale; 2836 _a = exports.program; 2837 return [4 /*yield*/, eventService_1.eventService.get(locale)]; 2838 case 1: 2839 _a.allEvents = _b.sent(); 2840 exports.program.allEvents = eventService_1.eventService.sortPastAndFuture(exports.program.allEvents, (0, dayjs_1.default)().subtract(exports.program.removeAfterDays, "days").toDate()); 2841 exports.program.load(exports.program.allEvents, locale); 2842 contentService_1.contentService.addExtraClasses(exports.program.allEvents); 2843 console.log("lineup init", exports.program._locale); 2844 return [2 /*return*/]; 2845 } 2846 }); 2847 }); 2848 }, 2849}; 2850 2851},{"./config":4,"./contentService":5,"./eventService":7,"./site":21,"dayjs":25}],19:[function(require,module,exports){ 2852"use strict"; 2853var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2854 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2855 return new (P || (P = Promise))(function (resolve, reject) { 2856 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2857 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2858 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2859 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2860 }); 2861}; 2862var __generator = (this && this.__generator) || function (thisArg, body) { 2863 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 2864 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 2865 function verb(n) { return function (v) { return step([n, v]); }; } 2866 function step(op) { 2867 if (f) throw new TypeError("Generator is already executing."); 2868 while (g && (g = 0, op[0] && (_ = 0)), _) try {
2869 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 2870 if (y = 0, t) op = [op[0] & 2, t.value]; 2871 switch (op[0]) { 2872 case 0: case 1: t = op; break; 2873 case 4: _.label++; return { value: op[1], done: false }; 2874 case 5: _.label++; y = op[1]; op = [0]; continue; 2875 case 7: op = _.ops.pop(); _.trys.pop(); continue; 2876 default: 2877 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 2878 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 2879 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 2880 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 2881 if (t[2]) _.ops.pop(); 2882 _.trys.pop(); continue; 2883 } 2884 op = body.call(thisArg, _); 2885 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 2886 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 2887 } 2888}; 2889var __importDefault = (this && this.__importDefault) || function (mod) { 2890 return (mod && mod.__esModule) ? mod : { "default": mod }; 2891}; 2892Object.defineProperty(exports, "__esModule", { value: true }); 2893exports.schedule = void 0; 2894var config_1 = require("./config"); 2895var site_1 = require("./site"); 2896var eventService_1 = require("./eventService"); 2897var language_1 = require("./language"); 2898var dayjs_1 = __importDefault(require("dayjs")); 2899var isBetween_1 = __importDefault(require("dayjs/plugin/isBetween")); 2900var isSameOrBefore_1 = __importDefault(require("dayjs/plugin/isSameOrBefore")); 2901var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter")); 2902exports.schedule = { 2903 _locale: config_1.config.defaultLang, 2904 allEvents: [], 2905 allVenues: [], 2906 slotsToRender: 80, 2907 removeAfterDays: 1, 2908 renderSlot: function (event, startTime, endTime, selector) { 2909 return __awaiter(this, void 0, void 0, function () { 2910 var startSlot, endSlot, template; 2911 return __generator(this, function (_a) { 2912 startSlot = startTime 2913 ? exports.schedule.roundTime((0, dayjs_1.default)(startTime)).format("HHmm") 2914 : ""; 2915 endSlot = endTime 2916 ? exports.schedule.roundTime((0, dayjs_1.default)(endTime)).format("HHmm") 2917 : ""; 2918 template = "\n <div class=\"schedule-item\" data-id=\"".concat(event.id, "\" style=\"grid-column: track-").concat(event.track, "; grid-row: time-").concat(startSlot, " / time-").concat(endSlot, ";background-color:").concat(event.venue.color, "\">\n <div>\n <p class=\"time\">").concat((0, dayjs_1.default)(startTime).format("HH.mm"), "\u2013").concat((0, dayjs_1.default)(endTime).format("HH.mm"), "</p>\n <h2>").concat(event.title, "</h2>\n </div>\n </div>"); 2919 $(selector).append(template); 2920 return [2 /*return*/]; 2921 }); 2922 }); 2923 }, 2924 renderEvent: function (event, selector) { 2925 return __awaiter(this, void 0, void 0, function () { 2926 return __generator(this, function (_a) { 2927 switch (_a.label) { 2928 case 0: 2929 console.log("renderEvent", event); 2930 return [4 /*yield*/, exports.schedule.renderSlot(event, event.startTime, event.endTime, selector)]; 2931 case 1: 2932 _a.sent(); 2933 console.log("event.startTime2", event.startTime2); 2934 if (!(event.startTime2 && event.endTime2)) return [3 /*break*/, 3]; 2935 return [4 /*yield*/, exports.schedule.renderSlot(event, event.startTime2, event.endTime2, selector)]; 2936 case 2: 2937 _a.sent(); 2938 _a.label = 3; 2939 case 3: 2940 if (!(event.startTime3 && event.endTime3)) return [3 /*break*/, 5]; 2941 return [4 /*yield*/, exports.schedule.render
2941Slot(event, event.startTime3, event.endTime3, selector)]; 2942 case 4: 2943 _a.sent(); 2944 _a.label = 5; 2945 case 5: return [2 /*return*/]; 2946 } 2947 }); 2948 }); 2949 }, 2950 roundTime: function (date) { 2951 var minutes = date.format("mm"); 2952 if (["00", "15", "30", "45"].includes(minutes)) { 2953 return date; 2954 } 2955 return (0, dayjs_1.default)(Math.ceil(date.toDate().getTime() / 900000) * 900000); 2956 }, 2957 addTimeSlot: function (timeSlot, slotSize, selector, hidden) { 2958 return __awaiter(this, void 0, void 0, function () { 2959 var timeSlotEnd; 2960 return __generator(this, function (_a) { 2961 timeSlotEnd = timeSlot.add(slotSize, "m"); 2962 $(selector).append("<h3 class=\"time-slot ".concat(hidden, "\" style=\"grid-row: time-").concat(timeSlot.format("HHmm"), " / time-").concat(timeSlotEnd.format("HHmm"), ";\">").concat(timeSlot.format("HH.mm"), "</h3>")); 2963 return [2 /*return*/]; 2964 }); 2965 }); 2966 }, 2967 renderSlots: function (day) { 2968 return __awaiter(this, void 0, void 0, function () { 2969 var currentTimeslot, _loop_1, i; 2970 var _this = this; 2971 return __generator(this, function (_a) { 2972 console.log("renderSlots"); 2973 console.log("day.events.length", day.events.length); 2974 console.log("day.events[0]", day.events[0]); 2975 console.log("day.startSlot", day.startSlot); 2976 console.log("day.endSlot", day.endSlot); 2977 currentTimeslot = (0, dayjs_1.default)(day.date).add(config_1.config.earliestEventHour, "h"); 2978 _loop_1 = function (i) { 2979 var nextTimeslot = currentTimeslot.add(15, "m"); 2980 var hidden = ""; 2981 if (currentTimeslot.isSameOrBefore(day.startSlot) || 2982 currentTimeslot.isSameOrAfter(day.endSlot)) { 2983 //console.log(currentTimeslot.format('HH:mm')+' is before '+day.startSlot.format('HH:mm')); 2984 //currentTimeslot = nextTimeslot; 2985 //continue; 2986 hidden = "hidden"; 2987 } 2988 if (currentTimeslot.format("mm") == "00" || 2989 currentTimeslot.format("mm") == "30") { 2990 exports.schedule.addTimeSlot(currentTimeslot, 30, day.selector, hidden); 2991 } 2992 var events = day.events.filter(function (_a) { 2993 var startTime = _a.startTime; 2994 return (0, dayjs_1.default)(startTime).isBetween(currentTimeslot, nextTimeslot, "second", "[)"); 2995 }); 2996 if (events.length > 0) { 2997 console.log("events.length" + events.length, day.selector); 2998 events.forEach(function (event) { return __awaiter(_this, void 0, void 0, function () { 2999 return __generator(this, function (_a) { 3000 switch (_a.label) { 3001 case 0: return [4 /*yield*/, exports.schedule.renderEvent(event, day.selector)]; 3002 case 1: 3003 _a.sent(); 3004 return [2 /*return*/]; 3005 } 3006 }); 3007 }); }); 3008 } 3009 else { 3010 console.log("no events", day.selector); 3011 } 3012 currentTimeslot = nextTimeslot; 3013 }; 3014 for (i = 0; i < this.slotsToRender; i++) { 3015 _loop_1(i); 3016 } 3017 return [2 /*return*/]; 3018 }); 3019 }); 3020 }, 3021 renderVenues: function (day) { 3022 return __awaiter(this, void 0, void 0, function () { 3023 return __generator(this, function (_a) {
3024 day.venues.forEach(function (venue) { 3025 var venueTitle = venue.title.replace("​", '<span class="hyphen">â</span>'); 3026 venueTitle = venueTitle.replace(", Ringön", ''); 3027 $(day.selector).append("<span class=\"track-slot\" aria-hidden=\"true\" style=\"grid-column: track-".concat(venue.track, "; grid-row: tracks;\"><p class=\"time-and-place\">").concat(venueTitle, "</p><p class=\"doors-open\">").concat(language_1.language.get(site_1.site._locale, "Opens"), " ").concat(venue.doorsOpen, "</p></span>")); 3028 }); 3029 return [2 /*return*/]; 3030 }); 3031 }); 3032 }, 3033 renderSchedule: function (day) { 3034 return __awaiter(this, void 0, void 0, function () { 3035 var dayTitle; 3036 return __generator(this, function (_a) { 3037 switch (_a.label) { 3038 case 0: 3039 console.log("renderschedule"); 3040 dayTitle = (0, dayjs_1.default)(day.date).format("dddd D MMMM"); 3041 $(".entry-content").append("\n <h2 class=\"schedule-day\">".concat(dayTitle, "</h2>\n <div class=\"schedule tracks").concat(day.venues.length, " ").concat(day.selector.replace(".", ""), "\" aria-labelledby=\"schedule-heading\"></div>")); 3042 return [4 /*yield*/, exports.schedule.renderVenues(day)]; 3043 case 1: 3044 _a.sent(); 3045 return [4 /*yield*/, exports.schedule.renderSlots(day)]; 3046 case 2: 3047 _a.sent(); 3048 return [2 /*return*/]; 3049 } 3050 }); 3051 }); 3052 }, 3053 addEventTracks: function (day) { 3054 return __awaiter(this, void 0, void 0, function () { 3055 return __generator(this, function (_a) { 3056 day.events.forEach(function (event) { 3057 var _a; 3058 event.track = (_a = day.venues.find(function (e) { return e.title === event.venue.title; })) === null || _a === void 0 ? void 0 : _a.track; 3059 }); 3060 return [2 /*return*/]; 3061 }); 3062 }); 3063 }, 3064 addDayLength: function (day) { 3065 var _a, _b; 3066 return __awaiter(this, void 0, void 0, function () { 3067 var start, end; 3068 return __generator(this, function (_c) { 3069 start = (0, dayjs_1.default)((_a = day.events[0]) === null || _a === void 0 ? void 0 : _a.startTime); 3070 end = (0, dayjs_1.default)((_b = day.events[day.events.length - 1]) === null || _b === void 0 ? void 0 : _b.endTime); 3071 if (end.hour() < 8) { 3072 end = end.add(1, "day"); 3073 } 3074 //day.startSlot = start.subtract(1, "hour").toDate(); 3075 day.startSlot = start.toDate(); 3076 //day.endSlot = end.add(1, "hour").toDate(); 3077 day.endSlot = end.toDate(); 3078 return [2 /*return*/]; 3079 }); 3080 }); 3081 }, 3082 addEvents: function (events, day) { 3083 return __awaiter(this, void 0, void 0, function () { 3084 var _this = this; 3085 return __generator(this, function (_a) { 3086 events.forEach(function (event) { return __awaiter(_this, void 0, void 0, function () { 3087 var date; 3088 return __generator(this, function (_a) { 3089 date = (0, dayjs_1.default)(event.startDate); 3090 if ((0, dayjs_1.default)(day.date).isSame(date, "day") && 3091 event.startTime && 3092 event.endTime) { 3093 day.events.push(event); 3094 console.log("addEvent", event); 3095 } 3096 return [2 /*return*/]; 3097 }); 3098 }); }); 3099 return [2 /*return*/]; 3100 }); 3101 }); 3102 }, 3103 addVenues: function (day) { 3104 return __awaiter(this, void 0, void 0, function () { 3105 var track; 3106 return __generator(this, function (_a) { 3107 track = 1;
3108 day.events.forEach(function (event) { 3109 var venueTitle = (event === null || event === void 0 ? void 0 : event.venue.title) || "tba"; 3110 if (!day.venues.some(function (e) { return e.title === venueTitle; })) { 3111 var venue = { 3112 title: venueTitle, 3113 track: track, 3114 doorsOpen: event.doorsOpenFormatted || 3115 (0, dayjs_1.default)(event.startTime).format("H.mm"), 3116 }; 3117 day.venues.push(venue); 3118 track++; 3119 } 3120 }); 3121 return [2 /*return*/]; 3122 }); 3123 }); 3124 }, 3125 sortVenues: function (day) { 3126 return __awaiter(this, void 0, void 0, function () { 3127 var track; 3128 return __generator(this, function (_a) { 3129 day.venues.sort(function (a, b) { 3130 var nameA = a.title.toUpperCase(); 3131 var nameB = b.title.toUpperCase(); 3132 if (nameA < nameB) { 3133 return -1; 3134 } 3135 if (nameA > nameB) { 3136 return 1; 3137 } 3138 // names must be equal 3139 return 0; 3140 }); 3141 track = 1; 3142 day.venues.forEach(function (venue) { 3143 venue.track = track; 3144 track++; 3145 }); 3146 return [2 /*return*/]; 3147 }); 3148 }); 3149 }, 3150 renderDay: function (day) { 3151 return __awaiter(this, void 0, void 0, function () { 3152 return __generator(this, function (_a) { 3153 switch (_a.label) { 3154 case 0: return [4 /*yield*/, exports.schedule.addEvents(exports.schedule.allEvents, day)]; 3155 case 1: 3156 _a.sent(); 3157 //day.events = await schedule.sort(day.events); 3158 return [4 /*yield*/, exports.schedule.addVenues(day)]; 3159 case 2: 3160 //day.events = await schedule.sort(day.events); 3161 _a.sent(); 3162 return [4 /*yield*/, exports.schedule.sortVenues(day)]; 3163 case 3: 3164 _a.sent(); 3165 return [4 /*yield*/, exports.schedule.addEventTracks(day)]; 3166 case 4: 3167 _a.sent(); 3168 return [4 /*yield*/, exports.schedule.addDayLength(day)]; 3169 case 5: 3170 _a.sent(); 3171 return [4 /*yield*/, exports.schedule.renderSchedule(day)]; 3172 case 6: 3173 _a.sent(); 3174 return [2 /*return*/]; 3175 } 3176 }); 3177 }); 3178 }, 3179 loadEvents: function () { 3180 return __awaiter(this, void 0, void 0, function () { 3181 return __generator(this, function (_a) { 3182 switch (_a.label) { 3183 case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() + 3184 "posts/?per_page=".concat(config_1.config.pageSize, "&categories=10&&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"))]; 3185 case 1: return [2 /*return*/, _a.sent()]; 3186 } 3187 }); 3188 }); 3189 }, 3190 listenBoxes: function () { 3191 console.log("schedule listenBoxes"); 3192 $("div.schedule-item").click(function (e) { 3193 site_1.site.handleClick(this); 3194 }); 3195 }, 3196 loadFestival2025Days: function () { 3197 return __awaiter(this, void 0, void 0, function () { 3198 var day0, day1, day2, day3, day4; 3199 return __generator(this, function (_a) { 3200 switch (_a.label) { 3201 case 0: 3202 day0 = { 3203 date: (0, dayjs_1.default)("2024-05-2").toDate(), 3204 selector: ".day0", 3205 venues: [], 3206 events: [], 3207 }; 3208 return [4 /*yield*/, exports.schedule.renderDay(day0)]; 3209 case 1: 3210 _a.sent(); 3211 return [2 /*return*/]; 3212 case 2: 3213 _a.sent(); 3214 day2 = { 3215 date: (0, dayjs_1.default)("2023-06-9").toDate(), 3216 selector: ".day2", 3217 venues: [], 3218 events: [], 3219 }; 3220 return [4 /*yield*/, exports.schedule.renderDay(day2)]; 3221 case 3: 3222 _a.sent(); 3223 day3 = { 3224 date: (0, dayjs_1.default)("2023-06-10").toDate(), 3225 selector: ".day3", 3226 venues: [], 3227 events: [], 3228 }; 3229 return [4 /*yield*/, exports.schedule.renderDay(day3)]; 3230 case 4: 3231 _a.sent(); 3232 day4 = { 3233 date: (0, dayjs_1.default)("2023-06-11").toDate(), 3234 selector: ".day4", 3235 venues: [], 3236 events: [], 3237 }; 3238 return [4 /*yield*/, exports.schedule.renderDay(day4)]; 3239 case 5: 3240 _a.sent(); 3241 return [2 /*return*/]; 3242 } 3243 }); 3244 }); 3245 },
3246 loadMonthlyDays: function () { 3247 return __awaiter(this, void 0, void 0, function () { 3248 var daysInMonth, dayOfMonth, daysToRender, i, day; 3249 var _this = this; 3250 return __generator(this, function (_a) { 3251 daysInMonth = (0, dayjs_1.default)().daysInMonth() + 365; 3252 dayOfMonth = (0, dayjs_1.default)(); 3253 daysToRender = []; 3254 for (i = 0; i < daysInMonth; i++) { 3255 dayOfMonth = (0, dayjs_1.default)().date(i); 3256 dayOfMonth = dayOfMonth.set("minute", 0); 3257 dayOfMonth = dayOfMonth.set("hour", 0); 3258 if (exports.schedule.allEvents.find(function (e) { 3259 return (0, dayjs_1.default)(e.startDate).isSame(dayOfMonth, "day"); 3260 })) { 3261 day = { 3262 date: dayOfMonth.toDate(), 3263 selector: ".day" + i, 3264 venues: [], 3265 events: [], 3266 }; 3267 if (!daysToRender.includes(day)) { 3268 daysToRender.push(day); 3269 } 3270 } 3271 } 3272 daysToRender.forEach(function (day) { return __awaiter(_this, void 0, void 0, function () { 3273 return __generator(this, function (_a) { 3274 switch (_a.label) { 3275 case 0: 3276 console.log("renderDay"); 3277 return [4 /*yield*/, exports.schedule.renderDay(day)]; 3278 case 1: 3279 _a.sent(); 3280 return [2 /*return*/]; 3281 } 3282 }); 3283 }); }); 3284 return [2 /*return*/]; 3285 }); 3286 }); 3287 }, 3288 init: function (locale) { 3289 return __awaiter(this, void 0, void 0, function () { 3290 var _a, _b; 3291 return __generator(this, function (_c) { 3292 switch (_c.label) { 3293 case 0: 3294 dayjs_1.default.extend(isBetween_1.default); 3295 dayjs_1.default.extend(isSameOrBefore_1.default); 3296 dayjs_1.default.extend(isSameOrAfter_1.default); 3297 exports.schedule._locale = locale; 3298 _a = exports.schedule; 3299 return [4 /*yield*/, eventService_1.eventService.getForSchedule(locale)]; 3300 case 1: 3301 _a.allEvents = _c.sent(); 3302 _b = exports.schedule; 3303 return [4 /*yield*/, eventService_1.eventService.filterOld(exports.schedule.allEvents, (0, dayjs_1.default)().subtract(exports.schedule.removeAfterDays, "days").toDate())]; 3304 case 2: 3305 _b.allEvents = _c.sent(); 3306 //await schedule.loadFestival2025Days(); 3307 return [4 /*yield*/, exports.schedule.loadMonthlyDays()]; 3308 case 3: 3309 //await schedule.loadFestival2025Days(); 3310 _c.sent(); 3311 setTimeout(function () { 3312 exports.schedule.listenBoxes(); 3313 console.log("schedule init", exports.schedule._locale); 3314 }, 250); 3315 return [2 /*return*/]; 3316 } 3317 }); 3318 }); 3319 }, 3320}; 3321 3322},{"./config":4,"./eventService":7,"./language":13,"./site":21,"dayjs":25,"dayjs/plugin/isBetween":27,"dayjs/plugin/isSameOrAfter":28,"dayjs/plugin/isSameOrBefore":29}],20:[function(require,module,exports){ 3323"use strict"; 3324var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3325 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3326 return new (P || (P = Promise))(function (resolve, reject) { 3327 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3328 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3329 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3330 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3331 }); 3332}; 3333var __generator = (this && this.__generator) || function (thisArg, body) { 3334 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 3335 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 3336 function verb(n) { return function (v) { return step([n, v]); }; } 3337 function step(op) { 3338 if (f) throw new TypeError("Generator is already executing."); 3339 while (g && (g = 0, op[0] && (_ = 0)), _) try {
3340 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 3341 if (y = 0, t) op = [op[0] & 2, t.value]; 3342 switch (op[0]) { 3343 case 0: case 1: t = op; break; 3344 case 4: _.label++; return { value: op[1], done: false }; 3345 case 5: _.label++; y = op[1]; op = [0]; continue; 3346 case 7: op = _.ops.pop(); _.trys.pop(); continue; 3347 default: 3348 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 3349 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 3350 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 3351 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 3352 if (t[2]) _.ops.pop(); 3353 _.trys.pop(); continue; 3354 } 3355 op = body.call(thisArg, _); 3356 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 3357 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 3358 } 3359}; 3360var __importDefault = (this && this.__importDefault) || function (mod) { 3361 return (mod && mod.__esModule) ? mod : { "default": mod }; 3362}; 3363Object.defineProperty(exports, "__esModule", { value: true }); 3364exports.share = void 0; 3365var config_1 = require("./config"); 3366var element_1 = require("./element"); 3367var dayjs_1 = __importDefault(require("dayjs")); 3368var contentService_1 = require("./contentService"); 3369exports.share = { 3370 _locale: config_1.config.defaultLang, 3371 renderShareLinks: function (event, link) { 3372 element_1.element.buttons.buttonShareFb.href = 3373 "https://www.facebook.com/sharer.php?u=" + link; 3374 // element.buttons.buttonShareTwitter.href = 3375 // "http://twitter.com/share?text=" + 3376 // event.title + 3377 // "&url=" + 3378 // config.siteUrl + 3379 // config.getSiteRoot() + 3380 // event.slug + 3381 // "/" + 3382 // "&hashtags=clandestinofestival"; 3383 element_1.element.buttons.buttonShareUrl.href = link; 3384 element_1.element.buttons.buttonShareUrl.innerHTML = "Url"; 3385 }, 3386 addCalenderProperty: function (calendar, property, value) { 3387 //calendar.getElementsByClassName(property)[0].innerHTML = value; 3388 calendar.setAttribute(property, value); 3389 }, 3390 renderAddToCalendar: function (event, link) { 3391 if (!event.startTime) { 3392 element_1.element.buttons.calendarContainer.classList.add("is-hidden"); 3393 return; 3394 } 3395 else { 3396 element_1.element.buttons.calendarContainer.classList.remove("is-hidden"); 3397 } 3398 var calendar = element_1.element.buttons.buttonAddToCalendar; 3399 if (calendar) { 3400 exports.share.addCalenderProperty(calendar, "name", contentService_1.contentService.stripTags(event.title)); 3401 var description = ""; 3402 description += 'Read more: <a href="' + link + '">' + link + "</a>"; 3403 if (event.venueFormatted) { 3404 description += "\r\nVenue: " + event.venueFormatted; 3405 } 3406 exports.share.addCalenderProperty(calendar, "description", description); 3407 if (event.venue.address) { 3408 exports.share.addCalenderProperty(calendar, "location", event.venue.address); 3409 } 3410 exports.share.addCalenderProperty(calendar, "startDate", (0, dayjs_1.default)(event.startTime).format("YYYY-MM-DD")); 3411 exports.share.addCalenderProperty(calendar, "startTime", (0, dayjs_1.default)(event.startTime).format("HH:mm")); 3412 if (event.endTime) { 3413 exports.share.addCalenderProperty(calendar, "endDate", (0, dayjs_1.default)(event.endTime).format("YYYY-MM-DD")); 3414 exports.share.addCalenderProperty(calendar, "endTime", (0, dayjs_1.default)(event.endTime).format("HH:mm")); 3415 } 3416 } 3417 // element.buttons.buttonShareTwitter.href = 3418 // "http://twitter.com/share?text=" + 3419 // event.title + 3420 // "&url=" + 3421 // config.siteUrl + 3422 // config.getSiteRoot() + 3423 // event.slug + 3424 // "/" + 3425 // "&hashtags=clandestinofestival"; 3426 element_1.element.buttons.buttonShareUrl.href = 3427 config_1.config.siteUrl + config_1.config.getSiteRoot() + event.slug; 3428 element_1.element.buttons.buttonShareUrl.innerHTML = "Url"; 3429 }, 3430 listenShareButtonSingle: function () { 3431 var buttonShareSingle = document.getElementById("button-share-single"); 3432 console.log("listenShareButtonSingle" + buttonShareSingle); 3433 if (null !== buttonShareSingle) { 3434 buttonShareSingle.onclick = function () { 3435 if (-1 === 3436 element_1.element.wrappers.mainWrapper.className.indexOf("share")) { 3437 element_1.element.wrappers.mainWrapper.className += " share"; 3438 } 3439 }; 3440 } 3441 }, 3442 init: function (locale, event) { 3443 return __awaiter(this, void 0, void 0, function () { 3444 var link; 3445 return __generator(this, function (_a) { 3446 exports.share.listenShareButtonSingle(); 3447 link = config_1.config.siteUrl + config_1.config.getSiteRoot() + event.slug + "/"; 3448 exports.share._locale = locale;
3449 exports.share.renderShareLinks(event, link); 3450 exports.share.renderAddToCalendar(event, link); 3451 console.log("share init", exports.share._locale); 3452 return [2 /*return*/]; 3453 }); 3454 }); 3455 }, 3456}; 3457 3458},{"./config":4,"./contentService":5,"./element":6,"dayjs":25}],21:[function(require,module,exports){ 3459"use strict"; 3460var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3461 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3462 return new (P || (P = Promise))(function (resolve, reject) { 3463 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3464 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3465 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3466 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3467 }); 3468}; 3469var __generator = (this && this.__generator) || function (thisArg, body) { 3470 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 3471 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 3472 function verb(n) { return function (v) { return step([n, v]); }; } 3473 function step(op) { 3474 if (f) throw new TypeError("Generator is already executing."); 3475 while (g && (g = 0, op[0] && (_ = 0)), _) try { 3476 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 3477 if (y = 0, t) op = [op[0] & 2, t.value]; 3478 switch (op[0]) { 3479 case 0: case 1: t = op; break; 3480 case 4: _.label++; return { value: op[1], done: false }; 3481 case 5: _.label++; y = op[1]; op = [0]; continue; 3482 case 7: op = _.ops.pop(); _.trys.pop(); continue; 3483 default: 3484 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 3485 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 3486 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 3487 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 3488 if (t[2]) _.ops.pop(); 3489 _.trys.pop(); continue; 3490 } 3491 op = body.call(thisArg, _); 3492 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 3493 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 3494 } 3495}; 3496Object.defineProperty(exports, "__esModule", { value: true }); 3497exports.site = void 0; 3498var config_1 = require("./config"); 3499var element_1 = require("./element"); 3500var festivalpass_1 = require("./festivalpass"); 3501var language_1 = require("./language"); 3502var eventService_1 = require("./eventService"); 3503var contentService_1 = require("./contentService"); 3504var info_1 = require("./info"); 3505//import { testContent } from "./testContent"; 3506var eventType_1 = require("./eventType"); 3507var share_1 = require("./share"); 3508exports.site = { 3509 _locale: config_1.config.defaultLang, 3510 renderLanguageSelector: function (slug) { 3511 return __awaiter(this, void 0, void 0, function () { 3512 var swedishUrl, englishUrl; 3513 return __generator(this, function (_a) { 3514 swedishUrl = config_1.config.siteFolder + slug + "/"; 3515 englishUrl = config_1.config.siteFolder + "en/" + slug + "/"; 3516 return [2 /*return*/, "<div class=\"language-selector\"><a href=\"".concat(swedishUrl, "\" class=\"swedish\">Svenska</a> | <a href=\"").concat(englishUrl, "\" class=\"english\">English</a></div>")]; 3517 }); 3518 }); 3519 }, 3520 renderHeadLineAndMeta: function (event) { 3521 return __awaiter(this, void 0, void 0, function () { 3522 var template, _a; 3523 return __generator(this, function (_b) { 3524 switch (_b.label) { 3525 case 0: 3526 template = ""; 3527 if (event.eventType) { 3528 template += "<p class=\"event-type\">".concat(eventType_1.eventType.getEventTypeDescription(event.eventType), "</p>"); 3529 } 3530 _a = template; 3531 return [4 /*yield*/, exports.site.renderLanguageSelector(event.slug)]; 3532 case 1: 3533 template = _a + _b.sent(); 3534 template += "<h1 class=\"entry-title\">".concat(event.title, "</h1>"); 3535 template += "<div class=\"share-single\"><a href=\"#\" id=\"button-share-single\"><span>Share post</span></a></div>"; 3536 template += "<div class=\"single-meta\">"; 3537 if (event.dateTimeFormatted || event.venue) { 3538 template += "<p class=\"time-and-place\">"; 3539 } 3540 if (event.dateTimeFormatted) { 3541 template += "".concat(event.dateTimeFormatted); 3542 } 3543 if (event.venue) { 3544 if (event.dateTimeFormatted) { 3545 template += "<br>"; 3546 } 3547 template += "".concat(event.venueFormatted); 3548 } 3549 if (event.dateTimeFormatted || event.venue) { 3550 template += "</p>"; 3551 } 3552 // 2025 and before we showed doors opened on single view, removed since 2026 3553 // if (event.doorsOpenFormatted) { 3554 // template += `<p class="doors-open">${language.get( 3555 // site._locale, 3556 // "Doors" 3557 // )} ${event.doorsOpenFormatted}</p>`; 3558 // } 3559 template += "<p class=\"ticket\">"; 3560 if (event.ticket) { 3561 template += "<a href=\"".concat(event.ticket, "\">").concat(language_1.language.get(exports.site._locale, "BiljettPl"), "</a>"); 3562 } 3563 template += "</p>"; 3564 template += "</div>"; 3565 $(template).prependTo(".single-description"); 3566 return [2 /*return*/]; 3567 } 3568 }); 3569 }); 3570 }, 3571 makeLargeImage: function () { 3572 var imageRef = $("#single-pane-content .single-description .wp-block-image:first"); 3573 if (imageRef.length === 0) { 3574 imageRef = $("#single-pane-content .single-description figure:first"); 3575 } 3576 var imageDetached = imageRef.detach(); 3577 imageDetached.prependTo("#single-pane-content"); 3578 }, 3579 renderEventStatuses: function (event) { 3580 if (event.cancelled || event.soldOut) { 3581 var selector = "#single-pane-content > .wp-block-image"; 3582 $(selector).addClass(event.extraCssClass); 3583 var labels = eventService_1.eventService.renderEventStatuses(event); 3584 $(labels).prependTo(selector); 3585 } 3586 }, 3587 addWpEditLink: function (postId) { 3588 if ($("body").hasClass("logged-in")) { 3589 $(".custom-post-edit").remove(); 3590 $("#wp-admin-bar-root-default").append('<li class="custom-post-edit"><a href="' + 3591 config_1.config.siteFolder + 3592 "wp-admin/post.php?post=" + 3593 postId + 3594 '&action=edit&lang=sv">Redigera inlägg</a></li>'); 3595 } 3596 }, 3597 handleWrappers: function () { 3598 return __awaiter(this, void 0, void 0, function () { 3599 return __generator(this, function (_a) { 3600 if (-1 === 3601 element_1.element.wrappers.mainWrapper.className.indexOf("single-focus")) { 3602 element_1.element.wrappers.mainWrapper.className += " single-focus"; 3603 } 3604 element_1.element.wrappers.navWrapper.className = 3605 element_1.element.wrappers.navWrapper.className.replace(" toggled-on", ""); 3606 element_1.element.wrappers.mainWrapper.className = 3607 element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", ""); 3608 return [2 /*return*/]; 3609 }); 3610 }); 3611 }, 3612 addState: function (event) { 3613 var stateObj = { foo: "bar" }; 3614 var urlParent = event.type === "info" ? "info/" : ""; 3615 var url = config_1.config.getSiteRoot() + urlParent + event.slug + "/"; 3616 history.pushState(stateObj, event.title, url); 3617 }, 3618 renderSingle: function (event) { 3619 return __awaiter(this, void 0, void 0, function () { 3620 var fullContent, content; 3621 return __generator(this, function (_a) { 3622 switch (_a.label) { 3623 case 0: 3624 fullContent = $("<div/>").append(event.content); 3625 content = '<div class="single-description">'; 3626 content += fullContent.html(); 3627 content += "</div>"; 3628 $("#single-pane-content").html(content); 3629 if (!(event.type === "info")) return [3 /*break*/, 1]; 3630 $("#single-pane-content").addClass("no-top-image"); 3631 return [3 /*break*/, 3]; 3632 case 1: 3633 exports.site.makeLargeImage(); 3634 return [4 /*yield*/, exports.site.renderHeadLineAndMeta(event)]; 3635 case 2: 3636 _a.sent(); 3637 exports.site.renderEventStatuses(event); 3638 _a.label = 3; 3639 case 3: return [2 /*return*/]; 3640 } 3641 }); 3642 }); 3643 }, 3644 loadSinglePasses: function (event) { 3645 return __awaiter(this, void 0, void 0, function () { 3646 var addPipe, selector; 3647 return __generator(this, function (_a) { 3648 addPipe = false;
3649 if (event.passes) { 3650 selector = ".single-meta .ticket"; 3651 if (event.ticket) { 3652 //selector = ".single-meta .ticket"; 3653 addPipe = true; 3654 } 3655 festivalpass_1.festivalpass.load(event.passes, selector, addPipe, [], exports.site._locale); 3656 } 3657 return [2 /*return*/]; 3658 }); 3659 }); 3660 }, 3661 loadSingle: function (postId, postSlug, type) { 3662 return __awaiter(this, void 0, void 0, function () { 3663 var event; 3664 return __generator(this, function (_a) { 3665 switch (_a.label) { 3666 case 0: 3667 console.log("loadSingle", exports.site._locale); 3668 $("#single-pane-content").html(""); 3669 event = undefined; 3670 if (!(type === "info")) return [3 /*break*/, 2]; 3671 return [4 /*yield*/, info_1.info.getSingle(postId, postSlug)]; 3672 case 1: 3673 event = (_a.sent()); 3674 return [3 /*break*/, 9]; 3675 case 2: return [4 /*yield*/, eventService_1.eventService.getSingleFromPreloaded(postId, postSlug)]; 3676 case 3: 3677 event = _a.sent(); 3678 if (!!event) return [3 /*break*/, 5]; 3679 return [4 /*yield*/, contentService_1.contentService.getSingleFromPreloaded(postId, postSlug)]; 3680 case 4: 3681 event = (_a.sent()); 3682 _a.label = 5; 3683 case 5: 3684 if (!!event) return [3 /*break*/, 7]; 3685 return [4 /*yield*/, eventService_1.eventService.getSingle(postId, postSlug)]; 3686 case 6: 3687 event = _a.sent(); 3688 _a.label = 7; 3689 case 7: 3690 if (!!event) return [3 /*break*/, 9]; 3691 return [4 /*yield*/, contentService_1.contentService.getSingle(postId, postSlug)]; 3692 case 8: 3693 event = (_a.sent()); 3694 _a.label = 9; 3695 case 9: 3696 // if(event.title==='Addis-Dakar') { 3697 // event.timeAndPlace = event.timeAndPlace.replace('00â03','00â01 & 02-03'); 3698 // } 3699 // console.log(event) 3700 return [4 /*yield*/, exports.site.renderSingle(event)]; 3701 case 10: 3702 // if(event.title==='Addis-Dakar') { 3703 // event.timeAndPlace = event.timeAndPlace.replace('00â03','00â01 & 02-03'); 3704 // } 3705 // console.log(event) 3706 _a.sent(); 3707 return [4 /*yield*/, exports.site.handleWrappers()]; 3708 case 11: 3709 _a.sent(); 3710 return [4 /*yield*/, share_1.share.init(exports.site._locale, event)]; 3711 case 12: 3712 _a.sent(); 3713 exports.site.addWpEditLink(event.id); 3714 exports.site.addState(event); 3715 // if (event.id < testContent.highestId) { 3716 // let testImage = testContent.getRandomImage(); 3717 // let image = $("#single-pane-content .wp-block-image:first img"); 3718 // image.attr("srcset", testImage); 3719 // image.attr("src", testImage); 3720 // //image.attr("width", "auto"); 3721 // image.attr("height", "auto"); 3722 // image.removeAttr("sizes"); 3723 // } 3724 return [4 /*yield*/, exports.site.loadSinglePasses(event)]; 3725 case 13: 3726 // if (event.id < testContent.highestId) { 3727 // let testImage = testContent.getRandomImage(); 3728 // let image = $("#single-pane-content .wp-block-image:first img"); 3729 // image.attr("srcset", testImage); 3730 // image.attr("src", testImage); 3731 // //image.attr("width", "auto"); 3732 // image.attr("height", "auto"); 3733 // image.removeAttr("sizes"); 3734 // } 3735 _a.sent(); 3736 return [2 /*return*/]; 3737 } 3738 }); 3739 }); 3740 }, 3741 handleClick: function (that, type) { 3742 return __awaiter(this, void 0, void 0, function () { 3743 var singlePane, postId, postSlug, postFormat; 3744 return __generator(this, function (_a) { 3745 switch (_a.label) { 3746 case 0: 3747 singlePane = document.getElementById("single-pane"); 3748 postId = $(that).data("id"); 3749 postSlug = $(that).data("slug"); 3750 postFormat = $(that).data("format"); 3751 if ("link" === postFormat) { 3752 return [2 /*return*/]; 3753 } 3754 if (!(postId !== postSlug)) return [3 /*break*/, 2]; 3755 //$("#single-pane-content").html(''); 3756 if (singlePane) { 3757 singlePane.scrollTop = 0; 3758 } 3759 return [4 /*yield*/, exports.site.loadSingle(postId, undefined, type)]; 3760 case 1: 3761 _a.sent(); 3762 _a.label = 2; 3763 case 2: return [2 /*return*/]; 3764 } 3765 }); 3766 }); 3767 }, 3768 listenBoxes: function () { 3769 console.log("site.listenBoxes"); 3770 $("a.single-box").click(function (e) { 3771 exports.site.handleClick(this); 3772 e.stopPropagation(); 3773 e.preventDefault(); 3774 }); 3775 }, 3776 checkHash: function () { 3777 if (window.location.hash) { 3778 var slug = window.location.hash.replace("#", ""); 3779 exports.site.loadSingle(undefined, slug); 3780 //Make sure logo is gone on mobile 3781 $(".site-title").addClass("scrolled"); 3782 } 3783 }, 3784 init: function (locale) { 3785 exports.site._locale = locale; 3786 //site._locale = 'en';//Local test 3787 console.log("site init", exports.site._locale); 3788 }, 3789}; 3790 3791},{"./config":4,"./contentService":5,"./element":6,"./eventService":7,"./eventType":8,"./festivalpass":10,"./info":12,"./language":13,"./share":20}],22:[function(require,module,exports){ 3792"use strict"; 3793var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3794 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3795 return new (P || (P = Promise))(function (resolve, reject) { 3796 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3797 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3798 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3799 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3800 }); 3801}; 3802var __generator = (this && this.__generator) || function (thisArg, body) { 3803 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 3804 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 3805 function verb(n) { return function (v) { return step([n, v]); }; } 3806 function step(op) { 3807 if (f) throw new TypeError("Generator is already executing."); 3808 while (g && (g = 0, op[0] && (_ = 0)), _) try {
3809 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 3810 if (y = 0, t) op = [op[0] & 2, t.value]; 3811 switch (op[0]) { 3812 case 0: case 1: t = op; break; 3813 case 4: _.label++; return { value: op[1], done: false }; 3814 case 5: _.label++; y = op[1]; op = [0]; continue; 3815 case 7: op = _.ops.pop(); _.trys.pop(); continue; 3816 default: 3817 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 3818 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 3819 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 3820 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 3821 if (t[2]) _.ops.pop(); 3822 _.trys.pop(); continue; 3823 } 3824 op = body.call(thisArg, _); 3825 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 3826 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 3827 } 3828}; 3829var __importDefault = (this && this.__importDefault) || function (mod) { 3830 return (mod && mod.__esModule) ? mod : { "default": mod }; 3831}; 3832Object.defineProperty(exports, "__esModule", { value: true }); 3833exports.ticket = void 0; 3834var dayjs_1 = __importDefault(require("dayjs")); 3835var config_1 = require("./config"); 3836var page_1 = require("./page"); 3837var festivalpass_1 = require("./festivalpass"); 3838var eventType_1 = require("./eventType"); 3839exports.ticket = { 3840 _locale: config_1.config.defaultLang, 3841 removeAfterDays: 2, 3842 renderPass: function (pass) { 3843 var template = ""; 3844 if (pass.backgroundColor) { 3845 template += "<style scoped=\"\">.ticket-box-".concat(pass.id, " { background-color: ").concat(pass.backgroundColor, "!important }</style>"); 3846 } 3847 template += "<a href=\"".concat(pass.ticket, "\" class=\"single-box ticket-box ticket-box-").concat(pass.id, " ticket-type-").concat(pass.eventType, " sticky-").concat(pass.sticky, "\" title=\"").concat(pass.title, "\" rel=\"bookmark\" target=\"_blank\"><div class=\"caption-text\">"); 3848 // if (pass.overTitle) { 3849 // template += `<p>${pass.overTitle}</p>`; 3850 // } 3851 switch (pass.eventType) { 3852 case eventType_1.EventTypes.FESTIVAL: 3853 template += eventType_1.eventType.getEventTypeDescription(pass.eventType); 3854 break; 3855 case eventType_1.EventTypes.BEYOND: 3856 template += eventType_1.eventType.getEventTypeDescription(pass.eventType); 3857 break; 3858 case eventType_1.EventTypes.FESTIVAL_AND_BEYOND: 3859 template += eventType_1.eventType.getEventTypeDescription(pass.eventType); 3860 break; 3861 default: 3862 } 3863 template += "<h2>".concat(pass.title, "</h2>"); 3864 template += '<p class="time-and-place">'; 3865 if (pass.dateFormatted) { 3866 template += "".concat(pass.dateFormatted); 3867 } 3868 if (pass.venueFormatted) { 3869 template += "<br>".concat(pass.venueFormatted); 3870 } 3871 else { 3872 template += "<br> "; 3873 } 3874 template += "</p>"; 3875 template += "</div></a>"; 3876 $("#content").append(template); 3877 }, 3878 parsePass: function (pass, locale) { 3879 exports.ticket.renderPass(pass); 3880 }, 3881 parse: function (passes, locale) { 3882 var _this = this; 3883 passes.forEach(function (pass) { 3884 if (pass.ticket !== "" && pass.ticket !== undefined) { 3885 _this.parsePass(pass, locale); 3886 } 3887 }); 3888 }, 3889 load: function (locale) { 3890 var programCategoryId = page_1.sitemap[page_1.Locales[exports.ticket._locale]].PROGRAM.category; 3891 $.get(config_1.config.getRestUrl() + 3892 "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(programCategoryId, "&&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"), function (posts) { 3893 exports.ticket.parse(posts, locale); 3894 }); 3895 }, 3896 loadTickets: function () { 3897 return __awaiter(this, void 0, void 0, function () { 3898 var programCategoryId, url; 3899 return __generator(this, function (_a) { 3900 switch (_a.label) { 3901 case 0: 3902 programCategoryId = page_1.sitemap[page_1.Locales[exports.ticket._locale]].PROGRAM.category; 3903 url = config_1.config.getRestUrl() + 3904 "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(programCategoryId, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"); 3905 console.log("loadTickets", url); 3906 return [4 /*yield*/, $.get(url)]; 3907 case 1: return [2 /*return*/, _a.sent()]; 3908 } 3909 }); 3910 }); 3911 }, 3912 init: function (locale) { 3913 return __awaiter(this, void 0, void 0, function () { 3914 var passes, postTickets, tickets; 3915 return __generator(this, function (_a) { 3916 switch (_a.label) { 3917 case 0: 3918 exports.ticket._locale = locale; 3919 return [4 /*yield*/, festivalpass_1.festivalpass.getPasses(locale)]; 3920 case 1: 3921 passes = _a.sent(); 3922 return [4 /*yield*/, festivalpass_1.festivalpass.sortByDate(passes)]; 3923 case 2: 3924 _a.sent(); 3925 return [4 /*yield*/, festivalpass_1.festivalpass.sortBySticky(passes)]; 3926 case 3: 3927 _a.sent(); 3928 return [4 /*yield*/, exports.ticket.loadTickets()]; 3929 case 4: 3930 postTickets = _a.sent(); 3931 tickets = [];
3932 return [4 /*yield*/, postTickets.forEach(function (ticket) { 3933 tickets.push(festivalpass_1.festivalpass.convert(ticket, locale)); 3934 })]; 3935 case 5: 3936 _a.sent(); 3937 passes = passes.concat(tickets); 3938 return [4 /*yield*/, festivalpass_1.festivalpass.filterOld(passes, (0, dayjs_1.default)().subtract(exports.ticket.removeAfterDays, "days").toDate())]; 3939 case 6: 3940 passes = _a.sent(); 3941 //await festivalpass.sortByDate(passes); 3942 //console.log(passes) 3943 console.log(tickets); 3944 return [4 /*yield*/, festivalpass_1.festivalpass.sortByDate(passes)]; 3945 case 7: 3946 _a.sent(); 3947 console.log(passes); 3948 return [4 /*yield*/, festivalpass_1.festivalpass.sortBySticky(passes)]; 3949 case 8: 3950 passes = _a.sent(); 3951 console.log("Sorted", passes); 3952 exports.ticket.parse(passes, locale); 3953 console.log("ticket init"); 3954 return [2 /*return*/]; 3955 } 3956 }); 3957 }); 3958 }, 3959}; 3960 3961},{"./config":4,"./eventType":8,"./festivalpass":10,"./page":16,"dayjs":25}],23:[function(require,module,exports){ 3962"use strict"; 3963Object.defineProperty(exports, "__esModule", { value: true }); 3964exports.validDate = void 0; 3965var validDate = function (date) { return !isNaN(date) && date instanceof Date; }; 3966exports.validDate = validDate; 3967 3968},{}],24:[function(require,module,exports){ 3969"use strict"; 3970var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3971 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3972 return new (P || (P = Promise))(function (resolve, reject) { 3973 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3974 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3975 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3976 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3977 }); 3978}; 3979var __generator = (this && this.__generator) || function (thisArg, body) { 3980 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 3981 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 3982 function verb(n) { return function (v) { return step([n, v]); }; } 3983 function step(op) { 3984 if (f) throw new TypeError("Generator is already executing."); 3985 while (g && (g = 0, op[0] && (_ = 0)), _) try { 3986 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 3987 if (y = 0, t) op = [op[0] & 2, t.value]; 3988 switch (op[0]) { 3989 case 0: case 1: t = op; break; 3990 case 4: _.label++; return { value: op[1], done: false }; 3991 case 5: _.label++; y = op[1]; op = [0]; continue; 3992 case 7: op = _.ops.pop(); _.trys.pop(); continue; 3993 default: 3994 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 3995 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 3996 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 3997 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 3998 if (t[2]) _.ops.pop(); 3999 _.trys.pop(); continue; 4000 } 4001 op = body.call(thisArg, _); 4002 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 4003 if (op[0] & 5) throw op[1];
4003 return { value: op[0] ? op[1] : void 0, done: true }; 4004 } 4005}; 4006Object.defineProperty(exports, "__esModule", { value: true }); 4007exports.venueService = void 0; 4008var config_1 = require("./config"); 4009var TBA = "tba"; 4010exports.venueService = { 4011 _locale: config_1.config.defaultLang, 4012 allVenues: [], 4013 getVenueOrTBA: function (post) { 4014 var _a, _b; 4015 var venue = exports.venueService.allVenues.find(function (v) { var _a; return v.id === ((_a = post.acf.scen) === null || _a === void 0 ? void 0 : _a.ID); }); 4016 if (!venue) { 4017 if ((_a = post.acf) === null || _a === void 0 ? void 0 : _a.scen) { 4018 // Fix for external events 4019 venue = { 4020 id: 0, 4021 title: (_b = post.acf["scen"]) === null || _b === void 0 ? void 0 : _b.post_title, 4022 slug: TBA, 4023 active: true, 4024 }; 4025 } 4026 venue = { 4027 id: 0, 4028 title: TBA, 4029 slug: TBA, 4030 active: true, 4031 }; 4032 } 4033 return venue; 4034 }, 4035 convert: function (post, locale) { 4036 var event = { 4037 id: post.id, 4038 slug: post.slug, 4039 title: post.title.rendered, 4040 content: post.content["rendered"], 4041 map: post.acf.karta, 4042 address: post.acf.adress || "", 4043 logo: post.acf.logotyp, 4044 color: post.acf.farg, 4045 type: post.type, 4046 active: post.acf.aktiv, 4047 //viewOrder: post.acf.ordning, 4048 }; 4049 return event; 4050 }, 4051 append: function (content, venue) { 4052 var _a; 4053 console.log("append", venue); 4054 var template = "<p><a href=\"".concat(venue.map, "\" data-id=\"").concat(venue.id, "\" data-slug=\"").concat(venue.slug, "\" title=\"").concat(venue.title, "\" rel=\"bookmark\">\n ").concat(venue.title, "\n </a><br>\n ").concat((_a = venue.address) === null || _a === void 0 ? void 0 : _a.replace("\n", "<br>"), "</p>"); 4055 content.content += template; 4056 //$(`#content`).append(template); 4057 }, 4058 filterActive: function (venues) { 4059 return venues.filter(function (venue) { 4060 return venue.active; 4061 }); 4062 }, 4063 load: function () { 4064 return __awaiter(this, void 0, void 0, function () { 4065 return __generator(this, function (_a) { 4066 switch (_a.label) { 4067 case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() + 4068 "scen?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=title&order=asc"))]; 4069 case 1: return [2 /*return*/, _a.sent()]; 4070 } 4071 }); 4072 }); 4073 }, 4074 loadSingle: function (postId, postSlug) { 4075 return __awaiter(this, void 0, void 0, function () { 4076 var query, result; 4077 return __generator(this, function (_a) { 4078 switch (_a.label) { 4079 case 0: 4080 query = ""; 4081 if (postId !== undefined) { 4082 query += postId; 4083 } 4084 else { 4085 query += "?slug=" + postSlug; 4086 } 4087 return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "scen/" + query)]; 4088 case 1: 4089 result = _a.sent(); 4090 if (result.length === 1) { 4091 // By slug returns array 4092 return [2 /*return*/, result[0]]; 4093 } 4094 return [2 /*return*/, result]; 4095 } 4096 }); 4097 }); 4098 }, 4099 getSingle: function (postId, postSlug) { 4100 return __awaiter(this, void 0, void 0, function () { 4101 var _a, _b; 4102 return __generator(this, function (_c) { 4103 switch (_c.label) { 4104 case 0: 4105 console.log("venueService.getSingle ".concat(postId, " ").concat(postSlug)); 4106 _b = (_a = exports.venueService).convert; 4107 return [4 /*yield*/, exports.venueService.loadSingle(postId, postSlug)
vendor: 8,147 bytes, lines 4107-4169
4107]; 4108 case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.venueService._locale])]; 4109 } 4110 }); 4111 }); 4112 }, 4113 getSingleFromPreloaded: function (postId, postSlug) { 4114 return __awaiter(this, void 0, void 0, function () { 4115 var query; 4116 return __generator(this, function (_a) { 4117 console.log("venueService.allContents.length", exports.venueService.allVenues.length); 4118 query = function (event) { return event.id === postId; }; 4119 if (postSlug !== undefined) { 4120 query = function (event) { return event.id === postId; }; 4121 } 4122 return [2 /*return*/, exports.venueService.allVenues.find(query)]; 4123 }); 4124 }); 4125 }, 4126 get: function (locale) { 4127 return __awaiter(this, void 0, void 0, function () { 4128 var posts, contents; 4129 return __generator(this, function (_a) { 4130 switch (_a.label) { 4131 case 0: 4132 if (exports.venueService.allVenues.length > 0) { 4133 return [2 /*return*/, exports.venueService.allVenues]; 4134 } 4135 return [4 /*yield*/, exports.venueService.load()]; 4136 case 1: 4137 posts = _a.sent(); 4138 contents = []; 4139 posts.forEach(function (post) { 4140 contents.push(exports.venueService.convert(post, locale)); 4141 }); 4142 //contents = venues.sortSticky(contents); 4143 contents = exports.venueService.filterActive(contents); 4144 return [2 /*return*/, contents]; 4145 } 4146 }); 4147 }); 4148 }, 4149 init: function (locale) { 4150 return __awaiter(this, void 0, void 0, function () { 4151 var _a; 4152 return __generator(this, function (_b) { 4153 switch (_b.label) { 4154 case 0: 4155 exports.venueService._locale = locale; 4156 _a = exports.venueService; 4157 return [4 /*yield*/, exports.venueService.get(locale)]; 4158 case 1: 4159 _a.allVenues = _b.sent(); 4160 console.log("venueService init", exports.venueService._locale); 4161 return [2 /*return*/]; 4162 } 4163 }); 4164 }); 4165 }, 4166}; 4167 4168},{"./config":4}],25:[function(require,module,exports){ 4169!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h="set"+(this.$u?"UTC":""),l=(n={},n[a]=h+"Date",n[d]=h+"Date",n[f]=h+"Month",n[c]=h+"FullYear",n[u]=h+"Hours",n[s]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,"0")},d=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,"0"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,"0"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(":","")}))}
4169,m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",f],["$y",c],["$D",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w})); 4170},{}],26:[function(require,module,exports){ 4171!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sv=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d})); 4172},{"dayjs":25}],27:[function(require,module,exports){ 4173!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isBetween=i()}(this,(function(){"use strict";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r="("===(f=f||"()")[0],u=")"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}})); 4174},{}],28:[function(require,module,exports){ 4175!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrAfter=t()}(this,(function(){"use strict";return function(e,t){t.prototype.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)}}})); 4176},{}],29:[function(require,module,exports){ 4177!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){"use strict";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}})); 4178},{}],30:[function(require,module,exports){ 4179!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t="YYYY-MM-DDTHH:mm:ssZ");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}})); 4180},{}]},{},[1]) 4181//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvdHMvc3JjL21haW4udHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvYnV0dG9uLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2NhbGVuZGFyLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2NvbmZpZy50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9jb250ZW50U2VydmljZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9lbGVtZW50LnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2V2ZW50U2VydmljZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9ldmVudFR5cGUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvZXh0ZXJuYWxFdmVudFNlcnZpY2UudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvZmVzdGl2YWxwYXNzLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2hpc3RvcmljYWwudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvaW5mby50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9sYW5ndWFnZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9sb2dvLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL25ld3MudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvcGFnZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9wb2RzLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL3Byb2dyYW0udHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2NoZWR1bGUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2hhcmUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2l0ZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy90aWNrZXQudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvdmFsaWREYXRlLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL3ZlbnVlU2VydmljZS50cyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3N2LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9sb2NhbGl6ZWRGb3JtYXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQSwyQ0FBMEM7QUFDMUMsdUNBQWdGO0FBQ2hGLHVDQUFzQztBQUN0Qyx1Q0FBc0M7QUFDdEMsMkNBQTBDO0FBQzFDLHVDQUFzQztBQUN0Qyw2Q0FBNEM7QU
4181FDNUMsK0NBQThDO0FBQzlDLDJDQUEwQztBQUMxQywrQ0FBOEM7QUFDOUMsdUNBQXNDO0FBQ3RDLHVDQUFzQztBQUN0QywyREFBMEQ7QUFDMUQsdURBQXNEO0FBQ3RELGlEQUFnRDtBQUVoRCxJQUFNLGVBQWUsR0FBRyxDQUFDLFlBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0QyxJQUFJLE1BQU0sR0FBRztJQUNULFdBQVcsRUFBRSxjQUFPLENBQUMsY0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUk7SUFDckMsSUFBSSxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozs0QkFDaEMscUJBQU0sMkJBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUEvQixTQUErQixDQUFDO3dCQUNoQyxxQkFBTSxXQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBdkIsU0FBdUIsQ0FBQzt3QkFFcEIsUUFBUSxHQUFHLE1BQU0sS0FBSyxjQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFdkMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDeEQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUVmLHFCQUFNLFdBQUksQ0FBQyxhQUFhLENBQ3JDLE9BQU8sRUFDUCxPQUFPLEVBQ1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QUUsS0FBSyxNQUFNLEVBQW5CLENBQW1CLENBQUM7aUJBQzVEO2dCQUNELHNCQUFPLG9CQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQzs7O0tBQzdDO0lBQ0QsR0FBRyxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozt3QkFDL0IsSUFBSSxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNuQyxzQkFBTyxvQkFBWSxDQUFDLFNBQVMsRUFBQzt5QkFDakM7d0JBQ1cscUJBQU0sb0JBQVksQ0FBQyxJQUFJLEVBQUUsRUFBQTs7d0JBQWpDLEtB
4181QUssR0FBRyxTQUF5Qjt3QkFDakMsUUFBUSxHQUF1QixFQUFFLENBQUM7d0JBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFTOzRCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0RCxDQUFDLENBQUMsQ0FBQzt3QkFDSCx5Q0FBeUM7d0JBQ3pDLFFBQVEsR0FBRyxvQkFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDL0Msc0JBQU8sUUFBUSxFQUFDOzs7O0tBQ25CO0lBQ0QsSUFBSSxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozt3QkFDaEMsb0JBQVksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO3dCQUM5QixLQUFBLG9CQUFZLENBQUE7d0JBQWEscUJBQU0sb0JBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUF2RCxHQUFhLFNBQVMsR0FBRyxTQUE4QixDQUFDO3dCQUV4RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLG9CQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7O0tBQzFEO0NBQ0osQ0FBQzs7O0FDM0lGOztBQ0FBOztBQ0FBOztBQ0FBOztBQ0FBOztBQ0FBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vbW9kdWxlcy9jb25maWdcIjtcbmltcG9ydCB7IHBhZ2UsIFBhZ2VzLCBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9tb2R1bGVzL3BhZ2VcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9tb2R1bGVzL3NpdGVcIjtcbmltcG9ydCB7IGxvZ28gfSBmcm9tIFwiLi9tb2R1bGVzL2xvZ29cIjtcbmltcG9ydCB7IGJ1dHRvbiB9IGZyb20gXCIuL21vZHVsZXMvYnV0dG9uXCI7XG5pbXBvcnQgeyBuZXdzIH0gZnJvbSBcIi4vbW9kdWxlcy9uZXdzXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcIi4vbW9kdWxlcy9wcm9ncmFtXCI7XG5pbXBvcnQgeyBjYWxlbmRhciB9IGZyb20gXCIuL21vZHVsZXMvY2FsZW5kYXJcIjtcbmltcG9ydCB7IHRpY2tldCB9IGZyb20gXCIuL21vZHVsZXMvdGlja2V0XCI7XG5pbXBvcnQgeyBzY2hlZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvc2NoZWR1bGVcIjtcbmltcG9ydCB7IGluZm8gfSBmcm9tIFwiLi9tb2R1bGVzL2luZm9cIjtcbmltcG9ydCB7IHBvZHMgfSBmcm9tIFwiLi9tb2R1bGVzL3BvZHNcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50U2VydmljZVwiO1xuaW1wb3J0IHsgZXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kdWxlcy9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGV2ZW50VHlwZSB9IGZyb20gXCIuL21vZHVsZXMvZXZlbnRUeXBlXCI7XG5cbmNvbnN0IHBhZ2VzV3BSZW5kZXJlZCA9IFtQYWdlcy5QUkVTU107XG5cbnZhciBzeXN0ZW0gPSB7XG4gICAgY3VycmVudFBhZ2U6IHNpdGVtYXBbTG9jYWxlcy5zdl0uTkVXUyxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgYXdhaXQgZXZlbnRTZXJ2aWNlLmluaXQobG9jYWxlKTtcbiAgICAgICAgYXdhaXQgc2l0ZS5pbml0KGxvY2FsZSk7XG5cbiAgICAgICAgbGV0IHVybEluZGV4ID0gbG9jYWxlID09PSBMb2NhbGVzLmVuID8gMyA6IDI7XG5cbiAgICAgICAgY29uc3QgcGFnZVVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIilbdXJsSW5kZXhdO1xuICAgICAgICBjb25zdCBzdWJQYWdlID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVt1cmxJbmRleCArIDFdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXCIsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGFnZVVybFwiLCBwYWdlVXJsKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdWJQYWdlXCIsIHN1YlBhZ2UpO1xuXG4gICAgICAgIGNvbnN0IHNpdGVQYWdlID0gYXdhaXQgcGFnZS5maW5kUGFnZUJ5VXJsKFxuICAgICAgICAgICAgcGFnZVVybCxcbiAgICAgICAgICAgIHN1YlBhZ2UsXG4gICAgICAgICAgICBMb2NhbGVzW2xvY2FsZSBhcyBMb2NhbGVzXVxuICAgICAgICApO1xuICAgICAgICBzeXN0ZW0uY3VycmVudFBhZ2UgPSBzaXRlUGFnZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzeXN0ZW0uY3VycmVudFBhZ2U6IFwiLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuXG4gICAgICAgIGlmIChwYWdlc1dwUmVuZGVyZWQuaW5jbHVkZXModGhpcy5jdXJyZW50UGFnZT8ucGFnZSkpIHtcbiAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLmluaXQobG9jYWxlLCBzaXRlUGFnZS5jYXRlZ29yeSk7XG4gICAgICAgICAgICBzaXRlLmxpc3RlbkJveGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRQYWdlTW9kdWxlcyhsb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2l0ZS5jaGVja0hhc2goKTtcblxuICAgICAgICBsb2dvLmluaXQoKTtcbiAgICAgICAgYnV0dG9uLmluaXQoKTtcbiAgICAgICAgZXZlbnRUeXBlLmluaXQobG9jYWxlKTtcbiAgICB9LFxuICAgIGluaXRQYWdlTW9kdWxlczogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghc3lzdGVtLmN1cnJlbnRQYWdlPy5wYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgI
4181H1cblxuICAgICAgICBpZiAoc3lzdGVtLmN1cnJlbnRQYWdlLnBhZ2UgPT09IFBhZ2VzLk5FV1MpIHtcbiAgICAgICAgICAgIG5ld3MuaW5pdChsb2NhbGUsIHN5c3RlbS5jdXJyZW50UGFnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3lzdGVtLmN1cnJlbnRQYWdlLnBhZ2UgPT09IFBhZ2VzLlBST0dSQU0pIHtcbiAgICAgICAgICAgIHByb2dyYW0uaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5TQ0hFRFVMRSkge1xuICAgICAgICAgICAgc2NoZWR1bGUuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5DQUxFTkRBUikge1xuICAgICAgICAgICAgY2FsZW5kYXIuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5USUNLRVRTKSB7XG4gICAgICAgICAgICB0aWNrZXQuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5JTkZPKSB7XG4gICAgICAgICAgICBpbmZvLmluaXQobG9jYWxlLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5QT0RDQVNUKSB7XG4gICAgICAgICAgICBwb2RzLmluaXQobG9jYWxlLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRMb2NhbGVGcm9tSHRtbDogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbG9jYWxlT2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdO1xuICAgICAgICBsZXQgbG9jYWxlID0gY29uZmlnLmRlZmF1bHRMYW5nO1xuICAgICAgICBpZiAobG9jYWxlT2JqZWN0KSB7XG4gICAgICAgICAgICBsb2NhbGUgPVxuICAgICAgICAgICAgICAgIGxvY2FsZU9iamVjdC5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpPy5zdWJzdHJpbmcoMCwgMikgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuZGVmYXVsdExhbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICB9LFxufTtcblxuLypcbiAqIEdsb2JhbFxuICovXG5leHBvcnQgbGV0IGxvY2FsZSA9IFwic3ZcIjtcblxuJChkb2N1bWVudCkucmVhZHkoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbGUgPSBhd2FpdCBzeXN0ZW0uZ2V0TG9jYWxlRnJvbUh0bWwoKTtcbiAgICBhd2FpdCBjb25maWcuY29uZmlndXJlTG9jYWxlKGxvY2FsZSk7XG5cbiAgICBhd2FpdCBzeXN0ZW0uaW5pdChsb2NhbGUpO1xufSk7IiwiaW1wb3J0IHsgZWxlbWVudCB9IGZyb20gJy4vZWxlbWVudCc7XG5cbnR5cGUgSW5pdGlhbERhdGEgPSB7XG4gICAgb3ZlcnZpZXdVcmw6IHN0cmluZztcbn07XG5cbmNvbnN0IGluaXRpYWxEYXRhID0gKHdpbmRvdyBhcyBhbnkpLl9fSU5JVElBTF9EQVRBX18gYXMgSW5pdGlhbERhdGE7XG5cbmV4cG9ydCBjb25zdCBidXR0b24gPSB7XG4gICAgbGlzdGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uVG9nZ2xlKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uVG9nZ2xlLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAtMSAhPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyPy5jbGFzc05hbWUuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidG9nZ2xlZC1vblwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm5hdldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdG9nZ2xlZC1vblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdG9nZ2xlZC1vblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSArPSBcIiB0b2dnbGVkLW9uXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lICs9IFwiIHRvZ2dsZWQtb25cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bGwgIT09IGVsZW1lbnQuYnV0dG9ucy5idXR0b25Ub2dnbGVNb2JpbGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25Ub2dnbGVNb2JpbGUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIC0xICE9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLmluZGV4T2YoXCJ0b2dnbGVkLW9uXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgI
4181H0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUgKz0gXCIgdG9nZ2xlZC1vblwiO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSArPSBcIiB0b2dnbGVkLW9uXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaW5nbGVQYW5lKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaW5nbGVQYW5lLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiB0b2dnbGVkLW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgc2luZ2xlLWZvY3VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgc2hhcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZU9iaiA9IHsgZm9vOiBcImJhclwiIH07XG4gICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGVPYmosIFwiXCIsIGluaXRpYWxEYXRhLm92ZXJ2aWV3VXJsKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAobnVsbCAhPT0gZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlKSB7XG4gICAgICAgIC8vICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoLTEgPT09IGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLmluZGV4T2YoJ3NoYXJlJykpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gJyBzaGFyZSc7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaGFyZSkge1xuICAgICAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvbkNsb3NlU2hhcmUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBzaGFyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVVybC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgIFwiY2xpY2tcIixcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
4181XIgdGV4dCA9IGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gKioqIFRoaXMgc3R5bGluZyBpcyBhbiBleHRyYSBzdGVwIHdoaWNoIGlzIGxpa2VseSBub3QgcmVxdWlyZWQuICoqKlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBXaHkgaXMgaXQgaGVyZT8gVG8gZW5zdXJlOlxuICAgICAgICAgICAgICAgICAgICAvLyAxLiB0aGUgZWxlbWVudCBpcyBhYmxlIHRvIGhhdmUgZm9jdXMgYW5kIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gaWYgZWxlbWVudCB3YXMgdG8gZmxhc2ggcmVuZGVyIGl0IGhhcyBtaW5pbWFsIHZpc3VhbCBpbXBhY3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIDMuIGxlc3MgZmxha3luZXNzIHdpdGggc2VsZWN0aW9uIGFuZCBjb3B5aW5nIHdoaWNoICoqbWlnaHQqKiBvY2N1ciBpZlxuICAgICAgICAgICAgICAgICAgICAvLyAgICB0aGUgdGV4dGFyZWEgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxpa2VsaWhvb2QgaXMgdGhlIGVsZW1lbnQgd29uJ3QgZXZlbiByZW5kZXIsIG5vdCBldmVuIGEgZmxhc2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHNvbWUgb2YgdGhlc2UgYXJlIGp1c3QgcHJlY2F1dGlvbnMuIEhvd2V2ZXIgaW4gSUUgdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgdmlzaWJsZSB3aGlsc3QgdGhlIHBvcHVwIGJveCBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gZm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB3ZWIgcGFnZSB0byBjb3B5IHRvIHRoZSBjbGlwYm9hcmQuXG4gICAgICAgICAgICAgICAgICAgIC8vXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUGxhY2UgaW4gdG9wLWxlZnQgY29ybmVyIG9mIHNjcmVlbiByZWdhcmRsZXNzIG9mIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5sZWZ0ID0gXCIwXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGl0IGhhcyBhIHNtYWxsIHdpZHRoIGFuZCBoZWlnaHQuIFNldHRpbmcgdG8gMXB4IC8gMWVtXG4gICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3Qgd29yayBhcyB0aGlzIGdpdmVzIGEgbmVnYXRpdmUgdy9oIG9uIHNvbWUgYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLndpZHRoID0gXCIyZW1cIjtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gXCIyZW1cIjtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHBhZGRpbmcsIHJlZHVjaW5nIHRoZSBzaXplIGlmIGl0IGRvZXMgZmxhc2ggcmVuZGVyLlxuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5wYWRkaW5nID0gXCIwXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGJvcmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLmJveFNoYWRvdyA9IFwibm9uZVwiO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIGZsYXNoIG9mIHdoaXRlIGJveCBpZiByZW5kZXJlZCBmb3IgYW55IHJlYXNvbi5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUuYmFja2dyb3VuZCA9IFwidHJhbnNwYXJlbnRcIjtcblxuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IHRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IHN1Y2Nlc3NmdWwgPyBcInN1Y2Nlc3NmdWxcIiA6IFwidW5zdWNjZXNzZnVsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvcHlpbmcgdGV4dCBjb21tYW5kIHdhcyBcIiArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJPb3BzLCB1bmFibGUgdG8gY29weVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaW5uZXJIVE1MID0gXCJVcmwgKENvcGllZClcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiYnV0dG9uIGluaXRcIik7XG5cbiAgICAgICAgYnV0dG9uLmxpc3RlbigpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZSB9IGZyb20gJy4vc2l0ZSc7XG5pbXBvcnQgeyBmZXN0aXZhbHBhc3MsIENsYW5kZXN0aW5vUGFzcyB9IGZyb20gXCIuL2Zlc3RpdmFscGFzc1wiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tICcuL2xhbmd1YWdlJztcbmltcG9ydCB7
4181IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCwgU29ydE9yZGVyIH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBleHRlcm5hbEV2ZW50U2VydmljZSB9IGZyb20gXCIuL2V4dGVybmFsRXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBldmVudFR5cGUsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IGNhbGVuZGFyID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBhbGxQYXNzZXM6IFtdIGFzIENsYW5kZXN0aW5vUGFzc1tdLFxuICAgIHJlbmRlck1vbnRoOiBmdW5jdGlvbiAocG9zdERhdGU6IGRheWpzLkRheWpzLCBhZGROb3c6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IG5vd1N0cmluZyA9IGFkZE5vdyA/ICdpZD1cIm5vd1wiICcgOiBcIlwiO1xuICAgICAgICAkKFwiLmVudHJ5LWNvbnRlbnRcIikuYXBwZW5kKFxuICAgICAgICAgICAgYDxoMiAke25vd1N0cmluZ31jbGFzcz1cIm1vbnRoLWhlYWRlclwiPiR7cG9zdERhdGUuZm9ybWF0KFxuICAgICAgICAgICAgICAgIFwiTU1NTSBZWVlZXCJcbiAgICAgICAgICAgICl9PC9oMj5gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJDYWxlbmRhckJveDogZnVuY3Rpb24gKHBvc3RZZWFyOiBudW1iZXIsIHBvc3RNb250aDogbnVtYmVyKSB7XG4gICAgICAgICQoXCIuZW50cnktY29udGVudFwiKS5hcHBlbmQoXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWJveC0ke3Bvc3RZZWFyfS0ke3Bvc3RNb250aH1cIj5gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpc0RhdGVCZWZvcmVUb2RheShkYXRlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBuZXcgRGF0ZShkYXRlLnRvRGF0ZVN0cmluZygpKSA8IG5ldyBEYXRlKG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpXG4gICAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJQb3N0OiBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50WWVhcjogbnVtYmVyLFxuICAgICAgICBldmVudE1vbnRoOiBudW1iZXIsXG4gICAgICAgIGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50XG4gICAgKSB7XG4gICAgICAgIGxldCBhcmNoaXZlQ2xhc3MgPSBjYWxlbmRhci5pc0RhdGVCZWZvcmVUb2RheShldmVudC5zdGFydFRpbWUpXG4gICAgICAgICAgICA/IFwiIGFyY2hpdmVcIlxuICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSBgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWl0ZW0gJHtcbiAgICAgICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgfHwgXCJcIlxuICAgICAgICB9JHthcmNoaXZlQ2xhc3N9XCIgZGF0YS1pZD1cIiR7ZXZlbnQuaWR9XCIgZGF0YS1saW5rPVwiJHtcbiAgICAgICAgICAgIGV2ZW50LmxpbmtcbiAgICAgICAgfVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjoke2V2ZW50LmJhY2tncm91bmRDb2xvcn1cIj48ZGl2PmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50VHlwZShldmVudCk7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYDxoMj4ke2V2ZW50LnRpdGxlfTwvaDI+YDtcblxuICAgICAgICB0ZW1wbGF0ZSArPSAnPHAgY2xhc3M9XCJ0aW1lLWFuZC1wbGFjZVwiPic7XG4gICAgICAgIHRlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvcD5cIjtcblxuICAgICAgICB0ZW1wbGF0ZSArPSBgPHAgY2xhc3M9XCJ0aWNrZXRcIj5gO1xuICAgICAgICBpZiAoZXZlbnQudGlja2V0KSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGEgaHJlZj1cIiR7XG4gICAgICAgICAgICAgICAgZXZlbnQudGlja2V0XG4gICAgICAgICAgICB9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtsYW5ndWFnZS5nZXQoc2l0ZS5fbG9jYWxlLCBcIkJpbGpldHRQbFwiKX08
4181L2E+YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9wPmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYDwvZGl2PjwvZGl2PmA7XG5cbiAgICAgICAgJChgLmNhbGVuZGFyLWJveC0ke2V2ZW50WWVhcn0tJHtldmVudE1vbnRofWApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBwYXJzZVBvc3Q6IGZ1bmN0aW9uIChcbiAgICAgICAgY3VycmVudFllYXI6IG51bWJlcixcbiAgICAgICAgY3VycmVudE1vbnRoOiBudW1iZXIsXG4gICAgICAgIGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50XG4gICAgKSB7XG4gICAgICAgIHZhciBldmVudFllYXIgPSBkYXlqcyhldmVudC5zdGFydERhdGUpLnllYXIoKTtcbiAgICAgICAgdmFyIGV2ZW50TW9udGggPSBkYXlqcyhldmVudC5zdGFydERhdGUpLm1vbnRoKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQuc3RhcnREYXRlLCBldmVudFllYXIsIGV2ZW50TW9udGgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjdXJyZW50WWVhciA9PT0gLTEgfHxcbiAgICAgICAgICAgIGN1cnJlbnRZZWFyICE9PSBldmVudFllYXIgfHxcbiAgICAgICAgICAgIGN1cnJlbnRNb250aCA9PT0gLTEgfHxcbiAgICAgICAgICAgIGN1cnJlbnRNb250aCAhPT0gZXZlbnRNb250aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBub3cgPSBkYXlqcygpO1xuICAgICAgICAgICAgbGV0IGFkZE5vdyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgICAgXCJldmVudFllYXJcIixcbiAgICAgICAgICAgIC8vICAgICBldmVudFllYXIsXG4gICAgICAgICAgICAvLyAgICAgXCJldmVudE1vbnRoXCIsXG4gICAgICAgICAgICAvLyAgICAgZXZlbnRNb250aCxcbiAgICAgICAgICAgIC8vICAgICBcIm5vdy5tb250aCgpKzFcIixcbiAgICAgICAgICAgIC8vICAgICBub3cubW9udGgoKSArIDFcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWFkZE5vdyAmJlxuICAgICAgICAgICAgICAgIG5vdy55ZWFyKCkgPT09IGV2ZW50WWVhciAmJlxuICAgICAgICAgICAgICAgIChub3cubW9udGgoKSArIDEgPT09IGV2ZW50TW9udGggfHxcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoKCkgKyAxID49IGV2ZW50TW9udGgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZE5vd1wiLCBub3cuZm9ybWF0KFwiTU1NTSBZWVlZXCIpKTtcbiAgICAgICAgICAgICAgICBhZGROb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsZW5kYXIucmVuZGVyTW9udGgoZGF5anMoZXZlbnQuc3RhcnREYXRlKSwgYWRkTm93KTtcbiAgICAgICAgICAgIGNhbGVuZGFyLnJlbmRlckNhbGVuZGFyQm94KGV2ZW50WWVhciwgZXZlbnRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsZW5kYXIucmVuZGVyUG9zdChldmVudFllYXIsIGV2ZW50TW9udGgsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHsgZXZlbnRZZWFyLCBldmVudE1vbnRoIH07XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGxldCBjdXJyZW50WWVhcjogbnVtYmVyID0gLTE7XG4gICAgICAgIGxldCBjdXJyZW50TW9udGg6IG51bWJlciA9IC0xO1xuICAgICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5zdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnREYXRlID0gY2FsZW5kYXIucGFyc2VQb3N0KFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WWVhcixcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vbnRoLFxuICAgICAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY3VycmVudFllYXIgPSBldmVudERhdGUuZXZlbnRZZWFyO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRNb250aCA9IGV2ZW50RGF0ZS5ldmVudE1vbnRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBhcnNlRmVzdGl2YWxwYXNzZXM6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQucGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFkZFBpcGUgPSBldmVudC50aWNrZXQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gYFtkYXRhLWlkPVwiJHtldmVudC5pZH1cIl0gLnRpY2tldGA7XG4gICAgICAgICAgICAgICAgZmVzdGl2YWxwYXNzLmxvYWQoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnBhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGFkZFBpcGUsXG4gICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmFsbFBhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAoZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNhbGVuZGFyLnBhcnNlKGV2ZW50cyk7XG4gICAgICAgIGNhbGVuZGFyLnBhcnNlRmVzdGl2YWxwYXNzZXMoZXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjYWxlbmRhci5saXN0ZW5Cb3hlcygpO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJjYWxlbmRhciBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImRpdi5jYWxlbmRhci1pdGVtXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcImV4dGVybmFsXCIpKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5saW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGFwcGVuZENvbnRlbnQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSkge1xuICAgICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZXZlbn
4181RTZXJ2aWNlLmFsbEV2ZW50cy5maW5kKChlKSA9PiBlLmlkID09PSBldmVudC5pZCkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5maW5kKChlKSA9PiBlLnNsdWcgPT09IGV2ZW50LnNsdWcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjYWxlbmRhci5hbGxFdmVudHMucHVzaChldmVudCBhcyBDbGFuZGVzdGlub0V2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudCBleGlzdHMhXCIsIGV2ZW50LnRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGVuZGFyLmFsbEV2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0KFxuICAgICAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzLFxuICAgICAgICAgICAgU29ydE9yZGVyLkRFU0NcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGNoZWNrSGFzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImhhc2hcIiwgd2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKFwiI1wiLCBcIlwiKTtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJoYXNoXCIgKyB0YXJnZXQpO1xuICAgICAgICAgICAgLy9sb2NhdGlvbi5oYXNoID0gXCIjXCIgKyB0YXJnZXQ7XG5cbiAgICAgICAgICAgIHZhciBlbGVtZW50X3RvX3Njcm9sbF90byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7XG4gICAgICAgICAgICBlbGVtZW50X3RvX3Njcm9sbF90by5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgJChcIi5zaXRlLXRpdGxlXCIpLmFkZENsYXNzKFwic2Nyb2xsZWRcIik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBjYWxlbmRhci5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBjYWxlbmRhci5hbGxQYXNzZXMgPSBhd2FpdCBmZXN0aXZhbHBhc3MuZ2V0UGFzc2VzKGxvY2FsZSk7XG4gICAgICAgIGNhbGVuZGFyLmFsbEV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXQobG9jYWxlKTtcbiAgICAgICAgY2FsZW5kYXIuYXBwZW5kQ29udGVudChhd2FpdCBleHRlcm5hbEV2ZW50U2VydmljZS5nZXRGb3JTb3JjZXMobG9jYWxlKSk7XG5cbiAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLmZpbHRlckhhc1ZhbGlkU3RhcnRUaW1lKFxuICAgICAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzXG4gICAgICAgICk7XG5cbiAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjYWxlbmRhci5hbGxFdmVudHMsXG4gICAgICAgICAgICBTb3J0T3JkZXIuREVTQ1xuICAgICAgICApO1xuXG4gICAgICAgIGNhbGVuZGFyLmxvYWQoY2FsZW5kYXIuYWxsRXZlbnRzLCBsb2NhbGUpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsZW5kYXIuY2hlY2tIYXNoKCk7XG4gICAgICAgIH0sIDUwKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImNhbGVuZGFyIGluaXRcIiwgY2FsZW5kYXIuX2xvY2FsZSk7XG4gICAgfSxcbn07IiwiaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGxvY2FsaXplZEZvcm1hdCBmcm9tIFwiZGF5anMvcGx1Z2luL2xvY2FsaXplZEZvcm1hdFwiO1xuaW1wb3J0IFwiZGF5anMvbG9jYWxlL3N2XCI7XG4vL2ltcG9ydCAnZGF5anMvbG9jYWxlL2VuJztcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgICBzaXRlRm9sZGVyOiBcIi8yMDI2L1wiLFxuICAgIHNpdGVVcmw6IFwiaHR0cHM6Ly9jbGFuZGVzdGlub2Zlc3RpdmFsLm9yZ1wiLFxuICAgIGRlZmF1bHRMYW5nOiBcInN2XCIsXG4gICAgcGFnZVNpemU6IDEwMCxcbiAgICBlYXJsaWVzdEV2ZW50SG91cjogOCxcbiAgICBkZWZhdWx0Q29sb3I6IFwiI2ZmNGIzN1wiLFxuICAgIGdldFNpdGVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAkKFwiaHRtbFwiKS5hdHRyKFwibGFuZ1wiKSA9PT0gXCJzdi1TRVwiXG4gICAgICAgICAgICA/IGNvbmZpZy5zaXRlRm9sZGVyXG4gICAgICAgICAgICA6IGNvbmZpZy5zaXRlRm9sZGVyICsgXCJlbi9cIjtcbiAgICB9LFxuICAgIGdldFJlc3RVcmw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l0ZVJvb3QoKSArIFwid3AtanNvbi93cC92Mi9cIjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyZUxvY2FsZTogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGxvY2FsZTpcIiwgbG9jYWxlKTtcbiAgICAgICAgZGF5anMubG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChsb2NhbGl6ZWRGb3JtYXQpO1xuICAgIH0sXG4gICAgZXh0ZXJuYWxFdmVudFNvdXJjZXM6IFtcbiAgICAgICAgXCJodHRwczovL2NsYW5kZXN0aW5vaW5zdGl0dXQub3JnL3dwLWpzb24vd3AvdjIvcG9zdHMvP3Blcl9wYWdlPTMwMCZjYXRlZ29yaWVzPTEmZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NcIixcbiAgICAgICAgXCJodHRwczovL2NsYW5kZXN0aW5vZmVzdGl2YWwub3JnLzIwMjUvd3AtanNvbi93cC92Mi9wb3N0cy8/cGVyX3BhZ2U9MTAwJmNhdGVnb3JpZXM9MTEmZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NcIixcbiAgICBdLFxufTtcbiIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vQ29udGVudCB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBsYW5rPzogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjYXRlZ29yaWVzOiBudW1iZXJbXTtcbiAgICBzdGlja3k6IGJvb2xlYW47XG4gICAgZGF0ZTogRGF0ZTtcbiAgICB0eX
4181BlOiBzdHJpbmc7XG4gICAgZmVhdHVyZWRJbWFnZT86IHN0cmluZztcbiAgICBmZWF0dXJlZEltYWdlSGVpZ2h0PzogbnVtYmVyO1xuICAgIGZlYXR1cmVkSW1hZ2VXaWR0aD86IG51bWJlcjtcbiAgICBleHRyYUNzc0NsYXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgY29udGVudFNlcnZpY2UgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbENvbnRlbnRzOiBbXSBhcyBDbGFuZGVzdGlub0NvbnRlbnRbXSxcbiAgICBicmVha0xpbmVzOiBmdW5jdGlvbiAodGl0bGU6IHN0cmluZykge1xuICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoXCImbHQ7d2JyIC8+XCIsIFwiPHdiciAvPlwiKTtcbiAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKFwiJmx0O2JyIC8+XCIsIFwiPGJyIC8+XCIpO1xuICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoXCImbHQ7YnI+XCIsIFwiPGJyIC8+XCIpO1xuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSxcbiAgICBzdHJpcFRhZ3M6IGZ1bmN0aW9uICh0aXRsZTogc3RyaW5nKSB7XG4gICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShcIjx3YnIgLz5cIiwgXCJcIik7XG4gICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShcIjxiciAvPlwiLCBcIlwiKTtcbiAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKFwiPGJyIC8+XCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiAocG9zdDogYW55LCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBsZXQgZXZlbnQ6IENsYW5kZXN0aW5vQ29udGVudCA9IHtcbiAgICAgICAgICAgIGlkOiBwb3N0LmlkLFxuICAgICAgICAgICAgc2x1ZzogcG9zdC5zbHVnLFxuICAgICAgICAgICAgdGl0bGU6IGNvbnRlbnRTZXJ2aWNlLmJyZWFrTGluZXMocG9zdC50aXRsZS5yZW5kZXJlZCksXG4gICAgICAgICAgICBsYW5rOiBwb3N0LmFjZi5sYW5rLFxuICAgICAgICAgICAgY29udGVudDogcG9zdC5jb250ZW50W1wicmVuZGVyZWRcIl0sXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBwb3N0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgICBzdGlja3k6IHBvc3Quc3RpY2t5LFxuICAgICAgICAgICAgZGF0ZTogcG9zdC5kYXRlLFxuICAgICAgICAgICAgdHlwZTogcG9zdC50eXBlLFxuICAgICAgICAgICAgZmVhdHVyZWRJbWFnZTogcG9zdC5uc3NfZmVhdHVyZWRfaW1hZ2VzPy5tZWRpdW0/LnNyYyxcbiAgICAgICAgICAgIGZlYXR1cmVkSW1hZ2VIZWlnaHQ6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy5oZWlnaHQsXG4gICAgICAgICAgICBmZWF0dXJlZEltYWdlV2lkdGg6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nLCBjYXRlZ29yeTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9JHtjYXRlZ29yeX0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0MmbGFuZz0ke2xvY2FsZX1gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBsb2FkU2luZ2xlOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcbiAgICAgICAgaWYgKHBvc3RJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeSArPSBwb3N0SWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeSArPSBcIj9zbHVnPVwiICsgcG9zdFNsdWc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAkLmdldChjb25maWcuZ2V0UmVzdFVybCgpICsgXCJwb3N0cy9cIiArIHF1ZXJ5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIEJ5IHNsdWcgcmV0dXJucyBhcnJheVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgZ2V0U2luZ2xlOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYGNvbnRlbnRTZXJ2aWNlLmdldFNpbmdsZSAke3Bvc3RJZH0gJHtwb3N0U2x1Z31gKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLFxuICAgICAgICAgICAgY29udGVudFNlcnZpY2UuX2xvY2FsZVxuICAgICAgICApO1xuICAgIH0sXG4gICAgZ2V0U2luZ2xlRnJvbVByZWxvYWRlZDogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgXCJjb250ZW50U2VydmljZS5hbGxDb250ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICAvLyBpZihjb250ZW50U2VydmljZS5hbGxDb250ZW50cy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gY29udGVudFNlcnZpY2UuY29udmVydChhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLGNvbnRlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBxdWVyeSA9IChldmVudDogQ2xhbmRlc3Rpbm9Db250ZW50KSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICBpZiAocG9zdFNsdWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnkgPSAoZXZlbnQ6IENsYW5kZXN0aW5vQ29udGVudCkgPT4gZXZlbnQuaWQgPT09IHBvc3RJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudFNlcnZpY2UuYWxsQ29udGVudHMuZmluZChxdWVyeSk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdKSB7XG4gICAgICAgIGNvbnRlbn
4181RzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vQ29udGVudCwgYjogQ2xhbmRlc3Rpbm9Db250ZW50KSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRBOiBkYXlqcy5EYXlqcyA9IGRheWpzKGEuZGF0ZSk7XG4gICAgICAgICAgICB2YXIgZXZlbnRCOiBkYXlqcy5EYXlqcyA9IGRheWpzKGIuZGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRCLnRvRGF0ZSgpLmdldFRpbWUoKSAtIGV2ZW50QS50b0RhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfSxcbiAgICBhZGRFeHRyYUNsYXNzZXM6IGZ1bmN0aW9uIChjb250ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGVudHNbMF0uZXh0cmFDc3NDbGFzcyArPSBcIiBvbmx5LW9uZVwiO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzb3J0U3RpY2t5OiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGNvbnRlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjb250ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5zdGlja3kpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vblN0aWNreSA9IGNvbnRlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjb250ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQuc3RpY2t5KVxuICAgICAgICApO1xuICAgICAgICBzdGlja3kucHVzaCguLi5ub25TdGlja3kpO1xuICAgICAgICByZXR1cm4gc3RpY2t5O1xuICAgIH0sXG4gICAgZ2V0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGNhdGVnb3J5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50U2VydmljZS5hbGxDb250ZW50cztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkKGxvY2FsZSwgY2F0ZWdvcnkpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdID0gW107XG4gICAgICAgIHBvc3RzLmZvckVhY2goKHBvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChjb250ZW50U2VydmljZS5jb252ZXJ0KHBvc3QsIGxvY2FsZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29udGVudHMgPSBjb250ZW50U2VydmljZS5zb3J0U3RpY2t5KGNvbnRlbnRzKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nLCBjYXRlZ29yeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzID0gYXdhaXQgY29udGVudFNlcnZpY2UuZ2V0KGxvY2FsZSwgY2F0ZWdvcnkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29udGVudFNlcnZpY2UgaW5pdFwiLCBjb250ZW50U2VydmljZS5fbG9jYWxlKTtcbiAgICB9LFxufTsiLCJleHBvcnQgY29uc3QgZWxlbWVudCA9IHtcbiAgICBidXR0b25zOiB7XG4gICAgICAgIGJ1dHRvblRvZ2dsZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1uYXYtd3JhcHBlci10b2dnbGVcIlxuICAgICAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50LFxuICAgICAgICBidXR0b25Ub2dnbGVNb2JpbGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgXCJidXR0b24tbmF2LXdyYXBwZXItdG9nZ2xlLW1vYmlsZVwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIGJ1dHRvbkNsb3NlU2luZ2xlUGFuZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1jbG9zZS1zaW5nbGUtcGFuZVwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIC8vIGJ1dHRvblNoYXJlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgLy8gICAgIFwiYnV0dG9uLXNoYXJlXCJcbiAgICAgICAgLy8gKSBhcyBIVE1MQW5jaG9yRWxlbWVudCxcbiAgICAgICAgYnV0dG9uU2hhcmVGYjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1zaGFyZS1mYlwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIC8vYnV0dG9uU2hhcmVUd2l0dGVyOiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbi1zaGFyZS10d2l0dGVyJykgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIGNhbGVuZGFyQ29udGFpbmVyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgIFwiY2FsZW5kYXItY29udGFpbmVyXCJcbiAgICAgICAgKSBhcyBIVE1MRGl2RWxlbWVudCxcbiAgICAgICAgYnV0dG9uQWRkVG9DYWxlbmRhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImFkZC10by1jYWxlbmRhci1idXR0b25cIlxuICAgICAgICApIGFzIEhUTUxEaXZFbGVtZW50LCAvL2FkZGV2ZW50YXRjMVxuICAgICAgICBidXR0b25TaGFyZVVybDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1zaGFyZS11cmxcIlxuICAgICAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50LFxuICAgICAgICBidXR0b25DbG9zZVNoYXJlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgIFwiYnV0dG9uLWNsb3NlLXNoYXJlXCJcbiAgICAgICAgKSBhcyBIVE1MQW5jaG9yRWxlbWVudCxcbiAgICB9LFxuICAgIHdyYXBwZXJzOiB7XG4gICAgICAgIG5hdldyYXBwZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmF2LXdyYXBwZXJcIikgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgIG1haW5XcmFwcGVyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4td3JhcHBlclwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICB9LFxufTtcbiIsImltcG9ydCB7
4181IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9Db250ZW50IH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vVmVudWUsIHZlbnVlU2VydmljZSB9IGZyb20gXCIuL3ZlbnVlU2VydmljZVwiO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmVcIjtcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlclwiO1xuaW1wb3J0IHsgdmFsaWREYXRlIH0gZnJvbSBcIi4vdmFsaWREYXRlXCI7XG4vL2ltcG9ydCB7IHRlc3RDb250ZW50IH0gZnJvbSBcIi4vdGVzdENvbnRlbnRcIjtcbmltcG9ydCB7IGV2ZW50VHlwZSwgRXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZVwiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuXG4vL2NvbnN0IFRCQSA9IFwidGJhXCI7XG5cbmV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gICAgUkFORE9NID0gXCJyYW5kb21cIixcbn1cblxuZXhwb3J0IGNvbnN0IEZFQVRVUkVEX0lNQUdFX1NJWkUgPSBcIm1lZGl1bVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vRXZlbnQgZXh0ZW5kcyBDbGFuZGVzdGlub0NvbnRlbnQge1xuICAgIHZlbnVlOiBDbGFuZGVzdGlub1ZlbnVlO1xuICAgIHZlbnVlRm9ybWF0dGVkOiBzdHJpbmc7XG4gICAgc3RhcnREYXRlOiBEYXRlO1xuICAgIGVuZERhdGU6IERhdGU7XG4gICAgZG9vcnNPcGVuOiBEYXRlO1xuICAgIGRvb3JzT3BlbkZvcm1hdHRlZDogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICBlbmRUaW1lOiBEYXRlO1xuICAgIHN0YXJ0VGltZTI6IERhdGU7XG4gICAgZW5kVGltZTI6IERhdGU7XG4gICAgc3RhcnRUaW1lMzogRGF0ZTtcbiAgICBlbmRUaW1lMzogRGF0ZTtcbiAgICB0aWNrZXQ6IHN0cmluZztcbiAgICBwYXNzZXM6IG51bWJlcltdO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGRhdGVUaW1lRm9ybWF0dGVkOiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdHRlZDogc3RyaW5nO1xuICAgIHBsYWNlPzogc3RyaW5nO1xuICAgIHRyYWNrPzogbnVtYmVyO1xuICAgIGxpbms/OiBzdHJpbmc7XG4gICAgZXZlbnRUeXBlPzogc3RyaW5nO1xuICAgIHNvbGRPdXQ6IGJvb2xlYW47XG4gICAgY2FuY2VsbGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZXZlbnRTZXJ2aWNlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBhbGxWZW51ZXM6IFtdIGFzIENsYW5kZXN0aW5vVmVudWVbXSxcbiAgICByZW5kZXJDc3M6IGZ1bmN0aW9uIChcbiAgICAgICAgZXZlbnRJZDogbnVtYmVyLFxuICAgICAgICBpbWFnZUhlaWdoOiBudW1iZXIsXG4gICAgICAgIGltYWdlV2lkdGg6IG51bWJlclxuICAgICkge1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IChpbWFnZVdpZHRoICogMzAwKSAvIGltYWdlSGVpZ2g7XG4gICAgICAgIGNvbnN0IGNzcyA9IGA8c3R5bGUgc2NvcGVkPVwiXCI+XG4gICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAgICAgICAgICAgLnNpbmdsZS1ib3gtJHtldmVudElkfSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICR7bmV3V2lkdGh9cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8L3N0eWxlPmA7XG4gICAgICAgICQoYCNjb250ZW50YCkuYXBwZW5kKGNzcyk7XG4gICAgfSxcbiAgICByZW5kZXJWZW51ZTogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IFwiXCI7XG4gICAgICAgIGlmIChldmVudC52ZW51ZSkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxicj4ke2V2ZW50LnZlbnVlRm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG4gICAgcmVuZGVyRGF0ZUFuZFZlbnVlOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKGV2ZW50LmRhdGVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGAke2V2ZW50LmRhdGVGb3JtYXR0ZWR9YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFNlcnZpY2UucmVuZGVyVmVudWUoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSxcbiAgICByZW5kZXJFdmVudFN0YXR1c2VzOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxoMiBjbGFzcz1cImNhbmNlbGxlZC10ZXh0XCI+JHtsYW5ndWFnZS5nZXQoXG4gICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgXCJDYW5jZWxsZWRcIlxuICAgICAgICAgICAgKX08L2gyPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc29sZE91dCkge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8aDIgY2xhc3M9XCJzb2xkb3V0LXRleHRcIj4ke2xhbmd1YWdlLmdldChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgIFwiU29sZE91dFwiXG4gICAgICAgICAgICAgICAgKX08L2gyPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnRUeXBlOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gYDxwIGNsYXNzPVwiZXZlbnQtdHlwZVwiPmA7XG4gICAgICAgI
4181HN3aXRjaCAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuRkVTVElWQUw6XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRUeXBlLmdldEV2ZW50VHlwZURlc2NyaXB0aW9uKGV2ZW50LmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgLy90ZW1wbGF0ZSArPSBldmVudFNlcnZpY2UucmVuZGVyRGF0ZUFuZFZlbnVlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoZXZlbnQudmVudWUpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gRG8gbm90IHJlbmRlciBUQkFcbiAgICAgICAgICAgICAgICAvLyAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlclZlbnVlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuQkVZT05EOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihldmVudC5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIC8vdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuUE9EUzpcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24oZXZlbnQuZXZlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAvL3RlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGVzLlRBTEtTOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihldmVudC5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIC8vdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vZGVmYXVsdDpcbiAgICAgICAgICAgIC8vICAgIHRlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArIFwiPC9wPlwiO1xuICAgIH0sXG4gICAgcmVuZGVyUG9zdDogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5mZWF0dXJlZEltYWdlKSB7XG4gICAgICAgICAgICBldmVudFNlcnZpY2UucmVuZGVyQ3NzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIGV2ZW50LmZlYXR1cmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICAgICAgZXZlbnQuZmVhdHVyZWRJbWFnZVdpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBocmVmPVwiJHtjb25maWcuc2l0ZUZvbGRlcn0ke2V2ZW50LnNsdWd9L1wiIGRhdGEtaWQ9XCIke1xuICAgICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfVwiIGRhdGEtc2x1Zz1cIiR7XG4gICAgICAgICAgICBldmVudC5zbHVnXG4gICAgICAgIH1cIiBkYXRhLWZvcm1hdD1cIlwiIGNsYXNzPVwic2luZ2xlLWJveCBzaW5nbGUtYm94LSR7ZXZlbnQuaWR9ICR7XG4gICAgICAgICAgICBldmVudC5leHRyYUNzc0NsYXNzIHx8IFwiXCJcbiAgICAgICAgfVwiIHRpdGxlPVwiJHtldmVudC50aXRsZX1cIiByZWw9XCJib29rbWFya1wiPmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50U3RhdHVzZXMoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5mZWF0dXJlZEltYWdlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGltZyB3aWR0aD1cIjEwMjRcIiBoZWlnaHQ9XCI2ODNcIiBzcmM9XCIke2V2ZW50LmZlYXR1cmVkSW1hZ2V9XCIgY2xhc3M9XCJhdHRhY2htZW50LW1lZGl1bSBzaXplLW1lZGl1bSB3cC1wb3N0LWltYWdlXCIgYWx0PVwiXCIgZGVjb2Rpbmc9XCJhc3luY1wiIGZldGNocHJpb3JpdHk9XCJoaWdoXCI+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlbXBsYXRlICs9ICc8ZGl2IGNsYXNzPVwiY2FwdGlvbi10ZXh0XCI+JztcbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50VHlwZShldmVudCk7XG4gICAgICAgIHRlbXBsYXRlICs9IGA8aDI+JHtldmVudC50aXRsZX08L2gyPmA7XG4gICAgICAgIHRlbXBsYXRlICs9ICc8cCBjbGFzcz1cInRpbWUtYW5kLXBsYWNlXCI+JztcbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgIHRlbXBsYXRlICs9IFwiPC9wPlwiO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvZGl2PlwiO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvYT5cIjtcblxuICAgICAgICAkKGAjY29udGVudGApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBhZGp1c3RNaWRuaWdodDogZnVuY3Rpb24gKGRhdGU6IGRheWpzLkRheWpzKSB7XG4gICAgICAgIGlmIChkYXRlLmhvdXIoKSA8IGNvbmZpZy5lYXJsaWVzdEV2ZW50SG91cikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgYWRkVGltZTogZnVuY3Rpb24gKGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aW1lXG4gICAgICAgICAgICA/IGV2ZW50U2VydmljZS5hZGp1c3RNaWRuaWdodChkYXlqcyhkYXRlICsgdGltZSkpLnRvRGF0ZSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldERvb3JzRm9ybWF0dGVkVGltZTogZnVuY3Rpb24gKGRhdGVTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0ZVN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZVN0cmluZy5yZXBsYWNlKFwiOlwiLCBcIi5cIik7XG4gICAgfSxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiAocG9zdDogYW55LCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICAvLyBsZXQgdmVudWU6IENsYW5kZXN0aW5vVmVudWUgPSBldmVudFNlcnZpY2UuYWxsVmVudWVzLmZpbmQoXG4gICAgICAgIC8vICAgICAodikgPT4gdi5pZCA9PT0gcG9zdC5hY2Yuc2Nlbj8uSURcbiAgICAgICAgLy8gKTtcbiAgICAgICAgLy8gaWYgKCF2ZW51ZSkge1xuICAgICAgICAvLyAgICAgaWYgKHBvc3QuYWNmPy5zY2VuKSB7XG4gICAgICAgIC8vICAgICAgICAgLy8gRml4IGZvciBleHRlcm5hbCBldmVudHNcbiAgICAgICAgLy8gICAgICAgICB2ZW51ZSA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWQ6IDAsXG4gICAgICAgIC8vICAgICAgICAgICAgI
4181HRpdGxlOiBwb3N0LmFjZltcInNjZW5cIl0/LnBvc3RfdGl0bGUsXG4gICAgICAgIC8vICAgICAgICAgICAgIHNsdWc6IFRCQSxcbiAgICAgICAgLy8gICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICB2ZW51ZSA9IHtcbiAgICAgICAgLy8gICAgICAgICBpZDogMCxcbiAgICAgICAgLy8gICAgICAgICB0aXRsZTogVEJBLFxuICAgICAgICAvLyAgICAgICAgIHNsdWc6IFRCQSxcbiAgICAgICAgLy8gICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgIC8vICAgICB9O1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCB2ZW51ZSA9IHZlbnVlU2VydmljZS5nZXRWZW51ZU9yVEJBKHBvc3QpO1xuICAgICAgICBsZXQgdmVudWVGb3JtYXR0ZWQgPSB2ZW51ZS50aXRsZTtcbiAgICAgICAgbGV0IGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50ID0ge1xuICAgICAgICAgICAgaWQ6IHBvc3QuaWQsXG4gICAgICAgICAgICBzbHVnOiBwb3N0LnNsdWcsXG4gICAgICAgICAgICB0aXRsZTogY29udGVudFNlcnZpY2UuYnJlYWtMaW5lcyhwb3N0LnRpdGxlLnJlbmRlcmVkKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3QuY29udGVudFtcInJlbmRlcmVkXCJdLFxuICAgICAgICAgICAgc3RpY2t5OiBwb3N0LnN0aWNreSxcbiAgICAgICAgICAgIGRhdGU6IHBvc3QuZGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IHBvc3QudHlwZSxcbiAgICAgICAgICAgIGZlYXR1cmVkSW1hZ2U6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy5zcmMsXG4gICAgICAgICAgICBmZWF0dXJlZEltYWdlSGVpZ2h0OiBwb3N0Lm5zc19mZWF0dXJlZF9pbWFnZXM/Lm1lZGl1bT8uaGVpZ2h0LFxuICAgICAgICAgICAgZmVhdHVyZWRJbWFnZVdpZHRoOiBwb3N0Lm5zc19mZWF0dXJlZF9pbWFnZXM/Lm1lZGl1bT8ud2lkdGgsXG4gICAgICAgICAgICB2ZW51ZSxcbiAgICAgICAgICAgIHZlbnVlRm9ybWF0dGVkLFxuICAgICAgICAgICAgLy92ZW51ZVRpdGxlOiBwb3N0LmFjZltcInNjZW5cIl0/LnBvc3RfdGl0bGUgfHwgVEJBLFxuICAgICAgICAgICAgc3RhcnREYXRlOiBwb3N0LmFjZi5kYXR1bSxcbiAgICAgICAgICAgIGVuZERhdGU6IHBvc3QuYWNmLnNsdXRkYXR1bSxcbiAgICAgICAgICAgIGRvb3JzT3BlbjogZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZG9ycmFyX29wcG5hclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRvb3JzT3BlbkZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERvb3JzRm9ybWF0dGVkVGltZShcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5kb3JyYXJfb3BwbmFyXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiBldmVudFNlcnZpY2UuYWRkVGltZShwb3N0LmFjZi5kYXR1bSwgcG9zdC5hY2Yuc3RhcnR0aWQpLFxuICAgICAgICAgICAgZW5kVGltZTogZXZlbnRTZXJ2aWNlLmFkZFRpbWUocG9zdC5hY2YuZGF0dW0sIHBvc3QuYWNmLnNsdXR0aWQpLFxuICAgICAgICAgICAgc3RhcnRUaW1lMjogZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICAgICAgcG9zdC5hY2Yuc3RhcnR0aWQyXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZW5kVGltZTI6IGV2ZW50U2VydmljZS5hZGRUaW1lKHBvc3QuYWNmLmRhdHVtLCBwb3N0LmFjZi5zbHV0dGlkMiksXG4gICAgICAgICAgICBzdGFydFRpbWUzOiBldmVudFNlcnZpY2UuYWRkVGltZShcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5kYXR1bSxcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5zdGFydHRpZDNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBlbmRUaW1lMzogZXZlbnRTZXJ2aWNlLmFkZFRpbWUocG9zdC5hY2YuZGF0dW0sIHBvc3QuYWNmLnNsdXR0aWQzKSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5iYWtncnVuZHNmYXJnIHx8IHZlbnVlPy5jb2xvciB8fCBjb25maWcuZGVmYXVsdENvbG9yLFxuICAgICAgICAgICAgdGlja2V0OiBwb3N0LmFjZi5iaWxqZXR0LFxuICAgICAgICAgICAgcGFzc2VzOiBwb3N0LmFjZi5mZXN0aXZhbHBhc3MsXG4gICAgICAgICAgICBkYXRlVGltZUZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERhdGVBbmRUaW1lKHBvc3QsIGxvY2FsZSwgdHJ1ZSksXG4gICAgICAgICAgICBkYXRlRm9ybWF0dGVkOiBldmVudFNlcnZpY2UuZ2V0RGF0ZUFuZFRpbWUocG9zdCwgbG9jYWxlLCBmYWxzZSksXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBwb3N0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgICBldmVudFR5cGU6IHBvc3QuYWNmLmV2ZW50X3R5cCxcbiAgICAgICAgICAgIHNvbGRPdXQ6IHBvc3QuYWNmLnNsdXRzYWxkLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBwb3N0LmFjZi5pbnN0YWxsZCxcbiAgICAgICAgICAgIGV4dHJhQ3NzQ2xhc3M6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIC8vZXZlbnQuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImVcIiwgZXZlbnQpO1xuICAgICAgICAvL3Rlc3RDb250ZW50LnNldFRlc3RJbWFnZXMoZXZlbnQpO1xuICAgICAgICBldmVudFNlcnZpY2UuYWRkQXJjaGl2ZWRDbGFzcyhldmVudCk7XG5cbiAgICAgICAgZXZlbnRTZXJ2aWNlLmFkZENhbmNlbGxlZENsYXNzKGV2ZW50KTtcbiAgICAgICAgaWYgKCFldmVudC5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5hZGRTb2xkT3V0Q2xhc3MoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgIGdldFN0YXJ0VGltZTogZnVuY3Rpb24gKHN0YXJ0VGltZTogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghc3RhcnRUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VwYXJhdG9yICsgc3RhcnRUaW1lLnJlcGxhY2UoXCI6MDBcIiwgXCJcIikucmVwbGFjZShcIjpcIiwgXCIuXCIpO1xuICAgIH0sXG4gICAgZ2V0RW5kVGltZTogZnVuY3Rpb24gKGVuZFRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZW5kVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgI
4181H1cbiAgICAgICAgcmV0dXJuIFwi4oCTXCIgKyBlbmRUaW1lLnJlcGxhY2UoXCI6MDBcIiwgXCJcIikucmVwbGFjZShcIjpcIiwgXCIuXCIpO1xuICAgIH0sXG4gICAgLy8gZ2V0U2NlbmU6IGZ1bmN0aW9uIChzY2VuZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyAgICAgaWYgKCFzY2VuZSkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIFRCQTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gc2NlbmU7XG4gICAgLy8gfSxcbiAgICBnZXRUaW1lczogZnVuY3Rpb24gKHBvc3Q6IGFueSkge1xuICAgICAgICBjb25zdCBrbCA9IGxhbmd1YWdlLmdldChldmVudFNlcnZpY2UuX2xvY2FsZSwgXCJLbFwiKTtcblxuICAgICAgICBsZXQgdGltZXMgPSBcIlwiO1xuICAgICAgICB0aW1lcyArPSBldmVudFNlcnZpY2UuZ2V0U3RhcnRUaW1lKHBvc3QuYWNmW1wic3RhcnR0aWRcIl0sIGAgJHtrbH0gYCk7XG4gICAgICAgIHRpbWVzICs9IGV2ZW50U2VydmljZS5nZXRFbmRUaW1lKHBvc3QuYWNmW1wic2x1dHRpZFwiXSk7XG5cbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldFN0YXJ0VGltZShwb3N0LmFjZltcInN0YXJ0dGlkMlwiXSwgXCIsIFwiKTtcbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldEVuZFRpbWUocG9zdC5hY2ZbXCJzbHV0dGlkMlwiXSk7XG5cbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldFN0YXJ0VGltZShwb3N0LmFjZltcInN0YXJ0dGlkM1wiXSwgXCIsIFwiKTtcbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldEVuZFRpbWUocG9zdC5hY2ZbXCJzbHV0dGlkM1wiXSk7XG4gICAgICAgIHJldHVybiB0aW1lcztcbiAgICB9LFxuICAgIGdldERhdGVBbmRUaW1lOiBmdW5jdGlvbiAoXG4gICAgICAgIHBvc3Q6IGFueSxcbiAgICAgICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgICAgIHJlbmRlclRpbWVzOiBib29sZWFuXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFwb3N0LmFjZltcImRhdHVtXCJdKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lQW5kUGxhY2UgPSBcIlwiO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc3QuYWNmW1wic2x1dGRhdHVtXCJdICE9PSBcIlwiICYmXG4gICAgICAgICAgICBwb3N0LmFjZltcInNsdXRkYXR1bVwiXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXkgPSBkYXlqcyhwb3N0LmFjZltcImRhdHVtXCJdKS5mb3JtYXQoXCJEXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRNb250aCA9IGRheWpzKHBvc3QuYWNmW1wiZGF0dW1cIl0pLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgICAgICBjb25zdCBlbmREYXkgPSBkYXlqcyhwb3N0LmFjZltcInNsdXRkYXR1bVwiXSkuZm9ybWF0KFwiRFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZE1vbnRoID0gZGF5anMocG9zdC5hY2ZbXCJzbHV0ZGF0dW1cIl0pLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZGF5anMocG9zdC5hY2ZbXCJzbHV0ZGF0dW1cIl0pLmZvcm1hdChcIllZWVlcIik7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gXCJzdlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TW9udGggPT0gZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IHN0YXJ0RGF5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBzdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwiIFwiICsgc3RhcnRNb250aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXkgIT0gZW5kRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIuKAk1wiICsgZW5kRGF5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCIgXCIgKyBlbmRNb250aDtcbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCIgXCIgKyB5ZWFyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gc3RhcnRNb250aCArIFwiIFwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TW9udGggPT0gZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IHN0YXJ0RGF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXkgIT0gZW5kRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCLigJNcIiArIGVuZERheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBzdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwi4oCTXCIgKyBlbmRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwiIFwiICsgZW5kRGF5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIiwgXCIgKyB5ZWFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZUFuZFBsYWNlID0gZGF5anMocG9zdC5hY2ZbXCJkYXR1bVwiXSkuZm9ybWF0KFwiTExcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyVGltZXMpIHtcbiAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIiwgXCIgKyBldmVudFNlcnZpY2UuZ2V0VGltZXMocG9zdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aW1lQW5kUGxhY2UgKz1cbiAgICAgICAgLy8gICAgIFwiPGJyPlwiICsgZXZlbnRTZXJ2aWNlLmdldFNjZW5lKHBvc3QuYWNmW1wic2NlblwiXT8ucG9zdF90aXRsZSk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVBbmRQbGFjZTtcbiAgICB9LFxuICAgIC8vIHNldEV2ZW50VHlwZURlc2NyaXB0aW9uczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgLy8gICAgI
4181HN3aXRjaCAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgLy8gICAgICAgICBjYXNlIFwiZmVzdGl2YWxcIjpcbiAgICAvLyAgICAgICAgICAgICBsZXQgZXRlZiA9XG4gICAgLy8gICAgICAgICAgICAgICAgICc8cCBjbGFzcz1cImV2ZW50LXR5cGVcIj4nICsgZXZlbnRUeXBlcy5iZXlvbmQgKyBcIjwvcD5cIjtcbiAgICAvLyAgICAgICAgICAgICBldmVudC5kYXRlQW5kUGxhY2UgPSBldmVudFR5cGVzLmZlc3RpdmFsO1xuICAgIC8vICAgICAgICAgICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV0ZWYgKyBldmVudFR5cGVzLmZlc3RpdmFsO1xuICAgIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLy8gY29kZSBibG9jayBmZXN0aXZhbFwiKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJiZXlvbmRcIjpcbiAgICAvLyAgICAgICAgICAgICBsZXQgZXR0YiA9XG4gICAgLy8gICAgICAgICAgICAgICAgICc8cCBjbGFzcz1cImV2ZW50LXR5cGVcIj4nICsgZXZlbnRUeXBlcy5iZXlvbmQgKyBcIjwvcD5cIjtcbiAgICAvLyAgICAgICAgICAgICBldmVudC5kYXRlQW5kUGxhY2UgPVxuICAgIC8vICAgICAgICAgICAgICAgICBldmVudFR5cGVzLmJleW9uZCArIFwiPGJyPlwiICsgZXZlbnQuZGF0ZUFuZFBsYWNlO1xuICAgIC8vICAgICAgICAgICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV0dGIgKyBldmVudC50aW1lQW5kUGxhY2U7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coXCIvLyBjb2RlIGJsb2NrIGJleW9uZFwiKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGRlZmF1bHQ6XG4gICAgLy8gICAgICAgICAvLyBjb2RlIGJsb2NrXG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuICAgIGlzRGF0ZUJlZm9yZVRvZGF5KGRhdGU6IERhdGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUudG9EYXRlU3RyaW5nKCkpIDwgbmV3IERhdGUobmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSlcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGFkZEFyY2hpdmVkQ2xhc3M6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnN0YXJ0VGltZSkge1xuICAgICAgICAgICAgLy9ldmVudC5leHRyYUNzc0NsYXNzICs9IFwiIGFyY2hpdmVkXCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFyY2hpdmVkQ2xhc3MgPSBldmVudFNlcnZpY2UuaXNEYXRlQmVmb3JlVG9kYXkoZXZlbnQuc3RhcnRUaW1lKVxuICAgICAgICAgICAgPyBcIiBhcmNoaXZlZFwiXG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgKz0gYXJjaGl2ZWRDbGFzcztcbiAgICB9LFxuICAgIGFkZFNvbGRPdXRDbGFzczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBzb2xkT3V0Q2xhc3MgPSBldmVudC5zb2xkT3V0ID8gXCIgc29sZG91dFwiIDogXCJcIjtcbiAgICAgICAgZXZlbnQuZXh0cmFDc3NDbGFzcyArPSBzb2xkT3V0Q2xhc3M7XG4gICAgfSxcbiAgICBhZGRDYW5jZWxsZWRDbGFzczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBjYW5jZWxsZWRDbGFzcyA9IGV2ZW50LmNhbmNlbGxlZCA/IFwiIGNhbmNlbGxlZFwiIDogXCJcIjtcbiAgICAgICAgZXZlbnQuZXh0cmFDc3NDbGFzcyArPSBjYW5jZWxsZWRDbGFzcztcbiAgICB9LFxuICAgIGxvYWQ6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0ICQuZ2V0KFxuICAgICAgICAgICAgY29uZmlnLmdldFJlc3RVcmwoKSArXG4gICAgICAgICAgICAgICAgYHBvc3RzLz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mY2F0ZWdvcmllcz0ke1xuICAgICAgICAgICAgICAgICAgICBzaXRlbWFwW0xvY2FsZXNbZXZlbnRTZXJ2aWNlLl9sb2NhbGUgYXMgTG9jYWxlc11dLlBST0dSQU1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NgXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRTaW5nbGU6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZXZlbnRTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLFxuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGVcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGdldFNpbmdsZUZyb21QcmVsb2FkZWQ6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5hbGxFdmVudHMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmKGV2ZW50U2VydmljZS5hbGxFdmVudHMubGVuZ3RoPT09MCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGV2ZW50U2VydmljZS5jb252ZXJ0KGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksZXZlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBxdWVyeSA9IChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkgPT4gZXZlbnQuaWQgPT09IHBvc3RJZDtcbiAgICAgICAgaWYgKHBvc3RTbHVnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ID0gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudFNlcnZpY2UuYWxsRXZlbnRzLmZpbmQocXVlcnkpO1xuICAgIH0sXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKGFycmF5OiBDbGFuZGVzdGlub0V2ZW50W10pIHtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgICAvLyBXaGlsZSB0aGVyZSByZW1haW4gZWxlbWVudHMgdG8gc2h1ZmZsZS4uLlxuICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4ICE9IDApIHtcbiAgICAgICAgICAgIC8vIFBpY2sgYSByZW1haW5pbmcgZWxlbWVudC4uLlxuICAgICAgICAgICAgbGV0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tO1xuXG4gICAgICAgICAgICAvLyBBbmQgc3dhcCBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAgICAgICAgICBbYXJyYXlbY3VycmVudEluZGV4XSwgYXJyYXlbcmFuZG9tSW5kZXhdXSA9IFtcbiAgICAgICAgICAgICAgICBhcnJheVtyYW5kb21JbmRleF0sXG4gICAgICAgICAgICAgICAgYXJyYXlbY3VycmVudEluZGV4XSxcbiAgICAgICAgICAgIF07XG4gICAgICAgI
4181H1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXIgPSBTb3J0T3JkZXIuQVNDXG4gICAgKSB7XG4gICAgICAgIGlmIChzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5SQU5ET00pIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudFNlcnZpY2Uuc2h1ZmZsZShldmVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50cy5zb3J0KGZ1bmN0aW9uIChhOiBDbGFuZGVzdGlub0V2ZW50LCBiOiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSBTb3J0T3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyBhLnN0YXJ0VGltZT8uZ2V0VGltZSgpIC0gYi5zdGFydFRpbWU/LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgIDogYi5zdGFydFRpbWU/LmdldFRpbWUoKSAtIGEuc3RhcnRUaW1lPy5nZXRUaW1lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH0sXG4gICAgc29ydFN0aWNreTogZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXIgPSBTb3J0T3JkZXIuQVNDXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGV2ZW50U2VydmljZS5zb3J0KFxuICAgICAgICAgICAgZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnN0aWNreSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uU3RpY2t5ID0gZXZlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBldmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LnN0aWNreSksXG4gICAgICAgICAgICBzb3J0T3JkZXJcbiAgICAgICAgKTtcbiAgICAgICAgc3RpY2t5LnB1c2goLi4ubm9uU3RpY2t5KTtcbiAgICAgICAgcmV0dXJuIHN0aWNreTtcbiAgICB9LFxuICAgIHNvcnRQYXN0QW5kRnV0dXJlOiBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgICAgICByZW1vdmVCZWZvcmVEYXRlOiBEYXRlXG4gICAgKSB7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbiAgICAgICAgY29uc3QgZnV0dXJlID0gZXZlbnRzLmZpbHRlcigoeyBzdGFydERhdGUgfSkgPT5cbiAgICAgICAgICAgIGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lT3JBZnRlcihyZW1vdmVCZWZvcmVEYXRlLCBcInNlY29uZFwiKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXN0ID0gZXZlbnRzLmZpbHRlcigoeyBzdGFydERhdGUgfSkgPT5cbiAgICAgICAgICAgIGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lT3JCZWZvcmUocmVtb3ZlQmVmb3JlRGF0ZSwgXCJzZWNvbmRcIilcbiAgICAgICAgKTtcbiAgICAgICAgZnV0dXJlLnB1c2goLi4ucGFzdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY291bnQgcGFzdDpcIiArIHBhc3QubGVuZ3RoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJjb3VudCBmdXR1cmU6XCIgKyBmdXR1cmUubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGZ1dHVyZTtcbiAgICB9LFxuICAgIGZpbHRlck9sZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgcmVtb3ZlQmVmb3JlRGF0ZTogRGF0ZVxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92ZUJlZm9yZURhdGVcIiwgcmVtb3ZlQmVmb3JlRGF0ZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKHsgZGF0ZSwgZW5kVGltZSB9KSA9PlxuICAgICAgICAgICAgZGF5anMoZW5kVGltZSB8fCBkYXRlKS5pc1NhbWVPckFmdGVyKHJlbW92ZUJlZm9yZURhdGUsIFwic2Vjb25kXCIpXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBmaWx0ZXJIYXNWYWxpZFN0YXJ0VGltZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4gdmFsaWREYXRlKGV2ZW50LnN0YXJ0VGltZSkpO1xuICAgIH0sXG4gICAgYXBwZW5kQ29udGVudDogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50U2VydmljZS5hbGxFdmVudHMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5wdXNoKGV2ZW50IGFzIENsYW5kZXN0aW5vRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRTZXJ2aWNlLnNvcnRTdGlja3koZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cyk7XG4gICAgfSxcbiAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBpZiAoZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCBldmVudFNlcnZpY2UubG9hZCgpO1xuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcbiAgICAgICAgcG9zdHMuZm9yRWFjaCgocG9zdDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudFNlcnZpY2UuY29udmVydChwb3N0LCBsb2NhbGUpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0U3RpY2t5KGV2ZW50cyk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbiAgICBnZXRGb3JTY2hlZHVsZTogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXQobG9jYWxlKTtcblxuICAgICAgICBsZXQgZXZlbnRzSGFzUHJvcHMgP
4181SBldmVudHMuZmlsdGVyKChlKSA9PiBlLnN0YXJ0RGF0ZSAmJiBlLmVuZFRpbWUpO1xuXG4gICAgICAgIGxldCBtdWx0aUV2ZW50cyA9IGV2ZW50c0hhc1Byb3BzLmZpbHRlcihcbiAgICAgICAgICAgIChlKSA9PiAhZGF5anMoZS5zdGFydERhdGUpLmlzU2FtZShlLmVuZERhdGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgbXVsdGlFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWVDb3VudGVyID0gZGF5anMoZXZlbnQuc3RhcnREYXRlKTtcbiAgICAgICAgICAgIGxldCBlbmRUaW1lQ291bnRlciA9IGRheWpzKGV2ZW50LmVuZERhdGUpO1xuXG4gICAgICAgICAgICB3aGlsZSAoc3RhcnRUaW1lQ291bnRlci5pc1NhbWVPckJlZm9yZShldmVudC5lbmREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFRpbWVDb3VudGVyLmlzQWZ0ZXIoZXZlbnQuc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnN0YXJ0RGF0ZSA9IHN0YXJ0VGltZUNvdW50ZXIudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmVuZERhdGUgPSBlbmRUaW1lQ291bnRlci50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuc3RhcnRUaW1lID0gZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhjbG9uZS5zdGFydERhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5zdGFydFRpbWUpLmZvcm1hdChcIkhIOm1tXCIpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmVuZFRpbWUgPSBldmVudFNlcnZpY2UuYWRkVGltZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheWpzKGNsb25lLmVuZERhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5lbmRUaW1lKS5mb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBldmVudHNIYXNQcm9wcy5wdXNoKGNsb25lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFydFRpbWVDb3VudGVyID0gc3RhcnRUaW1lQ291bnRlci5hZGQoMSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgZW5kVGltZUNvdW50ZXIgPSBlbmRUaW1lQ291bnRlci5hZGQoMSwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXZlbnRzSGFzUHJvcHM7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGF3YWl0IHZlbnVlU2VydmljZS5pbml0KGxvY2FsZSk7XG4gICAgICAgIGV2ZW50U2VydmljZS5hbGxWZW51ZXMgPSB2ZW51ZVNlcnZpY2UuYWxsVmVudWVzO1xuICAgICAgICBldmVudFNlcnZpY2UuYWxsRXZlbnRzID0gYXdhaXQgZXZlbnRTZXJ2aWNlLmdldChsb2NhbGUpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXZlbnRTZXJ2aWNlIGluaXRcIiwgZXZlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcblxuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbn07XG5cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZXMge1xuICAgIEZFU1RJVkFMID0gXCJmZXN0aXZhbFwiLFxuICAgIEJFWU9ORCA9IFwiYmV5b25kXCIsXG4gICAgRkVTVElWQUxfQU5EX0JFWU9ORCA9IFwiZmVzdGl2YWxfYW5kX2JleW9uZFwiLFxuICAgIFRBTEtTID0gXCJ0YWxrc1wiLFxuICAgIFBPRFMgPSBcInBvZHNcIixcbn1cblxuZXhwb3J0IGNvbnN0IGV2ZW50VHlwZSA9IHtcbiAgICBldmVudFR5cGVzOiBbXSBhcyBFdmVudFR5cGVbXSxcbiAgICBnZXRFdmVudFR5cGVEZXNjcmlwdGlvbjogZnVuY3Rpb24gKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50VHlwZS5ldmVudFR5cGVzLmZpbmQoKGV0KSA9PiBldC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICAuZGVzY3JpcHRpb247XG4gICAgfSxcbiAgICBnZXRLZXlCeVZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmluZCgoa2V5KSA9PiBvYmpba2V5XSA9PT0gdmFsdWUpO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmZXN0aXZhbDogRXZlbnRUeXBlID0ge1xuICAgICAgICAgICAgdmFsdWU6IFwiZmVzdGl2YWxcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5nZXQobG9jYWxlLCBcIkNsYW5kZXN0aW5vRmVzdGl2YWxcIiksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBiZXlvbmQ6IEV2ZW50VHlwZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBcImJleW9uZFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2xhbmRlc3Rpbm8gJiBCZXlvbmRcIixcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZlc3RpdmFsX2FuZF9iZXlvbmQ6IEV2ZW50VHlwZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBcImZlc3RpdmFsX2FuZF9iZXlvbmRcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNsYW5kZXN0aW5vIEZlc3RpdmFsICYgQmV5b25kXCIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0YWxrczogRXZlbnRUeXBlID0ge1xuICAgICAgICAgICAgdmFsdWU6IFwidGFsa3NcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNsYW5kZXN0aW5vIFRhbGtzXCIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBwb2RzOiBFdmVudFR5cGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogXCJwb2RzXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDbGFuZGVzdGlubyBQb2RjYXN0XCIsXG4gICAgICAgI
4181H07XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2goZmVzdGl2YWwpO1xuICAgICAgICBldmVudFR5cGUuZXZlbnRUeXBlcy5wdXNoKGJleW9uZCk7XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2goZmVzdGl2YWxfYW5kX2JleW9uZCk7XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2godGFsa3MpO1xuICAgICAgICBldmVudFR5cGUuZXZlbnRUeXBlcy5wdXNoKHBvZHMpO1xuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge1xuICAgIGV2ZW50U2VydmljZSxcbiAgICBDbGFuZGVzdGlub0V2ZW50LFxuICAgIEZFQVRVUkVEX0lNQUdFX1NJWkUsXG59IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxFdmVudFNlcnZpY2UgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGxvYWQ6IGFzeW5jIGZ1bmN0aW9uIChzb3VyY2U6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQoc291cmNlKTtcbiAgICB9LFxuICAgIGFwcGVuZFBvc3RzOiBmdW5jdGlvbiAocG9zdHM6IGFueVtdLCBhcHBlbmQ6IGFueVtdKSB7XG4gICAgICAgIGFwcGVuZC5mb3JFYWNoKChwb3N0KSA9PiB7XG4gICAgICAgICAgICBwb3N0cy5wdXNoKHBvc3QpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvc3RzO1xuICAgIH0sXG4gICAgc2V0RXh0ZXJuYWw6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgbGluazogc3RyaW5nKSB7XG4gICAgICAgIC8vZXZlbnQuYmFja2dyb3VuZENvbG9yID0gXCIjMDAxMTAwXCI7XG4gICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgPSBcImV4dGVybmFsXCI7XG4gICAgICAgIGV2ZW50LmxpbmsgPSBsaW5rO1xuICAgIH0sXG4gICAgZ2V0OiBhc3luYyBmdW5jdGlvbiAoc291cmNlOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBwb3N0cyA9IGF3YWl0IGV4dGVybmFsRXZlbnRTZXJ2aWNlLmxvYWQoc291cmNlKTtcblxuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvc3Qgb2YgcG9zdHMpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocG9zdCk7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBldmVudFNlcnZpY2UuY29udmVydChwb3N0LCBsb2NhbGUpO1xuICAgICAgICAgICAgZXh0ZXJuYWxFdmVudFNlcnZpY2Uuc2V0RXh0ZXJuYWwoZXZlbnQsIHBvc3QubGluayk7XG5cbiAgICAgICAgICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvL2V2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0U3RpY2t5KGV2ZW50cyk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbiAgICBnZXRGb3JTb3JjZXM6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBjb25maWcuZXh0ZXJuYWxFdmVudFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGV2ZW50cyA9IGV2ZW50cy5jb25jYXQoXG4gICAgICAgICAgICAgICAgYXdhaXQgZXh0ZXJuYWxFdmVudFNlcnZpY2UuZ2V0KHNvdXJjZSwgbG9jYWxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgZXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudFNlcnZpY2UnO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSBcImRheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyXCI7XG5pbXBvcnQgeyB2ZW51ZVNlcnZpY2UgfSBmcm9tIFwiLi92ZW51ZVNlcnZpY2VcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcblxuZXhwb3J0IHR5cGUgQ2xhbmRlc3Rpbm9QYXNzID0ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgb3ZlclRpdGxlOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBldmVudFR5cGU6IHN0cmluZztcbiAgICB2ZW51ZUZvcm1hdHRlZDogc3RyaW5nO1xuICAgIGRhdGU6IERhdGU7XG4gICAgZW5kRGF0ZTogRGF0ZTtcbiAgICB0aWNrZXQ6IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIGRhdGVUaW1lRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIHZpZXdPcmRlcjogbnVtYmVyO1xuICAgIHN0aWNreTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vUGFzc09yZGVyID0ge1xuICAgIERhdGU6IFwiRGF0ZVwiO1xuICAgIFZpZXdvcmRlcjogXCJWaWV3T3JkZXJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXN0aXZhbHBhc3MgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIHJlbmRlclBhc3NMaW5rOiBmdW5jdGlvbiAocGFzczogQ2xhbmRlc3Rpbm9QYXNzLCBzZWxlY3Rvcjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghcGFzcy5zdGlja3kpIHtcbiAgICAgICAgICAgIHBhc3MudGl0bGUgPSBsYW5ndWFnZS5nZXQoZmVzdGl2YWxwYXNzLl9sb2NhbGUsIFwiQmlsamV0dFBsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBpZD1cIiR7cGFzcy5pZH1cIiBocmVmPVwiJHtwYXNzLnRpY2tldH1cIiBjbGFzcz1cImZlc3RpdmFscGFzc1wiIHRpdGxlPVwiJHtwYXNzLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCI+YDtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy50aXRsZX1gO1xuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9hPmA7XG5cbiAgICAgICAgJChzZWxlY3RvcikuYXBwZW5kKHRlbXBsYXRlKTtcbiAgICB9LFxuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uIChwYXNzOiBDbGFuZGVzdGlub1Bhc3MsIHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gYDxzcGFuIGlkPVwiJHtwYXNzLmlkfVwiIGNsYXNzPVwiZmVzdGl2YWxwYXNzXCIgdGl0bGU9XCIke3Bhc3MudGl0bGV9XCI+YDtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy50aXRsZX1gO1xuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9zcGFuPmA7XG5cbiAgICAgICAgJChzZWxlY3RvcikuYXBwZW5kKHRlbXBsYXRlKTtcbiAgICB9LFxuICAgIHBhcnNlUGFzczogZnVuY3Rpb24gKHBhc3M6IENsYW5kZXN0aW5vUGFzcywgc2VsZWN0b3I6IHN0cmluZykge1xuICAgICAgICBwYXNzLnRpY2tldCA9PSBcIlwiXG4gICAgICAgICAgICA/IGZlc3RpdmFscGFzcy5yZW5kZXJQYXNzKHBhc3MsIHNlbGVjdG9yKVxuICAgICAgICAgICAgOiBmZXN0aXZhbHBhc3MucmVuZGVyUGFzc0xpbmsocGFzcywgc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChcbiAgICAgICAgcGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSxcbiAgICAgICAgZXZlbnRQYXNzZXM6IG51bWJlcltdLFxuICAgICAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICBhZGRQaXBlOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgI
4181HBhc3Nlcy5mb3JFYWNoKChwYXNzKSA9PiB7XG4gICAgICAgICAgICAvL3Bhc3MudGlja2V0IT09JycgJiZcbiAgICAgICAgICAgIGlmIChldmVudFBhc3Nlcy5pbmNsdWRlcyhwYXNzLmlkKSkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgYXBwZW5kZWRcbiAgICAgICAgICAgICAgICBpZiAoJChzZWxlY3RvcikuZmluZChgIyR7cGFzcy5pZH1gKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhZGRQaXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICQoc2VsZWN0b3IpLmFwcGVuZChcIiB8IFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmZXN0aXZhbHBhc3MucGFyc2VQYXNzKHBhc3MsIHNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAocGFzc2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHRyYW5zbGF0ZVBhc3NlczogZnVuY3Rpb24gKHBhc3NlczogQ2xhbmRlc3Rpbm9QYXNzW10sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHBhc3Nlcy5mb3JFYWNoKChwYXNzKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChwYXNzLnRpdGxlPy5pbmNsdWRlcyhcIkdvbGRcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlID09PSBcInN2XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFzcy50aXRsZSA9IGxhbmd1YWdlLmdldChsb2NhbGUsIFwiR29sZHBhc3NcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXNzLnZlbnVlRm9ybWF0dGVkID09PSBcInRiYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhc3MudmVudWVGb3JtYXR0ZWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXNzLmRhdGVGb3JtYXR0ZWQgPSBcIiZuYnNwO1wiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFzcy50aXRsZT8uaW5jbHVkZXMoXCJGZXN0aXZhbCBQYXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSA9PT0gXCJzdlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhc3MudGl0bGUgPSBsYW5ndWFnZS5nZXQobG9jYWxlLCBcIkZlc3RpdmFscGFzc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXNzLnRpdGxlPy5pbmNsdWRlcyhcIkZyaSBlbnRyw6kg4oCTIEFubcOkbGFuIGtyw6R2c1wiKSkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIikge1xuICAgICAgICAgICAgICAgICAgICBwYXNzLnRpdGxlID0gbGFuZ3VhZ2UuZ2V0KGxvY2FsZSwgXCJGcmVlQWRtaXNzaW9uUmVnaXN0cmF0aW9uUmVxdWlyZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWRQYXNzZXM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgYGZlc3RpdmFscGFzcz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NgO1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQodXJsKTtcbiAgICB9LFxuICAgIHNvcnRCeVZpZXdPcmRlcjogZnVuY3Rpb24gKHBhc3NlczogQ2xhbmRlc3Rpbm9QYXNzW10pIHtcbiAgICAgICAgcGFzc2VzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vUGFzcywgYjogQ2xhbmRlc3Rpbm9QYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gYS52aWV3T3JkZXIgLSBiLnZpZXdPcmRlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgfSxcbiAgICBzb3J0QnlEYXRlOiBmdW5jdGlvbiAocGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSkge1xuICAgICAgICBwYXNzZXMuc29ydChmdW5jdGlvbiAoYTogQ2xhbmRlc3Rpbm9QYXNzLCBiOiBDbGFuZGVzdGlub1Bhc3MpIHtcbiAgICAgICAgICAgIHZhciBldmVudEE6IGRheWpzLkRheWpzID0gZGF5anMoYS5kYXRlKTtcbiAgICAgICAgICAgIHZhciBldmVudEI6IGRheWpzLkRheWpzID0gZGF5anMoYi5kYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBldmVudEEudG9EYXRlKCkuZ2V0VGltZSgpIC0gZXZlbnRCLnRvRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgfSxcbiAgICBzb3J0QnlTdGlja3k6IGFzeW5jIGZ1bmN0aW9uIChwYXNzZXM6IENsYW5kZXN0aW5vUGFzc1tdKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGZlc3RpdmFscGFzcy5zb3J0QnlWaWV3T3JkZXIoXG4gICAgICAgICAgICBwYXNzZXMuZmlsdGVyKChwYXNzKSA9PiBwYXNzLnN0aWNreSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uU3RpY2t5ID0gZmVzdGl2YWxwYXNzLnNvcnRCeURhdGUoXG4gICAgICAgICAgICBwYXNzZXMuZmlsdGVyKChwYXNzKSA9PiAhcGFzcy5zdGlja3kpXG4gICAgICAgICk7XG4gICAgICAgIHN0aWNreS5wdXNoKC4uLm5vblN0aWNreSk7XG4gICAgICAgIHJldHVybiBzdGlja3k7XG5cbiAgICAgICAgLy8gcGFzc2VzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vUGFzcywgYjogQ2xhbmRlc3Rpbm9QYXNzKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gKGEuc3RpY2t5ID8gMSA6IDApIC0gKGIuc3RpY2t5ID8gMSA6IDApO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gcmV0dXJuIHBhc3NlcztcbiAgICB9LFxuICAgIGZpbHRlck9sZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBwYXNzZXM6IENsYW5kZXN0aW5vUGFzc1tdLFxuICAgICAgICByZW1vdmVCZWZvcmVEYXRlOiBEYXRlXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVtb3ZlQmVmb3JlRGF0ZVwiLCByZW1vdmVCZWZvcmVEYXRlKTtcbiAgICAgICAgZGF5anMuZXh0
4181ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuICAgICAgICByZXR1cm4gcGFzc2VzLmZpbHRlcigoeyBkYXRlLCBlbmREYXRlIH0pID0+XG4gICAgICAgICAgICBkYXlqcyhlbmREYXRlIHx8IGRhdGUpLmlzU2FtZU9yQWZ0ZXIocmVtb3ZlQmVmb3JlRGF0ZSwgXCJzZWNvbmRcIilcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIChwb3N0OiBhbnksIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIGxldCB2ZW51ZSA9IGV2ZW50U2VydmljZS5hbGxWZW51ZXMuZmluZChcbiAgICAgICAgLy8gICAgICh2KSA9PiB2LmlkID09PSBwb3N0LmFjZi5zY2VuLklEXG4gICAgICAgIC8vICk7XG5cbiAgICAgICAgbGV0IHZlbnVlID0gdmVudWVTZXJ2aWNlLmdldFZlbnVlT3JUQkEocG9zdCk7XG4gICAgICAgIGxldCB2ZW51ZUZvcm1hdHRlZCA9IHZlbnVlLnRpdGxlO1xuXG4gICAgICAgIGxldCBwYXNzOiBDbGFuZGVzdGlub1Bhc3MgPSB7XG4gICAgICAgICAgICBpZDogcG9zdC5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBjb250ZW50U2VydmljZS5icmVha0xpbmVzKHBvc3QudGl0bGUucmVuZGVyZWQpLFxuICAgICAgICAgICAgZGF0ZTogcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICBlbmREYXRlOiBwb3N0LmFjZi5zbHV0ZGF0dW0sXG4gICAgICAgICAgICBvdmVyVGl0bGU6IHBvc3QuYWNmLm92ZXJydWJyaWssXG4gICAgICAgICAgICBldmVudFR5cGU6IHBvc3QuYWNmLmV2ZW50X3R5cCxcbiAgICAgICAgICAgIHZlbnVlRm9ybWF0dGVkLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgICAgIHBvc3QuYWNmLmJha2dydW5kc2ZhcmcgfHwgdmVudWU/LmNvbG9yIHx8IGNvbmZpZy5kZWZhdWx0Q29sb3IsXG4gICAgICAgICAgICB0aWNrZXQ6IHBvc3QuYWNmLmJpbGpldHQsXG4gICAgICAgICAgICBkYXRlRm9ybWF0dGVkOiBldmVudFNlcnZpY2UuZ2V0RGF0ZUFuZFRpbWUocG9zdCwgbG9jYWxlLCBmYWxzZSksXG4gICAgICAgICAgICBkYXRlVGltZUZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERhdGVBbmRUaW1lKHBvc3QsIGxvY2FsZSwgdHJ1ZSksXG4gICAgICAgICAgICB2aWV3T3JkZXI6IHBvc3QuYWNmLm9yZG5pbmcsXG4gICAgICAgICAgICBzdGlja3k6IHBvc3Quc3RpY2t5IHx8IHBvc3QuYWNmLmtsaXN0cmFkIHx8IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcGFzcztcbiAgICB9LFxuICAgIGdldFBhc3NlczogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBwb3N0UGFzc2VzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmxvYWRQYXNzZXMoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwb3N0UGFzc2VzKVxuICAgICAgICBsZXQgcGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSA9IFtdO1xuICAgICAgICBwb3N0UGFzc2VzLmZvckVhY2goKHRpY2tldDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXNzID0gZmVzdGl2YWxwYXNzLmNvbnZlcnQodGlja2V0LCBsb2NhbGUpO1xuICAgICAgICAgICAgcGFzc2VzLnB1c2gocGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBmZXN0aXZhbHBhc3Muc29ydEJ5Vmlld09yZGVyKHBhc3Nlcyk7XG4gICAgICAgIGZlc3RpdmFscGFzcy50cmFuc2xhdGVQYXNzZXMocGFzc2VzLCBsb2NhbGUpO1xuICAgICAgICByZXR1cm4gcGFzc2VzO1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBldmVudFBhc3NlczogbnVtYmVyW10sXG4gICAgICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgICAgIGFkZFBpcGU6IGJvb2xlYW4sXG4gICAgICAgIHRpY2tldHM6IENsYW5kZXN0aW5vUGFzc1tdLFxuICAgICAgICBsb2NhbGU6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBmZXN0aXZhbHBhc3MuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgaWYgKHRpY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aWNrZXRzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmdldFBhc3Nlcyhsb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGZlc3RpdmFscGFzcy5wYXJzZSh0aWNrZXRzLCBldmVudFBhc3Nlcywgc2VsZWN0b3IsIGFkZFBpcGUpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgY29udGVudFNlcnZpY2UsIENsYW5kZXN0aW5vQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5cbmV4cG9ydCBjb25zdCBoaXN0b3JpY2FsID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhZGRMZXR0ZXJDbGFzc2VzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIud3AtYmxvY2stbGlzdFwiKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgbGV0IGxldHRlciA9ICQodGhpcykuc2libGluZ3MoXCJwXCIpW2luZGV4XTtcbiAgICAgICAgICAgICQobGV0dGVyKS5hZGRDbGFzcyhcImxldHRlclwiKTtcbiAgICAgICAgICAgICQobGV0dGVyKS5hZGRDbGFzcyhcImxldHRlclwiICsgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVNlYXJjaElucHV0OiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBsYWJlbCA9IGxhbmd1YWdlLmdldChoaXN0b3JpY2FsLl9sb2NhbGUsIFwiU2VhcmNoQWN0XCIpO1xuICAgICAgICB2Y
4181XIgcyA9ICQoYDxpbnB1dCBpZD1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiJHtsYWJlbH1cIiAvPmApO1xuICAgICAgICAkKFwiLnNpbmdsZS1kZXNjcmlwdGlvblwiKS5wcmVwZW5kKHMpO1xuICAgIH0sXG4gICAgaGFuZGxlU2VhcmNoQWN0OiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCJpbnB1dCNzZWFyY2hcIikub24oXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKFwic2VsZWN0I3llYXJcIikudmFsKFwiLTFcIik7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCh0aGlzIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBzZWFyY2hUZXJtID0gKHRoaXMgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICQoXCIud3AtYmxvY2stbGlzdFwiKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIGxldCBsZXR0ZXIgPSAkKHRoaXMpLnNpYmxpbmdzKFwicFwiKVtpbmRleF07XG4gICAgICAgICAgICAgICAgLy8kKGxldHRlcikuYWRkQ2xhc3MoXCJsZXR0ZXJcIik7XG4gICAgICAgICAgICAgICAgLy8kKGxldHRlcikuYWRkQ2xhc3MoXCJsZXR0ZXJcIiArIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgaGlkZUxldHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgJCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oKVxuICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmNsdWRlcyhzZWFyY2hUZXJtKSAmJiBoaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlkZSAmJiBzZWFyY2hUZXJtICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiaGlkZTpcIiArICQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGVMZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGlkZUxldHRlcikge1xuICAgICAgICAgICAgICAgICAgICAkKGxldHRlcikuYWRkQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJChsZXR0ZXIpLnJlbW92ZUNsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNvcnRZZWFyczogYXN5bmMgZnVuY3Rpb24gKHllYXJzOiBOdW1iZXJbXSkge1xuICAgICAgICByZXR1cm4geWVhcnMuc29ydCgpO1xuICAgIH0sXG4gICAgY3JlYXRlWWVhckRyb3Bkb3duTGlzdDogYXN5bmMgZnVuY3Rpb24gKHllYXJzOiBOdW1iZXJbXSkge1xuICAgICAgICBsZXQgbGFiZWwgPSBsYW5ndWFnZS5nZXQoaGlzdG9yaWNhbC5fbG9jYWxlLCBcIlNlbGVjdFllYXJcIik7XG4gICAgICAgIHZhciBzID0gJCgnPHNlbGVjdCBpZD1cInllYXJcIiAvPicpO1xuICAgICAgICAkKFwiPG9wdGlvbiAvPlwiLCB7IHZhbHVlOiBcIi0xXCIsIHRleHQ6IGxhYmVsIH0pLmFwcGVuZFRvKHMpO1xuICAgICAgICBmb3IgKHZhciB2YWwgb2YgeWVhcnMpIHtcbiAgICAgICAgICAgICQoXCI8b3B0aW9uIC8+XCIsIHsgdmFsdWU6IHZhbCwgdGV4dDogdmFsIH0pLmFwcGVuZFRvKHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zLnByZXBlbmQoXCIuc2luZ2xlLWRlc2NyaXB0aW9uXCIpOyAvLyBvciB3aGVyZXZlciBpdCBzaG91bGQgYmVcbiAgICAgICAgJChcIi5zaW5nbGUtZGVzY3JpcHRpb25cIikucHJlcGVuZChzKTtcbiAgICB9LFxuICAgIGhhbmRsZVNlbGVjdFllYXI6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcInNlbGVjdCN5ZWFyXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoXCJpbnB1dCNzZWFyY2hcIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFllYXIgPSBwYXJzZUludCgodGhpcyBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpO1xuXG4gICAgICAgICAgICAkKFwiLndwLWJsb2NrLWxpc3RcIikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGV0dGVyID0gJCh0aGlzKS5zaWJsaW5ncyhcInBcIilbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8vJChsZXR0ZXIpLmFkZENsYXNzKFwibGV0dGVyXCIpO1xuICAgICAgICAgICAgICAgIC8vJChsZXR0ZXIpLmFkZENsYXNzKFwibGV0dGVyXCIgKyBpbmRleCk7XG4gICAgICAgICAgICAgICAgbGV0IGhpZGVMZXR0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICQodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKClcbiAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCA9ICQodGhpcykudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgcmVzID0gdGV4dC5tYXRjaEFsbCgvKD86KD86MTl8MjApWzAtOV17Mn0pLyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoaWRlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gLyg/Oig/OjE5fDIwKVswLTldezJ9KS9nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbWF0Y2ggb2YgdGV4dC5tYXRjaEFsbChyZWdleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKG1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeWVhciA9IHBhcnNlSW50KG1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWVhciA9PT0gc2VsZWN0ZWRZZWFyICYmIGhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
4181H1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGUgJiYgc2VsZWN0ZWRZZWFyICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImhpZGU6XCIgKyAkKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaWRlTGV0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVMZXR0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhpZGVMZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgJChsZXR0ZXIpLmFkZENsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQobGV0dGVyKS5yZW1vdmVDbGFzcyhcImlzLWhpZGRlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZVllYXJzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB5ZWFycyA9IFtdIGFzIE51bWJlcltdO1xuICAgICAgICAkKFwiLndwLWJsb2NrLWxpc3QgbGlcIikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coaW5kZXggKyBcIjogXCIgKyAkKHRoaXMpLnRleHQoKSk7XG4gICAgICAgICAgICBsZXQgdGV4dCA9ICQodGhpcykudGV4dCgpO1xuICAgICAgICAgICAgLy92YXIgcmVzID0gdGV4dC5tYXRjaEFsbCgvKD86KD86MTl8MjApWzAtOV17Mn0pLyk7XG5cbiAgICAgICAgICAgIGxldCByZWdleCA9IC8oPzooPzoxOXwyMClbMC05XXsyfSkvZztcbiAgICAgICAgICAgIGZvciAobGV0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwocmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPT09IDIwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgheWVhcnMuaW5jbHVkZXMoeWVhcikpIHllYXJzLnB1c2goeWVhcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3RvcmljYWwuY3JlYXRlWWVhckRyb3Bkb3duTGlzdChhd2FpdCBoaXN0b3JpY2FsLnNvcnRZZWFycyh5ZWFycykpO1xuICAgICAgICBoaXN0b3JpY2FsLmhhbmRsZVNlbGVjdFllYXIoKTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZywgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZSkge1xuICAgICAgICBoaXN0b3JpY2FsLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGlzdG9yaWNhbCBpbml0XCIsIGhpc3RvcmljYWwuX2xvY2FsZSk7XG4gICAgICAgIGF3YWl0IGhpc3RvcmljYWwuYWRkTGV0dGVyQ2xhc3NlcygpO1xuICAgICAgICBhd2FpdCBoaXN0b3JpY2FsLnBhcnNlWWVhcnMoKTtcbiAgICAgICAgYXdhaXQgaGlzdG9yaWNhbC5jcmVhdGVTZWFyY2hJbnB1dCgpO1xuICAgICAgICBhd2FpdCBoaXN0b3JpY2FsLmhhbmRsZVNlYXJjaEFjdCgpO1xuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgeyBzaXRlIH0gZnJvbSBcIi4vc2l0ZVwiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuaW1wb3J0IHsgY29udGVudFNlcnZpY2UsIENsYW5kZXN0aW5vQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0V2ZW50IH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UsIFBhZ2VzIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgdmVudWVTZXJ2aWNlIH0gZnJvbSBcIi4vdmVudWVTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoaXN0b3JpY2FsIH0gZnJvbSBcIi4vaGlzdG9yaWNhbFwiO1xuXG5leHBvcnQgY29uc3QgaW5mbyA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgYWxsQ29udGVudHM6IFtdIGFzIENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgIHJlbmRlclBvc3Q6IGZ1bmN0aW9uIChjb250ZW50OiBDbGFuZGVzdGlub0NvbnRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmsgPSBgJHtjb25maWcuc2l0ZUZvbGRlcn1pbmZvLyR7Y29udGVudC5zbHVnfS9gO1xuICAgICAgICBsZXQgZGF0YUZvcm1hdCA9IFwiXCI7XG5cbiAgICAgICAgaWYgKGNvbnRlbnQubGFuaykge1xuICAgICAgICAgICAgbGluayA9IGNvbnRlbnQubGFuaztcbiAgICAgICAgICAgIGRhdGFGb3JtYXQgPSBgIGRhdGEtZm9ybWF0PVwibGlua1wiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBocmVmPVwiJHtsaW5rfVwiIGRhdGEtaWQ9XCIke2NvbnRlbnQuaWR9XCIgZGF0YS1zbHVnPVwiaW5mby8ke2NvbnRlbnQuc2x1Z31cIiR7ZGF0YUZvcm1hdH0gY2xhc3M9XCJzaW5nbGUtYm94IGluZm8gJHtjb250ZW50LnNsdWd9XCIgdGl0bGU9XCIke2NvbnRlbnQudGl0bGV9XCIgcmVsPVwiYm9va21hcmtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0aW9uLXRleHRcIiBpZD1cIjBcIj48aDI+JHtjb250ZW50LnRpdGxlfTwvaDI+PC9kaXY+XG4gICAgICAgICAgICA8L2E+YDtcbiAgICAgICAgJChgI2NvbnRlbn
4181RgKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChcbiAgICAgICAgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgICAgICBsb2NhbGU6IHN0cmluZyxcbiAgICAgICAgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZVxuICAgICkge1xuICAgICAgICBjb250ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaW5mby5yZW5kZXJQb3N0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluZm8ubGlzdGVuQm94ZXMobG9jYWxlLCBjdXJyZW50UGFnZSk7XG4gICAgfSxcbiAgICBsb2FkOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBpbmZvP3Blcl9wYWdlPSR7Y29uZmlnLnBhZ2VTaXplfSZmaWx0ZXJbb3JkZXJieV09bWV0YV92YWx1ZV9udW0mZmlsdGVyW21ldGFfa2V5XT1vcmRuaW5nJmZpbHRlcltvcmRlcl09QVNDYFxuICAgICAgICApO1xuICAgIH0sXG4gICAgbG9hZFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IFwiXCI7XG4gICAgICAgIGlmIChwb3N0SWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IHBvc3RJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IFwiP3NsdWc9XCIgKyBwb3N0U2x1ZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQuZ2V0KGNvbmZpZy5nZXRSZXN0VXJsKCkgKyBcImluZm8vXCIgKyBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBCeSBzbHVnIHJldHVybnMgYXJyYXlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGxpc3RlbkJveGVzOiBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbmZvIGxpc3RlbkJveGVzXCIpO1xuICAgICAgICAkKFwiYS5zaW5nbGUtYm94XCIpLmNsaWNrKGFzeW5jIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2Y
4181XIgcG9zdEZvcm1hdCA9ICQodGhpcykuZGF0YShcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIHZhciBzbHVnID0gJCh0aGlzKS5kYXRhKFwic2x1Z1wiKTtcbiAgICAgICAgICAgIGlmIChcImxpbmtcIiA9PT0gcG9zdEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBhd2FpdCBzaXRlLmhhbmRsZUNsaWNrKHRoaXMsIFwiaW5mb1wiKTtcbiAgICAgICAgICAgIGlmIChzbHVnLmluY2x1ZGVzKFwicHJldmlvdXNcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBIYWNraXNoXG4gICAgICAgICAgICAgICAgaGlzdG9yaWNhbC5pbml0KGxvY2FsZSwgY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGdldDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbmZvLmFsbENvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLmFsbENvbnRlbnRzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3N0cyA9IGF3YWl0IGluZm8ubG9hZCgpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdID0gW107XG4gICAgICAgIHBvc3RzLmZvckVhY2goKHBvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChjb250ZW50U2VydmljZS5jb252ZXJ0KHBvc3QsIGxvY2FsZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH0sXG4gICAgYWRkVmVudWVzOiBhc3luYyBmdW5jdGlvbiAoY29udGVudDogQ2xhbmRlc3Rpbm9Db250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBpbmZvLmFkZFZlbnVlcyAke2NvbnRlbnQuc2x1Z31gKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29udGVudC5zbHVnID09PVxuICAgICAgICAgICAgc2l0ZW1hcFtMb2NhbGVzW2luZm8uX2xvY2FsZSBhcyBMb2NhbGVzXV0uVkVOVUVTLnNpbmdsZVVybFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHZlbnVlU2VydmljZS5pbml0KGluZm8uX2xvY2FsZSk7XG4gICAgICAgICAgICB2ZW51ZVNlcnZpY2UuYWxsVmVudWVzLmZvckVhY2goKHZlbnVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVudWVTZXJ2aWNlLmFwcGVuZChjb250ZW50LCB2ZW51ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9LFxuICAgIGdldFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBpbmZvLmdldFNpbmdsZSAke3Bvc3RJZH0gJHtwb3N0U2x1Z31gKTtcbiAgICAgICAgcmV0dXJuIGluZm8uYWRkVmVudWVzKFxuICAgICAgICAgICAgY29udGVudFNlcnZpY2UuY29udmVydChcbiAgICAgICAgICAgICAgICBhd2FpdCBpbmZvLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksXG4gICAgICAgICAgICAgICAgaW5mby5fbG9jYWxlXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgaW5mby5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBpbmZvLmFsbENvbnRlbnRzID0gYXdhaXQgaW5mby5nZXQobG9jYWxlKTtcbiAgICAgICAgaW5mby5wYXJzZShpbmZvLmFsbENvbnRlbnRzLCBsb2NhbGUsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbmZvIGluaXRcIiwgaW5mby5fbG9jYWxlKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImluZm8gY3VycmVudCBwYWdlXCIsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlLnNpbmdsZVVybCkge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAoYXdhaXQgaW5mby5nZXRTaW5nbGUoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZS5zaW5nbGVVcmxcbiAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICBhd2FpdCBzaXRlLmxvYWRTaW5nbGUoY29udGVudC5pZCwgY3VycmVudFBhZ2Uuc2luZ2xlVXJsLCBcImluZm9cIik7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2Uuc3ViUGFnZSA9PT0gUGFnZXMuSElTVE9SSUNBTCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGhpc3RvcmljYWwuaW5pdChsb2NhbGUsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuIiwiY29uc3QgdHJhbnNsYXRpb24gPSB7XG4gICAgc3Y6IHtcbiAgICAgICAgQmlsamV0dDogXCJCaWxqZXR0XCIsXG4gICAgICAgIEJpbGpldHRQbDogXCJCaWxqZXR0ZXJcIixcbiAgICAgICAgRG9vcnM6IFwiRMO2cnJhciDDtnBwbmFyXCIsXG4gICAgICAgIE9wZW5zOiBcIsOWcHBuYXJcIixcbiAgICAgICAgU29sZE91dDogXCJTbHV0c8OlbGRcIixcbiAgICAgICAgQ2FuY2VsbGVkOiBcIkluc3TDpGxsZFwiLFxuICAgICAgICBTZWxlY3RZZWFyOiBcIlbDpGxqIMOlclwiLFxuICAgICAgICBTZWFyY2hBY3Q6IFwiU8O2ayBha3RcIixcbiAgICAgICAgLy9DbGFuZGVzdGlub0Zlc3RpdmFsOiBcIkNsYW5kZXN0aW5vIEZlc3RpdmFsPGJyPjI5IG1hauKAkzEganVuaSAyMDI1XCIsXG4gICAgICAgIENsYW5kZXN0aW5vRmVzdGl2YWw6IFwiQ2xhbmRlc3Rpbm8gRmVzdGl2YWxcIixcbiAgICAgICAgR29sZHBhc3M6IFwiR3VsZHBhc3NcIixcbiAgICAgICAgRmVzdGl2YWxwYXNzOiBcIkZlc3RpdmFscGFzc1wiLFxuICAgICAgICBLbDogXCJrbFwiLFxuICAgICAgICBGcmVlQWRtaXNzaW9uUmVnaXN0cmF0aW9uUmVxdWlyZWQ6IFwiRnJpIGVudHLDqSDigJMgQW5tw6RsYW4ga3LDpHZzXCJcbiAgICB9LFxuICAgIGVuOiB7XG4gICAgICAgIEJpbGpldHQ6IFwiVGlja2V0XCIsXG4gICAgICAgIEJpbGpldHRQbDogXCJUaWNrZXRzXCIsXG4gICAgICAgIERvb3JzOiBcIkRvb3JzIG9wZW5cIixcbiAgICAgICAgT3BlbnM6IFwiT3BlblwiLFxuICAgICAgICBTb2xkT3V0OiBcIlNvbGQgT3V0XCIsXG4gICAgICAgIENhbmNlbGxlZDogXCJDYW5jZWxsZWRcIixcbiAgICAgICAgU2VsZWN0WWVhcjogXCJTZWxlY3QgeWVhclwiLFxuICAgICAgICBTZWFyY2hBY3Q6IFwiU2VhcmNoIGFjdFwiLFxuICAgICAgICAvL0NsYW5kZXN0aW5vRmVzdGl2YWw6IFwiQ2xhbmRlc3Rpbm8gRmVzdGl2YWw8YnI+TWF5IDI54oCTSnVuZSAxIDIwMjVcIixcbiAgICAgICAgQ2xhbmRlc3Rpbm9GZXN0aXZhbDogXCJDbGFuZGVzdGlubyBGZXN0aXZhbFwiLFxuICAgICAgICBHb2xkcGFzczogXCJHb2xkIFBhc3NcIixcbiAgICAgICAgRmVzdGl2YWxwYXNzOiBcIkZlc3RpdmFsIFBhc3NcIixcbiAgICAgICAgS2w6IFwiaHJzXCIsXG4gICAgICAgIEZyZWVBZG1pc3Npb25SZWdpc3RyYXRpb25SZXF1aXJlZDogXCJGcmVlIGFkbWlzc2lvbiDigJMgUmVnaXN0cmF0aW9uIHJlcXVpcmVkXCJcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlID0ge1xuICAgIGdldDogZnVuY3Rpb24obGFuOnN0cmluZywgdHJhbnM6c3RyaW5nKSB7XG4gICAgICAgI
4181HJldHVybiAodHJhbnNsYXRpb24gYXMgYW55KVtsYW5dW3RyYW5zXTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnbGFuZ3VhZ2UgaW5pdCcpO1xuICAgIH1cbn0iLCJleHBvcnQgY29uc3QgbG9nbyA9IHtcbiAgICBzY3JvbGxlZExvZ286IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBzY3JvbGxlZCA9ICgkKCcuc2Nyb2xsZWQnKS5sZW5ndGg+MClcbiAgICAgICAgdmFyIHNpbmdsZVZpZXcgPSAoJCgnLnNpbmdsZS1mb2N1cycpLmxlbmd0aD4wKVxuICAgICAgICBsZXQgc2Nyb2xsT2JqZWN0O1xuICAgICAgICBsZXQgYnJlYWtwb2ludDtcblxuICAgICAgICBpZihzaW5nbGVWaWV3KSB7XG4gICAgICAgICAgICBpZihzY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbE9iamVjdCA9ICQoJy5zaW5nbGUtZGVzY3JpcHRpb24nKS5maXJzdCgpXG4gICAgICAgICAgICBicmVha3BvaW50ID0gMTEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Nyb2xsT2JqZWN0ID0gJCgnI2NvbnRlbnQnKS5maXJzdCgpO1xuICAgICAgICAgICAgYnJlYWtwb2ludCA9IC05MDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250ZW50UG9zVG9wID0gc2Nyb2xsT2JqZWN0LnBvc2l0aW9uKCkudG9wO1xuICAgICAgICBpZihjb250ZW50UG9zVG9wPGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICQoJy5zaXRlLXRpdGxlJykuYWRkQ2xhc3MoJ3Njcm9sbGVkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcuc2l0ZS10aXRsZScpLnJlbW92ZUNsYXNzKCdzY3JvbGxlZCcpO1xuICAgICAgICB9XG5cbiAgICB9LFxuICAgIGxpc3RlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaWRTY3JvbGwgPSBmYWxzZTtcblxuICAgICAgICBkb2
4181N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd2hlZWwnLCAoIGV2dCApID0+IHtcbiAgICAgICAgICAgIGRpZFNjcm9sbCA9IHRydWU7XG4gICAgICAgIH0sIHsgY2FwdHVyZTogZmFsc2UsIHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3RvdWNobW92ZScsICggZXZ0ICkgPT4ge1xuICAgICAgICAgICAgZGlkU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgfSwgeyBjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggZGlkU2Nyb2xsICkge1xuICAgICAgICAgICAgICAgIGRpZFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxvZ28uc2Nyb2xsZWRMb2dvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDE3MCk7XG5cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9nbyBpbml0Jyk7XG4gICAgICAgIGxvZ28ubGlzdGVuKCk7XG4gICAgfVxufSIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZSB9IGZyb20gXCIuL3NpdGVcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCB7IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCwgU29ydE9yZGVyIH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5cbmV4cG9ydCBjb25zdCBuZXdzID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLnJlbmRlclBvc3QoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgbmV3cy5wYXJzZShldmVudHMpO1xuICAgICAgICBuZXdzLmxpc3RlbkJveGVzKCk7XG4gICAgfSxcbiAgICBsaXN0ZW5Cb3hlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIm5ld3MgbGlzdGVuQm94ZXNcIik7XG4gICAgICAgICQoXCJhLnNpbmdsZS1ib3hcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHNpdGUuaGFuZGxlQ2xpY2sodGhpcyk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZywgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZSkge1xuICAgICAgICBuZXdzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIC8vYXdhaXQgZXZlbnRTZXJ2aWNlLmluaXQobG9jYWxlKTtcbiAgICAgICAgYXdhaXQgY29udGVudFNlcnZpY2UuaW5pdChsb2NhbGUsIGN1cnJlbnRQYWdlLmNhdGVnb3J5KTtcblxuICAgICAgICBldmVudFNlcnZpY2UuYXBwZW5kQ29udGVudChjb250ZW50U2VydmljZS5hbGxDb250ZW50cyk7XG4gICAgICAgIG5ld3MuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICBlLmNhdGVnb3JpZXMuaW5jbHVkZXMoY3VycmVudFBhZ2UuY2F0ZWdvcnkpXG4gICAgICAgICk7XG5cbiAgICAgICAgbmV3cy5hbGxFdmVudHMgPSBldmVudFNlcnZpY2Uuc29ydFN0aWNreShcbiAgICAgICAgICAgIG5ld3MuYWxsRXZlbnRzLFxuICAgICAgICAgICAgU29ydE9yZGVyLlJBTkRPTVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFkZEV4dHJhQ2xhc3NlcyhuZXdzLmFsbEV2ZW50cyk7XG5cbiAgICAgICAgbmV3cy5sb2FkKG5ld3MuYWxsRXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIm5ld3MgaW5pdFwiLCBuZXdzLl9sb2NhbGUpO1xuICAgIH0sXG59O1xuIiwiZXhwb3J0IGVudW0gUGFnZXMge1xuICAgIE5FV1MgPSBcIk5FV1NcIixcbiAgICBQUk9HUkFNID0gXCJQUk9HUkFNXCIsXG4gICAgVElDS0VUUyA9IFwiVElDS0VUXCIsXG4gICAgU0NIRURVTEUgPSBcIlNDSEVEVUxFXCIsXG4gICAgQ0FMRU5EQVIgPSBcIkNBTEVOREFSXCIsXG4gICAgSU5GTyA9IFwiSU5GT1wiLFxuICAgIFZFTlVFUyA9IFwiVkVOVUVTXCIsXG4gICAgQkFDS1NUQUdFID0gXCJCQUNLU1RBR0VcIixcbiAgICAvL0FDQ0VTU0lCSUxJVFkgPSBcIkFDQ0VTU0lCSUxJVFlcIixcbiAgICBGQVEgPSBcIkZBUVwiLFxuICAgIFBBUlRORVJTID0gXCJQQVJUTkVSU1wiLFxuICAgIFBPRENBU1QgPSBcIlBPRENBU1RcIixcbiAgICBISVNUT1JJQ0FMID0gXCJISVNUT1JJQ0FMXCIsXG4gICAgQVJDSElWRV9PRl9JTUFHRVMgPSBcIkFSQ0hJVkVfT0ZfSU1BR0VTXCIsXG4gICAgUFJFU1MgPSBcIlBSRVNTXCIsXG59XG5cbmV4cG9ydCBlbnVtIExvY2FsZXMge1xuICAgIHN2ID0gXCJzdlwiLFxuICAgIGVuID0gXCJlblwiLFxufVxuXG5leHBvcnQgdHlwZSBDbGFuZGVzdGlub1BhZ2UgPSB7XG4gICAgcGFnZTogUGFnZXM7XG4gICAgc3ViUGFnZT86IFBhZ2VzO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNpbmdsZVVybD86IHN0cmluZztcbiAgICBjYXRlZ29yeT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vU2l0ZW1hcCA9IHtcbiAgICBba2V5IGluIExvY2FsZXNdOiB7XG4gICAgICAgIFtrZXkgaW4gUGFnZXNdPzogQ2xhbmRlc3Rpbm9QYWdlO1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2l0ZW1hcDogQ2xhbmRlc3Rpbm9TaXRlbWFwID0ge1xuICAgIFtMb2NhbGVzLnN2XToge1xuICAgICAgICBORVdTOiB7IHBhZ2U6IFBhZ2VzLk5FV1MsIHVybDogXCJcIiwgY2F0ZWdvcnk6IDkgfSxcbiAgICAgICAgUFJPR1JBTTogeyBwYWdlOiBQYWdlcy5QUk9HUkFNLCB1cmw6IFwicHJvZ3JhbVwiLCBjYXRlZ29yeTogMTEgfSxcbiAgICAgICAgVElDS0VUOiB7IHBhZ2U6IFBhZ2VzLlRJQ0tFVFMsIHVybDogXCJiaWxqZXR0ZXJcIiB9LFxuICAgICAgICBTQ0hFRFVMRTogeyBwYWdlOiBQYWdlcy5TQ0hFRFVMRSwgdXJsOiBcInNwZWxzY2hlbWFcIiB9LFxuICAgICAgICBDQUxFTkRBUjogeyBwYWdlOiBQYWdlcy5DQUxFTkRBUiwgdXJsOiBcImthbGVuZGVyXCIgfSxcbiAgICAgICAgSU5GTzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiIH0sXG4gICAgICAgIFZFTlVFUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwic2NlbmVyXCIgfSxcbiAgICAgICAgLy8gQUNDRVNTSUJJTElUWToge1xuICAgICAgICAvLyAgICAgcGFnZTogUGFnZXMuSU5GTyxcbiAgICAgICAgLy8gICAgI
4181HVybDogXCJpbmZvXCIsXG4gICAgICAgIC8vICAgICBzaW5nbGVVcmw6IFwidGlsbGdhbmdsaWdoZXRcIixcbiAgICAgICAgLy8gfSxcbiAgICAgICAgRkFROiB7IHBhZ2U6IFBhZ2VzLklORk8sIHVybDogXCJpbmZvXCIsIHNpbmdsZVVybDogXCJmYXFcIiB9LFxuICAgICAgICBQQVJUTkVSUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwicGFydG5lcnNcIiB9LFxuICAgICAgICBCQUNLU1RBR0U6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcImJhY2tzdGFnZVwiIH0sXG4gICAgICAgIEhJU1RPUklDQUw6IHtcbiAgICAgICAgICAgIHBhZ2U6IFBhZ2VzLklORk8sXG4gICAgICAgICAgICBzdWJQYWdlOiBQYWdlcy5ISVNUT1JJQ0FMLFxuICAgICAgICAgICAgdXJsOiBcImluZm9cIixcbiAgICAgICAgICAgIHNpbmdsZVVybDogXCJwcmV2aW91cy1saW5lLXVwXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFBPRENBU1Q6IHsgcGFnZTogUGFnZXMuUE9EQ0FTVCwgdXJsOiBcInBvZHNcIiwgY2F0ZWdvcnk6IDEwIH0sXG4gICAgICAgIEFSQ0hJVkVfT0ZfSU1BR0VTOiB7IHBhZ2U6IFBhZ2VzLkFSQ0hJVkVfT0ZfSU1BR0VTLCB1cmw6IFwiYmlsZGFya2l2XCIgfSxcbiAgICAgICAgUFJFU1M6IHsgcGFnZTogUGFnZXMuUFJFU1MsIHVybDogXCJwcmVzc1wiIH0sXG4gICAgfSxcbiAgICBbTG9jYWxlcy5lbl06IHtcbiAgICAgICAgTkVXUzogeyBwYWdlOiBQYWdlcy5ORVdTLCB1cmw6IFwiXCIsIGNhdGVnb3J5OiAxNSB9LFxuICAgICAgICBQUk9HUkFNOiB7IHBhZ2U6IFBhZ2VzLlBST0dSQU0sIHVybDogXCJwcm9ncmFtXCIsIGNhdGVnb3J5OiAxNyB9LFxuICAgICAgICBUSUNLRVQ6IHsgcGFnZTogUGFnZXMuVElDS0VUUywgdXJsOiBcInRpY2tldHNcIiB9LFxuICAgICAgICBTQ0hFRFVMRTogeyBwYWdlOiBQYWdlcy5TQ0hFRFVMRSwgdXJsOiBcInNjaGVkdWxlXCIgfSxcbiAgICAgICAgQ0FMRU5EQVI6IHsgcGFnZTogUGFnZXMuQ0FMRU5EQVIsIHVybDogXCJjYWxlbmRhclwiIH0sXG4gICAgICAgIElORk86IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiB9LFxuICAgICAgICBWRU5VRVM6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcInZlbnVlc1wiIH0sXG4gICAgICAgIC8vIEFDQ0VTU0lCSUxJVFk6IHtcbiAgICAgICAgLy8gICAgIHBhZ2U6IFBhZ2VzLklORk8sXG4gICAgICAgIC8vICAgICB1cmw6IFwiaW5mb1wiLFxuICAgICAgICAvLyAgICAgc2luZ2xlVXJsOiBcImFjY2Vzc2liaWxpdHlcIixcbiAgICAgICAgLy8gfSxcbiAgICAgICAgRkFROiB7IHBhZ2U6IFBhZ2VzLklORk8sIHVybDogXCJpbmZvXCIsIHNpbmdsZVVybDogXCJmYXFcIiB9LFxuICAgICAgICBQQVJUTkVSUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwicGFydG5lcnNcIiB9LFxuICAgICAgICBCQUNLU1RBR0U6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcImJhY2tzdGFnZVwiIH0sXG4gICAgICAgIFBPRENBU1Q6IHsgcGFnZTogUGFnZXMuUE9EQ0FTVCwgdXJsOiBcInBvZHNcIiwgY2F0ZWdvcnk6IDE2IH0sXG4gICAgICAgIEFSQ0hJVkVfT0ZfSU1BR0VTOiB7XG4gICAgICAgICAgICBwYWdlOiBQYWdlcy5BUkNISVZFX09GX0lNQUdFUyxcbiAgICAgICAgICAgIHVybDogXCJhcmNoaXZlLW9mLWltYWdlc1wiLFxuICAgICAgICB9LFxuICAgICAgICBQUkVTUzogeyBwYWdlOiBQYWdlcy5QUkVTUywgdXJsOiBcInByZXNzXCIgfSxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2UgPSB7XG4gICAgZmluZFBhZ2VCeVVybDogZnVuY3Rpb24gKFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgc3ViUGFnZTogc3RyaW5nLFxuICAgICAgICBsb2NhbGU6IExvY2FsZXNcbiAgICApOiBDbGFuZGVzdGlub1BhZ2Uge1xuICAgICAgICBsZXQgcGFnZSA9IE9iamVjdC52YWx1ZXMoc2l0ZW1hcFtsb2NhbGVdKS5maW5kKFxuICAgICAgICAgICAgKGUpID0+IGUudXJsID09PSB1cmwgJiYgZS5zaW5nbGVVcmwgPT09IHN1YlBhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2l0ZW1hcFtsb2NhbGVdKS5maW5kKChlKSA9PiBlLnVybCA9PT0gdXJsKTtcbiAgICB9LFxufTsiLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9Db250ZW50IH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCB9IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgQ2xhbmRlc3Rpbm9QYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuXG5leHBvcnQgY29uc3QgcG9kcyA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgYWxsQ29udGVudHM6IFtdIGFzIENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgIGFyY2hpdmVQb2RCZWZvcmVJZDogMTIzNDQsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChjb250ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgY29udGVudHMuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQuaWQgPD0gcG9kcy5hcmNoaXZlUG9kQmVmb3JlSWQgfHwgY29udGVudC5pZCA9PSAxMjMzMykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQuZXh0cmFDc3NDbGFzcyA9IFwicG9kcy1hcmNoaXZlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBjb250ZW50IGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPSBcInBvZHNcIjtcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5yZW5kZXJQb3N0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdLCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBwb2RzLnBhcnNlKGNvbnRlbn
4181RzKTtcbiAgICAgICAgcG9kcy5saXN0ZW5Cb3hlcygpO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJwb2RzIGxpc3RlbkJveGVzXCIpO1xuICAgICAgICAkKFwiYS5zaW5nbGUtYm94XCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgcG9kcy5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5pbml0KGxvY2FsZSwgY3VycmVudFBhZ2UuY2F0ZWdvcnkpO1xuICAgICAgICBwb2RzLmFsbENvbnRlbnRzID0gY29udGVudFNlcnZpY2UuYWxsQ29udGVudHM7XG5cbiAgICAgICAgcG9kcy5sb2FkKHBvZHMuYWxsQ29udGVudHMsIGxvY2FsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicG9kcyBpbml0XCIsIHBvZHMuX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBldmVudFNlcnZpY2UsIENsYW5kZXN0aW5vRXZlbnQgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyYW0gPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbEV2ZW50czogW10gYXMgQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgIHJlbW92ZUFmdGVyRGF5czogMSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLnJlbmRlclBvc3QoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgcHJvZ3JhbS5wYXJzZShldmVudHMpO1xuICAgICAgICBwcm9ncmFtLmxpc3RlbkJveGVzKCk7XG4gICAgfSxcbiAgICBsaXN0ZW5Cb3hlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImxpbmV1cCBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImEuc2luZ2xlLWJveFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgc2l0ZS5oYW5kbGVDbGljayh0aGlzKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHByb2dyYW0uX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcHJvZ3JhbS5hbGxFdmVudHMgPSBhd2FpdCBldmVudFNlcnZpY2UuZ2V0KGxvY2FsZSk7XG4gICAgICAgIHByb2dyYW0uYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLnNvcnRQYXN0QW5kRnV0dXJlKFxuICAgICAgICAgICAgcHJvZ3JhbS5hbGxFdmVudHMsXG4gICAgICAgICAgICBkYXlqcygpLnN1YnRyYWN0KHByb2dyYW0ucmVtb3ZlQWZ0ZXJEYXlzLCBcImRheXNcIikudG9EYXRlKClcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZ3JhbS5sb2FkKHByb2dyYW0uYWxsRXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjb250ZW50U2VydmljZS5hZGRFeHRyYUNsYXNzZXMocHJvZ3JhbS5hbGxFdmVudHMpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImxpbmV1cCBpbml0XCIsIHByb2dyYW0uX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBldmVudFNlcnZpY2UsIENsYW5kZXN0aW5vRXZlbnQgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tIFwiZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlXCI7XG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tIFwiZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIHZlbnVlczogQ2xhbmRlc3Rpbm9WZW51ZVRyYWNrW107XG4gICAgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W107XG4gICAgc3RhcnRTbG90PzogRGF0ZTtcbiAgICBlbmRTbG90PzogRGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vVmVudWVUcmFjayA9IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHRyYWNrOiBudW1iZXI7XG4gICAgZG9vcnNPcGVuOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2NoZWR1bGUgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbEV2ZW50czogW10gYXMgQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgIGFsbFZlbnVlczogW10gYXMgc3RyaW5nW10sXG4gICAgc2xvdHNUb1JlbmRlcjogODAsXG4gICAgcmVtb3ZlQWZ0ZXJEYXlzOiAxLFxuICAgIHJlbmRlclNsb3Q6IGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgICAgZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQsXG4gICAgICAgIHN0YXJ0VGltZTogRGF0ZSxcbiAgICAgICAgZW5kVGltZTogRGF0ZSxcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZ1xuICAgICkge1xuICAgICAgICB2Y
4181XIgc3RhcnRTbG90ID0gc3RhcnRUaW1lXG4gICAgICAgICAgICA/IHNjaGVkdWxlLnJvdW5kVGltZShkYXlqcyhzdGFydFRpbWUpKS5mb3JtYXQoXCJISG1tXCIpXG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHZhciBlbmRTbG90ID0gZW5kVGltZVxuICAgICAgICAgICAgPyBzY2hlZHVsZS5yb3VuZFRpbWUoZGF5anMoZW5kVGltZSkpLmZvcm1hdChcIkhIbW1cIilcbiAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICBsZXQgdGVtcGxhdGUgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2hlZHVsZS1pdGVtXCIgIGRhdGEtaWQ9XCIke1xuICAgICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfVwiIHN0eWxlPVwiZ3JpZC1jb2x1bW46IHRyYWNrLSR7XG4gICAgICAgICAgICBldmVudC50cmFja1xuICAgICAgICB9OyBncmlkLXJvdzogdGltZS0ke3N0YXJ0U2xvdH0gLyB0aW1lLSR7ZW5kU2xvdH07YmFja2dyb3VuZC1jb2xvcjoke1xuICAgICAgICAgICAgZXZlbnQudmVudWUuY29sb3JcbiAgICAgICAgfVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpbWVcIj4ke2RheWpzKHN0YXJ0VGltZSkuZm9ybWF0KFwiSEgubW1cIil94oCTJHtkYXlqcyhcbiAgICAgICAgICAgIGVuZFRpbWVcbiAgICAgICAgKS5mb3JtYXQoXCJISC5tbVwiKX08L3A+XG4gICAgICAgICAgICAgICAgPGgyPiR7ZXZlbnQudGl0bGV9PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAkKHNlbGVjdG9yKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnQ6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgc2VsZWN0b3I6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlbmRlckV2ZW50XCIsIGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90KFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBldmVudC5zdGFydFRpbWUsXG4gICAgICAgICAgICBldmVudC5lbmRUaW1lLFxuICAgICAgICAgICAgc2VsZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImV2ZW50LnN0YXJ0VGltZTJcIiwgZXZlbnQuc3RhcnRUaW1lMik7XG4gICAgICAgIGlmIChldmVudC5zdGFydFRpbWUyICYmIGV2ZW50LmVuZFRpbWUyKSB7XG4gICAgICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90KFxuICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0VGltZTIsXG4gICAgICAgICAgICAgICAgZXZlbnQuZW5kVGltZTIsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN0YXJ0VGltZTMgJiYgZXZlbnQuZW5kVGltZTMpIHtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclNsb3QoXG4gICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRUaW1lMyxcbiAgICAgICAgICAgICAgICBldmVudC5lbmRUaW1lMyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcm91bmRUaW1lOiBmdW5jdGlvbiAoZGF0ZTogZGF5anMuRGF5anMpIHtcbiAgICAgICAgdmFyIG1pbnV0ZXMgPSBkYXRlLmZvcm1hdChcIm1tXCIpO1xuICAgICAgICBpZiAoW1wiMDBcIiwgXCIxNVwiLCBcIjMwXCIsIFwiNDVcIl0uaW5jbHVkZXMobWludXRlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXlqcyhNYXRoLmNlaWwoZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCkgLyA5MDAwMDApICogOTAwMDAwKTtcbiAgICB9LFxuICAgIGFkZFRpbWVTbG90OiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIHRpbWVTbG90OiBkYXlqcy5EYXlqcyxcbiAgICAgICAgc2xvdFNpemU6IG51bWJlcixcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICAgICAgaGlkZGVuOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgdmFyIHRpbWVTbG90RW5kID0gdGltZVNsb3QuYWRkKHNsb3RTaXplLCBcIm1cIik7XG4gICAgICAgICQoc2VsZWN0b3IpLmFwcGVuZChcbiAgICAgICAgICAgIGA8aDMgY2xhc3M9XCJ0aW1lLXNsb3QgJHtoaWRkZW59XCIgc3R5bGU9XCJncmlkLXJvdzogdGltZS0ke3RpbWVTbG90LmZvcm1hdChcbiAgICAgICAgICAgICAgICBcIkhIbW1cIlxuICAgICAgICAgICAgKX0gLyB0aW1lLSR7dGltZVNsb3RFbmQuZm9ybWF0KFwiSEhtbVwiKX07XCI+JHt0aW1lU2xvdC5mb3JtYXQoXG4gICAgICAgICAgICAgICAgXCJISC5tbVwiXG4gICAgICAgICAgICApfTwvaDM+YFxuICAgICAgICApO1xuICAgIH0sXG4gICAgcmVuZGVyU2xvdHM6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVuZGVyU2xvdHNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF5LmV2ZW50cy5sZW5ndGhcIiwgZGF5LmV2ZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImRheS5ldmVudHNbMF1cIiwgZGF5LmV2ZW50c1swXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF5LnN0YXJ0U2xvdFwiLCBkYXkuc3RhcnRTbG90KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXkuZW5kU2xvdFwiLCBkYXkuZW5kU2xvdCk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lc2xvdCA9IGRheWpzKGRheS5kYXRlKS5hZGQoXG4gICAgICAgICAgICBjb25maWcuZWFybGllc3RFdmVudEhvdXIsXG4gICAgICAgICAgICBcImhcIlxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbG90c1RvUmVuZGVyOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuZXh0VGltZXNsb3QgPSBjdXJyZW50VGltZXNsb3QuYWRkKDE1LCBcIm1cIik7XG5cbiAgICAgICAgICAgIGxldCBoaWRkZW4gPSBcIlwiO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5pc1NhbWVPckJlZm9yZShkYXkuc3RhcnRTbG90KSB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5pc1NhbWVPckFmdGVyKGRheS5lbmRTbG90KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJyZW50VGltZXNsb3QuZm9ybWF0KCdISDptbScpKycgaXMgYmVmb3JlICcrZGF5LnN0YXJ0U2xvdC5mb3JtYXQoJ0hIOm1tJykpO1xuICAgICAgICAgICAgICAgIC8vY3VycmVudFRpbWVzbG90ID0gbmV4dFRpbWVzbG90O1xuICAgICAgICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgICAgICAgaGlkZGVuID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgI
4181H1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5mb3JtYXQoXCJtbVwiKSA9PSBcIjAwXCIgfHxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZXNsb3QuZm9ybWF0KFwibW1cIikgPT0gXCIzMFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZS5hZGRUaW1lU2xvdChjdXJyZW50VGltZXNsb3QsIDMwLCBkYXkuc2VsZWN0b3IsIGhpZGRlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGRheS5ldmVudHMuZmlsdGVyKCh7IHN0YXJ0VGltZSB9KSA9PlxuICAgICAgICAgICAgICAgIGRheWpzKHN0YXJ0VGltZSkuaXNCZXR3ZWVuKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZXNsb3QsXG4gICAgICAgICAgICAgICAgICAgIG5leHRUaW1lc2xvdCxcbiAgICAgICAgICAgICAgICAgICAgXCJzZWNvbmRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJbKVwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudHMubGVuZ3RoXCIgKyBldmVudHMubGVuZ3RoLCBkYXkuc2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJFdmVudChldmVudCwgZGF5LnNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJubyBldmVudHNcIiwgZGF5LnNlbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdCA9IG5leHRUaW1lc2xvdDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyVmVudWVzOiBhc3luYyBmdW5jdGlvbiAoZGF5OiBDbGFuZGVzdGlub0RheSkge1xuICAgICAgICBkYXkudmVudWVzLmZvckVhY2goKHZlbnVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmVudWVUaXRsZSA9IHZlbnVlLnRpdGxlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCImIzgyMDM7XCIsXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaHlwaGVuXCI+4oCQPC9zcGFuPidcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHZlbnVlVGl0bGUgPSB2ZW51ZVRpdGxlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCIsIFJpbmfDtm5cIixcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgJChkYXkuc2VsZWN0b3IpLmFwcGVuZChcbiAgICAgICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJ0cmFjay1zbG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJncmlkLWNvbHVtbjogdHJhY2stJHtcbiAgICAgICAgICAgICAgICAgICAgdmVudWUudHJhY2tcbiAgICAgICAgICAgICAgICB9OyBncmlkLXJvdzogdHJhY2tzO1wiPjxwIGNsYXNzPVwidGltZS1hbmQtcGxhY2VcIj4ke3ZlbnVlVGl0bGV9PC9wPjxwIGNsYXNzPVwiZG9vcnMtb3BlblwiPiR7bGFuZ3VhZ2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBzaXRlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgIFwiT3BlbnNcIlxuICAgICAgICAgICAgICAgICl9ICR7dmVudWUuZG9vcnNPcGVufTwvcD48L3NwYW4+YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICByZW5kZXJTY2hlZHVsZTogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZW5kZXJzY2hlZHVsZVwiKTtcblxuICAgICAgICBsZXQgZGF5VGl0bGUgPSBkYXlqcyhkYXkuZGF0ZSkuZm9ybWF0KFwiZGRkZCBEIE1NTU1cIik7XG4gICAgICAgICQoXCIuZW50cnktY29udGVudFwiKS5hcHBlbmQoYFxuICAgICAgICA8aDIgY2xhc3M9XCJzY2hlZHVsZS1kYXlcIj4ke2RheVRpdGxlfTwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2hlZHVsZSB0cmFja3Mke2RheS52ZW51ZXMubGVuZ3RofSAke2RheS5zZWxlY3Rvci5yZXBsYWNlKFxuICAgICAgICAgICAgXCIuXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICl9XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2NoZWR1bGUtaGVhZGluZ1wiPjwvZGl2PmApO1xuXG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclZlbnVlcyhkYXkpO1xuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90cyhkYXkpO1xuICAgIH0sXG4gICAgYWRkRXZlbnRUcmFja3M6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGRheS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnRyYWNrID0gZGF5LnZlbnVlcy5maW5kKFxuICAgICAgICAgICAgICAgIChlKSA9PiBlLnRpdGxlID09PSBldmVudC52ZW51ZS50aXRsZVxuICAgICAgICAgICAgKT8udHJhY2s7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgYWRkRGF5TGVuZ3RoOiBhc3luYyBmdW5jdGlvbiAoZGF5OiBDbGFuZGVzdGlub0RheSkge1xuICAgICAgICBsZXQgc3RhcnQgPSBkYXlqcyhkYXkuZXZlbnRzWzBdPy5zdGFydFRpbWUpO1xuICAgICAgICBsZXQgZW5kID0gZGF5anMoZGF5LmV2ZW50c1tkYXkuZXZlbnRzLmxlbmd0aCAtIDFdPy5lbmRUaW1lKTtcbiAgICAgICAgaWYgKGVuZC5ob3VyKCkgPCA4KSB7XG4gICAgICAgICAgICBlbmQgPSBlbmQuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGF5LnN0YXJ0U2xvdCA9IHN0YXJ0LnN1YnRyYWN0KDEsIFwiaG91clwiKS50b0RhdGUoKTtcbiAgICAgICAgZGF5LnN0YXJ0U2xvdCA9IHN0YXJ0LnRvRGF0ZSgpO1xuICAgICAgICAvL2RheS5lbmRTbG90ID0gZW5kLmFkZCgxLCBcImhvdXJcIikudG9EYXRlKCk7XG4gICAgICAgIGRheS5lbmRTbG90ID0gZW5kLnRvRGF0ZSgpO1xuICAgIH0sXG4gICAgYWRkRXZlbnRzOiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgICAgICBkYXk6IENsYW5kZXN0aW5vRGF5XG4gICAgKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXlqcyhldmVudC5zdGFydERhdGUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRheWpzKGRheS5kYXRlKS5pc1NhbW
4181UoZGF0ZSwgXCJkYXlcIikgJiZcbiAgICAgICAgICAgICAgICBldmVudC5zdGFydFRpbWUgJiZcbiAgICAgICAgICAgICAgICBldmVudC5lbmRUaW1lXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkYXkuZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkRXZlbnRcIiwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGFkZFZlbnVlczogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgbGV0IHRyYWNrID0gMTtcbiAgICAgICAgZGF5LmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIHZlbnVlVGl0bGUgPSBldmVudD8udmVudWUudGl0bGUgfHwgXCJ0YmFcIjtcbiAgICAgICAgICAgIGlmICghZGF5LnZlbnVlcy5zb21lKChlKSA9PiBlLnRpdGxlID09PSB2ZW51ZVRpdGxlKSkge1xuICAgICAgICAgICAgICAgIGxldCB2ZW51ZTogQ2xhbmRlc3Rpbm9WZW51ZVRyYWNrID0ge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmVudWVUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgIGRvb3JzT3BlbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRvb3JzT3BlbkZvcm1hdHRlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5anMoZXZlbnQuc3RhcnRUaW1lKS5mb3JtYXQoXCJILm1tXCIpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGF5LnZlbnVlcy5wdXNoKHZlbnVlKTtcbiAgICAgICAgICAgICAgICB0cmFjaysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNvcnRWZW51ZXM6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGRheS52ZW51ZXMuc29ydChcbiAgICAgICAgICAgIChhOiBDbGFuZGVzdGlub1ZlbnVlVHJhY2ssIGI6IENsYW5kZXN0aW5vVmVudWVUcmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVBID0gYS50aXRsZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVCID0gYi50aXRsZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lQSA8IG5hbWVCKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVBID4gbmFtZUIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbmFtZXMgbXVzdCBiZSBlcXVhbFxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCB0cmFjayA9IDE7XG4gICAgICAgIGRheS52ZW51ZXMuZm9yRWFjaCgodmVudWUpID0+IHtcbiAgICAgICAgICAgIHZlbnVlLnRyYWNrID0gdHJhY2s7XG4gICAgICAgICAgICB0cmFjaysrO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHJlbmRlckRheTogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRXZlbnRzKHNjaGVkdWxlLmFsbEV2ZW50cywgZGF5KTtcbiAgICAgICAgLy9kYXkuZXZlbnRzID0gYXdhaXQgc2NoZWR1bGUuc29ydChkYXkuZXZlbnRzKTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkVmVudWVzKGRheSk7XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnNvcnRWZW51ZXMoZGF5KTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRXZlbnRUcmFja3MoZGF5KTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRGF5TGVuZ3RoKGRheSk7XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclNjaGVkdWxlKGRheSk7XG4gICAgfSxcbiAgICBsb2FkRXZlbnRzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9MTAmJmZpbHRlcltvcmRlcmJ5XT1tZXRhX3ZhbHVlX251bSZmaWx0ZXJbbWV0YV9rZXldPWRhdHVtJmZpbHRlcltvcmRlcl09QVNDYFxuICAgICAgICApO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzY2hlZHVsZSBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImRpdi5zY2hlZHVsZS1pdGVtXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWRGZXN0aXZhbDIwMjVEYXlzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRheTA6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDI0LTA1LTJcIikudG9EYXRlKCksXG4gICAgICAgICAgICBzZWxlY3RvcjogXCIuZGF5MFwiLFxuICAgICAgICAgICAgdmVudWVzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkwKTtcblxuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF5MTogQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgICAgICAgICBkYXRlOiBkYXlqcyhcIjIwMjMtMDYtOFwiKS50b0RhdGUoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXkxXCIsXG4gICAgICAgICAgICB2ZW51ZXM6IFtdLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUucmVuZGVyRGF5KGRheTEpO1xuXG4gICAgICAgIGNvbnN0IGRheTI6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDIzLTA2LTlcIikudG9EYXRlKCksXG4gICAgICAgICAgICBzZWxlY3RvcjogXCIuZGF5MlwiLFxuICAgICAgICAgICAgdmVudWVzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgI
4181H07XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkyKTtcblxuICAgICAgICBjb25zdCBkYXkzOiBDbGFuZGVzdGlub0RheSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRheWpzKFwiMjAyMy0wNi0xMFwiKS50b0RhdGUoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXkzXCIsXG4gICAgICAgICAgICB2ZW51ZXM6IFtdLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUucmVuZGVyRGF5KGRheTMpO1xuXG4gICAgICAgIGNvbnN0IGRheTQ6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDIzLTA2LTExXCIpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgc2VsZWN0b3I6IFwiLmRheTRcIixcbiAgICAgICAgICAgIHZlbnVlczogW10sXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJEYXkoZGF5NCk7XG4gICAgfSxcbiAgICBsb2FkTW9udGhseURheXM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcygpLmRheXNJbk1vbnRoKCkgKyAzNjU7XG4gICAgICAgIGxldCBkYXlPZk1vbnRoID0gZGF5anMoKTtcbiAgICAgICAgbGV0IGRheXNUb1JlbmRlcjogQ2xhbmRlc3Rpbm9EYXlbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF5c0luTW9udGg7IGkrKykge1xuICAgICAgICAgICAgZGF5T2ZNb250aCA9IGRheWpzKCkuZGF0ZShpKTtcbiAgICAgICAgICAgIGRheU9mTW9udGggPSBkYXlPZk1vbnRoLnNldChcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgIGRheU9mTW9udGggPSBkYXlPZk1vbnRoLnNldChcImhvdXJcIiwgMCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzY2hlZHVsZS5hbGxFdmVudHMuZmluZCgoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZGF5anMoZS5zdGFydERhdGUpLmlzU2FtZShkYXlPZk1vbnRoLCBcImRheVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheTogQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGRheU9mTW9udGgudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXlcIiArIGksXG4gICAgICAgICAgICAgICAgICAgIHZlbnVlczogW10sXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghZGF5c1RvUmVuZGVyLmluY2x1ZGVzKGRheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5c1RvUmVuZGVyLnB1c2goZGF5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzVG9SZW5kZXIuZm9yRWFjaChhc3luYyAoZGF5KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlbmRlckRheVwiKTtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcbiAgICAgICAgZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKTtcbiAgICAgICAgZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuXG4gICAgICAgIHNjaGVkdWxlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHNjaGVkdWxlLmFsbEV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXRGb3JTY2hlZHVsZShsb2NhbGUpO1xuICAgICAgICBzY2hlZHVsZS5hbGxFdmVudHMgPSBhd2FpdCBldmVudFNlcnZpY2UuZmlsdGVyT2xkKFxuICAgICAgICAgICAgc2NoZWR1bGUuYWxsRXZlbnRzLFxuICAgICAgICAgICAgZGF5anMoKS5zdWJ0cmFjdChzY2hlZHVsZS5yZW1vdmVBZnRlckRheXMsIFwiZGF5c1wiKS50b0RhdGUoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vYXdhaXQgc2NoZWR1bGUubG9hZEZlc3RpdmFsMjAyNURheXMoKTtcblxuICAgICAgICBhd2FpdCBzY2hlZHVsZS5sb2FkTW9udGhseURheXMoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNjaGVkdWxlLmxpc3RlbkJveGVzKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNjaGVkdWxlIGluaXRcIiwgc2NoZWR1bGUuX2xvY2FsZSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGVtYXAsIExvY2FsZXMgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBlbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgZmVzdGl2YWxwYXNzIH0gZnJvbSBcIi4vZmVzdGl2YWxwYXNzXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0V2ZW50LCBldmVudFNlcnZpY2UgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcblxuZXhwb3J0IGNvbnN0IHNoYXJlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcblxuICAgI
4181HJlbmRlclNoYXJlTGlua3M6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgbGluazogc3RyaW5nKSB7XG4gICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZUZiLmhyZWYgPVxuICAgICAgICAgICAgXCJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyLnBocD91PVwiICsgbGluaztcblxuICAgICAgICAvLyBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVUd2l0dGVyLmhyZWYgPVxuICAgICAgICAvLyAgICAgXCJodHRwOi8vdHdpdHRlci5jb20vc2hhcmU/dGV4dD1cIiArXG4gICAgICAgIC8vICAgICBldmVudC50aXRsZSArXG4gICAgICAgIC8vICAgICBcIiZ1cmw9XCIgK1xuICAgICAgICAvLyAgICAgY29uZmlnLnNpdGVVcmwgK1xuICAgICAgICAvLyAgICAgY29uZmlnLmdldFNpdGVSb290KCkgK1xuICAgICAgICAvLyAgICAgZXZlbnQuc2x1ZyArXG4gICAgICAgIC8vICAgICBcIi9cIiArXG4gICAgICAgIC8vICAgICBcIiZoYXNodGFncz1jbGFuZGVzdGlub2Zlc3RpdmFsXCI7XG5cbiAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlVXJsLmhyZWYgPSBsaW5rO1xuICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaW5uZXJIVE1MID0gXCJVcmxcIjtcbiAgICB9LFxuICAgIGFkZENhbGVuZGVyUHJvcGVydHk6IGZ1bmN0aW9uIChcbiAgICAgICAgY2FsZW5kYXI6IEhUTUxEaXZFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIC8vY2FsZW5kYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShwcm9wZXJ0eSlbMF0uaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIGNhbGVuZGFyLnNldEF0dHJpYnV0ZShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH0sXG4gICAgcmVuZGVyQWRkVG9DYWxlbmRhcjogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50LCBsaW5rOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFldmVudC5zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC5idXR0b25zLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbGVuZGFyID0gZWxlbWVudC5idXR0b25zLmJ1dHRvbkFkZFRvQ2FsZW5kYXI7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgIGNhbGVuZGFyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLnN0cmlwVGFncyhldmVudC50aXRsZSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBkZXNjcmlwdGlvbiA9IFwiXCI7XG5cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9ICdSZWFkIG1vcmU6IDxhIGhyZWY9XCInICsgbGluayArICdcIj4nICsgbGluayArIFwiPC9hPlwiO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnZlbnVlRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gXCJcXHJcXG5WZW51ZTogXCIgKyBldmVudC52ZW51ZUZvcm1hdHRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYXJlLmFkZENhbGVuZGVyUHJvcGVydHkoY2FsZW5kYXIsIFwiZGVzY3JpcHRpb25cIiwgZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnZlbnVlLmFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcixcbiAgICAgICAgICAgICAgICAgICAgXCJsb2NhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBldmVudC52ZW51ZS5hZGRyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYXJlLmFkZENhbGVuZGVyUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgY2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgXCJzdGFydERhdGVcIixcbiAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5zdGFydFRpbWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgIGNhbGVuZGFyLFxuICAgICAgICAgICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgICAgICAgICAgZGF5anMoZXZlbnQuc3RhcnRUaW1lKS5mb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChldmVudC5lbmRUaW1lKSB7XG4gICAgICAgICAgICAgICAgc2hhcmUuYWRkQ2FsZW5kZXJQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgICAgIFwiZW5kRGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5lbmRUaW1lKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcixcbiAgICAgICAgICAgICAgICAgICAgXCJlbmRUaW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIGRheWpzKGV2ZW50LmVuZFRpbWUpLmZvcm1hdChcIkhIOm1tXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVR3aXR0ZXIuaHJlZiA9XG4gICAgICAgIC8vICAgICBcImh0dHA6Ly90d2l0dGVyLmNvbS9zaGFyZT90ZXh0PVwiICtcbiAgICAgICAgLy8gICAgIGV2ZW50LnRpdGxlICtcbiAgICAgICAgLy8gICAgIFwiJnVybD1cIiArXG4gICAgICAgIC8vICAgICBjb25maWcuc2l0ZVVybCArXG4gICAgICAgIC8vICAgICBjb25maWcuZ2V0U2l0ZVJvb3QoKSArXG4gICAgICAgIC8vICAgICBldmVudC5zbHVnICtcbiAgICAgICAgLy8gICAgIFwiL1wiICtcbiAgICAgICAgLy8gICAgIFwiJmhhc2h0YWdzPWNsYW5kZXN0aW5vZmVzdGl2YWxcIjtcblxuICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaHJlZiA9XG4gICAgICAgICAgICBjb25maWcuc2l0ZVVybCArIGNvbmZpZy5nZXRTaXRlUm9vdCgpICsgZXZlbnQuc2x1ZztcbiAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlVXJsLmlubmVySFRNTCA9IFwiVXJsXCI7XG4gICAgfSxcbiAgICBsaXN0ZW5TaGFyZUJ1dHRvblNpbmdsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidXR0b25TaGFyZVNpbmdsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgXCJidXR0b24tc2hhcmUtc2luZ2xlXCJcbiAgICAgICAgKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImxpc3RlblNoYXJlQnV0dG9uU2luZ2xlXCIgKyBidXR0b25TaGFyZVNpbmdsZSk7XG4gICAgICAgIGlmIChudWxsICE9PSBidXR0b25TaGFyZVNpbmdsZSkge1xuICAgICAgICAgICAgYnV0dG9uU2hhcmVTaW5nbGUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIC0xID09PVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5pbmRleE9mKFwic2hhcmVcIilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gXCIgc2hhcmVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIG
4181V2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHNoYXJlLmxpc3RlblNoYXJlQnV0dG9uU2luZ2xlKCk7XG4gICAgICAgIGxldCBsaW5rID0gY29uZmlnLnNpdGVVcmwgKyBjb25maWcuZ2V0U2l0ZVJvb3QoKSArIGV2ZW50LnNsdWcgKyBcIi9cIjtcblxuICAgICAgICBzaGFyZS5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBzaGFyZS5yZW5kZXJTaGFyZUxpbmtzKGV2ZW50LCBsaW5rKTtcbiAgICAgICAgc2hhcmUucmVuZGVyQWRkVG9DYWxlbmRhcihldmVudCwgbGluayk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2hhcmUgaW5pdFwiLCBzaGFyZS5fbG9jYWxlKTtcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IGVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBmZXN0aXZhbHBhc3MgfSBmcm9tIFwiLi9mZXN0aXZhbHBhc3NcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vRXZlbnQsIGV2ZW50U2VydmljZSB9IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuaW1wb3J0IHsgQ2xhbmRlc3Rpbm9Db250ZW50LCBjb250ZW50U2VydmljZSB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBpbmZvIH0gZnJvbSBcIi4vaW5mb1wiO1xuLy9pbXBvcnQgeyB0ZXN0Q29udGVudCB9IGZyb20gXCIuL3Rlc3RDb250ZW50XCI7XG5pbXBvcnQgeyBldmVudFR5cGUgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSBcIi4vc2hhcmVcIjtcblxuZXhwb3J0IGNvbnN0IHNpdGUgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIHJlbmRlckxhbmd1YWdlU2VsZWN0b3I6IGFzeW5jIGZ1bmN0aW9uIChzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3dlZGlzaFVybCA9IGNvbmZpZy5zaXRlRm9sZGVyICsgc2x1ZyArIFwiL1wiO1xuICAgICAgICBjb25zdCBlbmdsaXNoVXJsID0gY29uZmlnLnNpdGVGb2xkZXIgKyBcImVuL1wiICsgc2x1ZyArIFwiL1wiO1xuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImxhbmd1YWdlLXNlbGVjdG9yXCI+PGEgaHJlZj1cIiR7c3dlZGlzaFVybH1cIiBjbGFzcz1cInN3ZWRpc2hcIj5TdmVuc2thPC9hPiB8IDxhIGhyZWY9XCIke2VuZ2xpc2hVcmx9XCIgY2xhc3M9XCJlbmdsaXNoXCI+RW5nbGlzaDwvYT48L2Rpdj5gO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkTGluZUFuZE1ldGE6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkge1xuICAgICAgICB2Y
4181XIgdGVtcGxhdGUgPSBgYDtcblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPHAgY2xhc3M9XCJldmVudC10eXBlXCI+JHtldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlXG4gICAgICAgICAgICApfTwvcD5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYXdhaXQgc2l0ZS5yZW5kZXJMYW5ndWFnZVNlbGVjdG9yKGV2ZW50LnNsdWcpO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8aDEgY2xhc3M9XCJlbnRyeS10aXRsZVwiPiR7ZXZlbnQudGl0bGV9PC9oMT5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8ZGl2IGNsYXNzPVwic2hhcmUtc2luZ2xlXCI+PGEgaHJlZj1cIiNcIiBpZD1cImJ1dHRvbi1zaGFyZS1zaW5nbGVcIj48c3Bhbj5TaGFyZSBwb3N0PC9zcGFuPjwvYT48L2Rpdj5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8ZGl2IGNsYXNzPVwic2luZ2xlLW1ldGFcIj5gO1xuXG4gICAgICAgIGlmIChldmVudC5kYXRlVGltZUZvcm1hdHRlZCB8fCBldmVudC52ZW51ZSkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxwIGNsYXNzPVwidGltZS1hbmQtcGxhY2VcIj5gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRhdGVUaW1lRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgJHtldmVudC5kYXRlVGltZUZvcm1hdHRlZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnZlbnVlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0ZVRpbWVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGJyPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgJHtldmVudC52ZW51ZUZvcm1hdHRlZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRhdGVUaW1lRm9ybWF0dGVkIHx8IGV2ZW50LnZlbnVlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPC9wPmA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyMDI1IGFuZCBiZWZvcmUgd2Ugc2hvd2VkIGRvb3JzIG9wZW5lZCBvbiBzaW5nbGUgdmlldywgcmVtb3ZlZCBzaW5jZSAyMDI2XG4gICAgICAgIC8vIGlmIChldmVudC5kb29yc09wZW5Gb3JtYXR0ZWQpIHtcbiAgICAgICAgLy8gICAgIHRlbXBsYXRlICs9IGA8cCBjbGFzcz1cImRvb3JzLW9wZW5cIj4ke2xhbmd1YWdlLmdldChcbiAgICAgICAgLy8gICAgICAgICBzaXRlLl9sb2NhbGUsXG4gICAgICAgIC8vICAgICAgICAgXCJEb29yc1wiXG4gICAgICAgIC8vICAgICApfSAke2V2ZW50LmRvb3JzT3BlbkZvcm1hdHRlZH08L3A+YDtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8cCBjbGFzcz1cInRpY2tldFwiPmA7XG4gICAgICAgIGlmIChldmVudC50aWNrZXQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8YSBocmVmPVwiJHtldmVudC50aWNrZXR9XCI+JHtsYW5ndWFnZS5nZXQoXG4gICAgICAgICAgICAgICAgc2l0ZS5fbG9jYWxlLFxuICAgICAgICAgICAgICAgIFwiQmlsamV0dFBsXCJcbiAgICAgICAgICAgICl9PC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgKz0gYDwvcD5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8L2Rpdj5gO1xuICAgICAgICAkKHRlbXBsYXRlKS5wcmVwZW5kVG8oXCIuc2luZ2xlLWRlc2NyaXB0aW9uXCIpO1xuICAgIH0sXG4gICAgbWFrZUxhcmdlSW1hZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGltYWdlUmVmID0gJChcbiAgICAgICAgICAgIFwiI3NpbmdsZS1wYW5lLWNvbnRlbnQgLnNpbmdsZS1kZXNjcmlwdGlvbiAud3AtYmxvY2staW1hZ2U6Zmlyc3RcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoaW1hZ2VSZWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpbWFnZVJlZiA9ICQoXG4gICAgICAgICAgICAgICAgXCIjc2luZ2xlLXBhbmUtY29udGVudCAuc2luZ2xlLWRlc2NyaXB0aW9uIGZpZ3VyZTpmaXJzdFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGltYWdlRGV0YWNoZWQgPSBpbWFnZVJlZi5kZXRhY2goKTtcblxuICAgICAgICBpbWFnZURldGFjaGVkLnByZXBlbmRUbyhcIiNzaW5nbGUtcGFuZS1jb250ZW50XCIpO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnRTdGF0dXNlczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxsZWQgfHwgZXZlbnQuc29sZE91dCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gXCIjc2luZ2xlLXBhbmUtY29udGVudCA+IC53cC1ibG9jay1pbWFnZVwiO1xuICAgICAgICAgICAgJChzZWxlY3RvcikuYWRkQ2xhc3MoZXZlbnQuZXh0cmFDc3NDbGFzcyk7XG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50U3RhdHVzZXMoZXZlbnQpO1xuICAgICAgICAgICAgJChsYWJlbHMpLnByZXBlbmRUbyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZFdwRWRpdExpbms6IGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlcikge1xuICAgICAgICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoXCJsb2dnZWQtaW5cIikpIHtcbiAgICAgICAgICAgICQoXCIuY3VzdG9tLXBvc3QtZWRpdFwiKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgJChcIiN3cC1hZG1pbi1iYXItcm9vdC1kZWZhdWx0XCIpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPVwiY3VzdG9tLXBvc3QtZWRpdFwiPjxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNpdGVGb2xkZXIgK1xuICAgICAgICAgICAgICAgICAgICBcIndwLWFkbWluL3Bvc3QucGhwP3Bvc3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBwb3N0SWQgK1xuICAgICAgICAgICAgICAgICAgICAnJmFjdGlvbj1lZGl0Jmxhbmc9c3ZcIj5SZWRpZ2VyYSBpbmzDpGdnPC9hPjwvbGk+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlV3JhcHBlcnM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLTEgPT09XG4gICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5pbmRleE9mKFwic2luZ2xlLWZvY3VzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gXCIgc2luZ2xlLWZvY3VzXCI7XG4gICAgICAgI
4181H1cblxuICAgICAgICBlbGVtZW50LndyYXBwZXJzLm5hdldyYXBwZXIuY2xhc3NOYW1lID1cbiAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUucmVwbGFjZShcIiB0b2dnbGVkLW9uXCIsIFwiXCIpO1xuICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFwiIHRvZ2dsZWQtb25cIiwgXCJcIik7XG4gICAgfSxcbiAgICBhZGRTdGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHZhciBzdGF0ZU9iaiA9IHsgZm9vOiBcImJhclwiIH07XG4gICAgICAgIGNvbnN0IHVybFBhcmVudCA9IGV2ZW50LnR5cGUgPT09IFwiaW5mb1wiID8gXCJpbmZvL1wiIDogXCJcIjtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlnLmdldFNpdGVSb290KCkgKyB1cmxQYXJlbnQgKyBldmVudC5zbHVnICsgXCIvXCI7XG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlT2JqLCBldmVudC50aXRsZSwgdXJsKTtcbiAgICB9LFxuICAgIHJlbmRlclNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHZhciBmdWxsQ29udGVudCA9ICQoXCI8ZGl2Lz5cIikuYXBwZW5kKGV2ZW50LmNvbnRlbnQpO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gJzxkaXYgY2xhc3M9XCJzaW5nbGUtZGVzY3JpcHRpb25cIj4nO1xuICAgICAgICBjb250ZW50ICs9IGZ1bGxDb250ZW50Lmh0bWwoKTtcbiAgICAgICAgY29udGVudCArPSBcIjwvZGl2PlwiO1xuXG4gICAgICAgICQoXCIjc2luZ2xlLXBhbmUtY29udGVudFwiKS5odG1sKGNvbnRlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBcImluZm9cIikge1xuICAgICAgICAgICAgJChcIiNzaW5nbGUtcGFuZS1jb250ZW50XCIpLmFkZENsYXNzKFwibm8tdG9wLWltYWdlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l0ZS5tYWtlTGFyZ2VJbWFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgc2l0ZS5yZW5kZXJIZWFkTGluZUFuZE1ldGEoZXZlbnQpO1xuICAgICAgICAgICAgc2l0ZS5yZW5kZXJFdmVudFN0YXR1c2VzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbG9hZFNpbmdsZVBhc3NlczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBhZGRQaXBlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5wYXNzZXMpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RvciA9IFwiLnNpbmdsZS1tZXRhIC50aWNrZXRcIjtcbiAgICAgICAgICAgIGlmIChldmVudC50aWNrZXQpIHtcbiAgICAgICAgICAgICAgICAvL3NlbGVjdG9yID0gXCIuc2luZ2xlLW1ldGEgLnRpY2tldFwiO1xuICAgICAgICAgICAgICAgIGFkZFBpcGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVzdGl2YWxwYXNzLmxvYWQoXG4gICAgICAgICAgICAgICAgZXZlbnQucGFzc2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgICAgIGFkZFBpcGUsXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgc2l0ZS5fbG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBsb2FkU2luZ2xlOiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIHBvc3RJZD86IG51bWJlcixcbiAgICAgICAgcG9zdFNsdWc/OiBzdHJpbmcsXG4gICAgICAgIHR5cGU/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJsb2FkU2luZ2xlXCIsIHNpdGUuX2xvY2FsZSk7XG4gICAgICAgICQoXCIjc2luZ2xlLXBhbmUtY29udGVudFwiKS5odG1sKFwiXCIpO1xuXG4gICAgICAgIGxldCBldmVudDogQ2xhbmRlc3Rpbm9FdmVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJpbmZvXCIpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gKGF3YWl0IGluZm8uZ2V0U2luZ2xlKFxuICAgICAgICAgICAgICAgIHBvc3RJZCxcbiAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgKSkgYXMgQ2xhbmRlc3Rpbm9FdmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50ID0gYXdhaXQgZXZlbnRTZXJ2aWNlLmdldFNpbmdsZUZyb21QcmVsb2FkZWQocG9zdElkLCBwb3N0U2x1Zyk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSAoYXdhaXQgY29udGVudFNlcnZpY2UuZ2V0U2luZ2xlRnJvbVByZWxvYWRlZChcbiAgICAgICAgICAgICAgICAgICAgcG9zdElkLFxuICAgICAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBhd2FpdCBldmVudFNlcnZpY2UuZ2V0U2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gKGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmdldFNpbmdsZShcbiAgICAgICAgICAgICAgICAgICAgcG9zdElkLFxuICAgICAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZihldmVudC50aXRsZT09PSdBZGRpcy1EYWthcicpIHtcbiAgICAgICAgLy8gICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV2ZW50LnRpbWVBbmRQbGFjZS5yZXBsYWNlKCcwMOKAkzAzJywnMDDigJMwMSAmIDAyLTAzJyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQpXG4gICAgICAgIGF3YWl0IHNpdGUucmVuZGVyU2luZ2xlKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBzaXRlLmhhbmRsZVdyYXBwZXJzKCk7XG4gICAgICAgIGF3YWl0IHNoYXJlLmluaXQoc2l0ZS5fbG9jYWxlLCBldmVudCk7XG4gICAgICAgI
4181HNpdGUuYWRkV3BFZGl0TGluayhldmVudC5pZCk7XG4gICAgICAgIHNpdGUuYWRkU3RhdGUoZXZlbnQpO1xuXG4gICAgICAgIC8vIGlmIChldmVudC5pZCA8IHRlc3RDb250ZW50LmhpZ2hlc3RJZCkge1xuICAgICAgICAvLyAgICAgbGV0IHRlc3RJbWFnZSA9IHRlc3RDb250ZW50LmdldFJhbmRvbUltYWdlKCk7XG4gICAgICAgIC8vICAgICBsZXQgaW1hZ2UgPSAkKFwiI3NpbmdsZS1wYW5lLWNvbnRlbnQgLndwLWJsb2NrLWltYWdlOmZpcnN0IGltZ1wiKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJzcmNzZXRcIiwgdGVzdEltYWdlKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJzcmNcIiwgdGVzdEltYWdlKTtcbiAgICAgICAgLy8gICAgIC8vaW1hZ2UuYXR0cihcIndpZHRoXCIsIFwiYXV0b1wiKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJoZWlnaHRcIiwgXCJhdXRvXCIpO1xuICAgICAgICAvLyAgICAgaW1hZ2UucmVtb3ZlQXR0cihcInNpemVzXCIpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgYXdhaXQgc2l0ZS5sb2FkU2luZ2xlUGFzc2VzKGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBhc3luYyBmdW5jdGlvbiAodGhhdDogSFRNTEVsZW1lbnQsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHNpbmdsZVBhbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNpbmdsZS1wYW5lXCIpO1xuXG4gICAgICAgIHZhciBwb3N0SWQgPSAkKHRoYXQpLmRhdGEoXCJpZFwiKTtcbiAgICAgICAgdmFyIHBvc3RTbHVnID0gJCh0aGF0KS5kYXRhKFwic2x1Z1wiKTtcbiAgICAgICAgdmFyIHBvc3RGb3JtYXQgPSAkKHRoYXQpLmRhdGEoXCJmb3JtYXRcIik7XG5cbiAgICAgICAgaWYgKFwibGlua1wiID09PSBwb3N0Rm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zdElkICE9PSBwb3N0U2x1Zykge1xuICAgICAgICAgICAgLy8kKFwiI3NpbmdsZS1wYW5lLWNvbnRlbnRcIikuaHRtbCgnJyk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlUGFuZSkge1xuICAgICAgICAgICAgICAgIHNpbmdsZVBhbmUuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHNpdGUubG9hZFNpbmdsZShwb3N0SWQsIHVuZGVmaW5lZCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGxpc3RlbkJveGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2l0ZS5saXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImEuc2luZ2xlLWJveFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgc2l0ZS5oYW5kbGVDbGljayh0aGlzKTtcblxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGVja0hhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG4gICAgICAgICAgICB2Y
4181XIgc2x1ZyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoXCIjXCIsIFwiXCIpO1xuICAgICAgICAgICAgc2l0ZS5sb2FkU2luZ2xlKHVuZGVmaW5lZCwgc2x1Zyk7XG4gICAgICAgICAgICAvL01ha2Ugc3VyZSBsb2dvIGlzIGdvbmUgb24gbW9iaWxlXG4gICAgICAgICAgICAkKFwiLnNpdGUtdGl0bGVcIikuYWRkQ2xhc3MoXCJzY3JvbGxlZFwiKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHNpdGUuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgLy9zaXRlLl9sb2NhbGUgPSAnZW4nOy8vTG9jYWwgdGVzdFxuICAgICAgICBjb25zb2xlLmxvZyhcInNpdGUgaW5pdFwiLCBzaXRlLl9sb2NhbGUpO1xuICAgIH0sXG59OyIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vUGFzcywgZmVzdGl2YWxwYXNzIH0gZnJvbSBcIi4vZmVzdGl2YWxwYXNzXCI7XG5pbXBvcnQgeyBldmVudFR5cGUsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IHRpY2tldCA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgcmVtb3ZlQWZ0ZXJEYXlzOiAyLFxuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uIChwYXNzOiBDbGFuZGVzdGlub1Bhc3MpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKHBhc3MuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPHN0eWxlIHNjb3BlZD1cIlwiPi50aWNrZXQtYm94LSR7cGFzcy5pZH0geyBiYWNrZ3JvdW5kLWNvbG9yOiAke3Bhc3MuYmFja2dyb3VuZENvbG9yfSFpbXBvcnRhbnQgfTwvc3R5bGU+YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPGEgaHJlZj1cIiR7cGFzcy50aWNrZXR9XCIgY2xhc3M9XCJzaW5nbGUtYm94IHRpY2tldC1ib3ggdGlja2V0LWJveC0ke3Bhc3MuaWR9IHRpY2tldC10eXBlLSR7cGFzcy5ldmVudFR5cGV9IHN0aWNreS0ke3Bhc3Muc3RpY2t5fVwiIHRpdGxlPVwiJHtwYXNzLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGRpdiBjbGFzcz1cImNhcHRpb24tdGV4dFwiPmA7XG4gICAgICAgIC8vIGlmIChwYXNzLm92ZXJUaXRsZSkge1xuICAgICAgICAvLyAgICAgdGVtcGxhdGUgKz0gYDxwPiR7cGFzcy5vdmVyVGl0bGV9PC9wPmA7XG4gICAgICAgIC8vIH1cbiAgICAgICAgc3dpdGNoIChwYXNzLmV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGVzLkZFU1RJVkFMOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihwYXNzLmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuQkVZT05EOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihwYXNzLmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuRkVTVElWQUxfQU5EX0JFWU9ORDpcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24ocGFzcy5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPGgyPiR7cGFzcy50aXRsZX08L2gyPmA7XG4gICAgICAgIHRlbXBsYXRlICs9ICc8cCBjbGFzcz1cInRpbWUtYW5kLXBsYWNlXCI+JztcbiAgICAgICAgaWYgKHBhc3MuZGF0ZUZvcm1hdHRlZCkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy5kYXRlRm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhc3MudmVudWVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8YnI+JHtwYXNzLnZlbnVlRm9ybWF0dGVkfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGJyPiZuYnNwO2A7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgKz0gXCI8L3A+XCI7XG4gICAgICAgIHRlbXBsYXRlICs9IGA8L2Rpdj48L2E+YDtcbiAgICAgICAgJChgI2NvbnRlbnRgKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcGFyc2VQYXNzOiBmdW5jdGlvbiAocGFzczogQ2xhbmRlc3Rpbm9QYXNzLCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICB0aWNrZXQucmVuZGVyUGFzcyhwYXNzKTtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiAocGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgcGFzc2VzLmZvckVhY2goKHBhc3MpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXNzLnRpY2tldCAhPT0gXCJcIiAmJiBwYXNzLnRpY2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVBhc3MocGFzcywgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNhdGVnb3J5SWQgPVxuICAgICAgICAgICAgc2l0ZW1hcFtMb2NhbGVzW3RpY2tldC5fbG9jYWxlIGFzIExvY2FsZXNdXS5QUk9HUkFNLmNhdGVnb3J5O1xuICAgICAgICAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9JHtwcm9ncmFtQ2F0ZWdvcnlJZH0mJmZpbHRlcltvcmRlcmJ5XT1tZXRhX3ZhbHVlX251bSZmaWx0ZXJbbWV0YV9rZXldPWRhdHVtJmZpbHRlcltvcmRlcl09QVNDYCxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChwb3N0cykge1xuICAgICAgICAgICAgICAgI
4181HRpY2tldC5wYXJzZShwb3N0cywgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGxvYWRUaWNrZXRzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DYXRlZ29yeUlkID1cbiAgICAgICAgICAgIHNpdGVtYXBbTG9jYWxlc1t0aWNrZXQuX2xvY2FsZSBhcyBMb2NhbGVzXV0uUFJPR1JBTS5jYXRlZ29yeTtcbiAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgYHBvc3RzLz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mY2F0ZWdvcmllcz0ke3Byb2dyYW1DYXRlZ29yeUlkfSZmaWx0ZXJbb3JkZXJieV09bWV0YV92YWx1ZV9udW0mZmlsdGVyW21ldGFfa2V5XT1kYXR1bSZmaWx0ZXJbb3JkZXJdPUFTQ2A7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9hZFRpY2tldHNcIiwgdXJsKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0ICQuZ2V0KHVybCk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgdGlja2V0Ll9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGxldCBwYXNzZXMgPSBhd2FpdCBmZXN0aXZhbHBhc3MuZ2V0UGFzc2VzKGxvY2FsZSk7XG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlEYXRlKHBhc3Nlcyk7XG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlTdGlja3kocGFzc2VzKTtcbiAgICAgICAgY29uc3QgcG9zdFRpY2tldHMgPSBhd2FpdCB0aWNrZXQubG9hZFRpY2tldHMoKTtcbiAgICAgICAgbGV0IHRpY2tldHM6IENsYW5kZXN0aW5vUGFzc1tdID0gW107XG4gICAgICAgIGF3YWl0IHBvc3RUaWNrZXRzLmZvckVhY2goKHRpY2tldDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aWNrZXRzLnB1c2goZmVzdGl2YWxwYXNzLmNvbnZlcnQodGlja2V0LCBsb2NhbGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFzc2VzID0gcGFzc2VzLmNvbmNhdCh0aWNrZXRzKTtcbiAgICAgICAgcGFzc2VzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmZpbHRlck9sZChcbiAgICAgICAgICAgIHBhc3NlcyxcbiAgICAgICAgICAgIGRheWpzKCkuc3VidHJhY3QodGlja2V0LnJlbW92ZUFmdGVyRGF5cywgXCJkYXlzXCIpLnRvRGF0ZSgpXG4gICAgICAgICk7XG4gICAgICAgIC8vYXdhaXQgZmVzdGl2YWxwYXNzLnNvcnRCeURhdGUocGFzc2VzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwYXNzZXMpXG4gICAgICAgIGNvbnNvbGUubG9nKHRpY2tldHMpO1xuXG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlEYXRlKHBhc3Nlcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHBhc3Nlcyk7XG4gICAgICAgIHBhc3NlcyA9IGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlTdGlja3kocGFzc2VzKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIlNvcnRlZFwiLCBwYXNzZXMpO1xuXG4gICAgICAgIHRpY2tldC5wYXJzZShwYXNzZXMsIGxvY2FsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGlja2V0IGluaXRcIik7XG4gICAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgdmFsaWREYXRlID0gKGRhdGU6IGFueSkgPT4gIWlzTmFOKGRhdGUpICYmIGRhdGUgaW5zdGFuY2VvZiBEYXRlO1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0NvbnRlbnQgfSBmcm9tIFwiLi9jb250ZW50U2VydmljZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vVmVudWUge1xuICAgIGlkOiBudW1iZXI7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZztcbiAgICBtYXA/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgICBsb2dvPzogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIC8vdmlld09yZGVyPzogbnVtYmVyO1xufVxuXG5jb25zdCBUQkEgPSBcInRiYVwiO1xuXG5leHBvcnQgY29uc3QgdmVudWVTZXJ2aWNlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxWZW51ZXM6IFtdIGFzIENsYW5kZXN0aW5vVmVudWVbXSxcbiAgICBnZXRWZW51ZU9yVEJBOiBmdW5jdGlvbiAocG9zdDogYW55KSB7XG4gICAgICAgIGxldCB2ZW51ZTogQ2xhbmRlc3Rpbm9WZW51ZSA9IHZlbnVlU2VydmljZS5hbGxWZW51ZXMuZmluZChcbiAgICAgICAgICAgICh2KSA9PiB2LmlkID09PSBwb3N0LmFjZi5zY2VuPy5JRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIXZlbnVlKSB7XG4gICAgICAgICAgICBpZiAocG9zdC5hY2Y/LnNjZW4pIHtcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGV4dGVybmFsIGV2ZW50c1xuICAgICAgICAgICAgICAgIHZlbnVlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBvc3QuYWNmW1wic2NlblwiXT8ucG9zdF90aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgc2x1ZzogVEJBLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlbnVlID0ge1xuICAgICAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBUQkEsXG4gICAgICAgICAgICAgICAgc2x1ZzogVEJBLFxuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlbnVlO1xuICAgIH0sXG4gICAgY29udmVydDogZnVuY3Rpb24gKHBvc3Q6IGFueSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGV2ZW50OiBDbGFuZGVzdGlub1ZlbnVlID0ge1xuICAgICAgICAgICAgaWQ6IHBvc3QuaWQsXG4gICAgICAgICAgICBzbHVnOiBwb3N0LnNsdWcsXG4gICAgICAgICAgICB0aXRsZTogcG9zdC50aXRsZS5yZW5kZXJlZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3QuY29udGVudFtcInJlbmRlcmVkXCJdLFxuICAgICAgICAgICAgbWFwOiBwb3N0LmFjZi5rYXJ0YSxcbiAgICAgICAgICAgIGFkZHJlc3M6IH
4181Bvc3QuYWNmLmFkcmVzcyB8fCBcIlwiLFxuICAgICAgICAgICAgbG9nbzogcG9zdC5hY2YubG9nb3R5cCxcbiAgICAgICAgICAgIGNvbG9yOiBwb3N0LmFjZi5mYXJnLFxuICAgICAgICAgICAgdHlwZTogcG9zdC50eXBlLFxuICAgICAgICAgICAgYWN0aXZlOiBwb3N0LmFjZi5ha3RpdixcbiAgICAgICAgICAgIC8vdmlld09yZGVyOiBwb3N0LmFjZi5vcmRuaW5nLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uIChjb250ZW50OiBDbGFuZGVzdGlub0NvbnRlbnQsIHZlbnVlOiBDbGFuZGVzdGlub1ZlbnVlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiYXBwZW5kXCIsIHZlbnVlKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gYDxwPjxhIGhyZWY9XCIke3ZlbnVlLm1hcH1cIiBkYXRhLWlkPVwiJHtcbiAgICAgICAgICAgIHZlbnVlLmlkXG4gICAgICAgIH1cIiBkYXRhLXNsdWc9XCIke3ZlbnVlLnNsdWd9XCIgdGl0bGU9XCIke3ZlbnVlLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCI+XG4gICAgICAgICAgICAke3ZlbnVlLnRpdGxlfVxuICAgICAgICAgICAgPC9hPjxicj5cbiAgICAgICAgICAgICR7dmVudWUuYWRkcmVzcz8ucmVwbGFjZShcIlxcblwiLCBcIjxicj5cIil9PC9wPmA7XG4gICAgICAgIGNvbnRlbnQuY29udGVudCArPSB0ZW1wbGF0ZTtcbiAgICAgICAgLy8kKGAjY29udGVudGApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBmaWx0ZXJBY3RpdmU6IGZ1bmN0aW9uICh2ZW51ZXM6IENsYW5kZXN0aW5vVmVudWVbXSkge1xuICAgICAgICByZXR1cm4gdmVudWVzLmZpbHRlcihmdW5jdGlvbiAodmVudWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZW51ZS5hY3RpdmU7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQoXG4gICAgICAgICAgICBjb25maWcuZ2V0UmVzdFVybCgpICtcbiAgICAgICAgICAgICAgICBgc2Nlbj9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mZmlsdGVyW29yZGVyYnldPXRpdGxlJm9yZGVyPWFzY2BcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGxvYWRTaW5nbGU6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICB2Y
4181XIgcXVlcnkgPSBcIlwiO1xuICAgICAgICBpZiAocG9zdElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IHBvc3RJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IFwiP3NsdWc9XCIgKyBwb3N0U2x1ZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQuZ2V0KGNvbmZpZy5nZXRSZXN0VXJsKCkgKyBcInNjZW4vXCIgKyBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBCeSBzbHVnIHJldHVybnMgYXJyYXlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGdldFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB2ZW51ZVNlcnZpY2UuZ2V0U2luZ2xlICR7cG9zdElkfSAke3Bvc3RTbHVnfWApO1xuICAgICAgICByZXR1cm4gdmVudWVTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCB2ZW51ZVNlcnZpY2UubG9hZFNpbmdsZShwb3N0SWQsIHBvc3RTbHVnKSxcbiAgICAgICAgICAgIHZlbnVlU2VydmljZS5fbG9jYWxlXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRTaW5nbGVGcm9tUHJlbG9hZGVkOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcInZlbnVlU2VydmljZS5hbGxDb250ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIHZlbnVlU2VydmljZS5hbGxWZW51ZXMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmKGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBjb250ZW50U2VydmljZS5jb252ZXJ0KGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksY29udGVudFNlcnZpY2UuX2xvY2FsZSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IHF1ZXJ5ID0gKGV2ZW50OiBDbGFuZGVzdGlub1ZlbnVlKSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICBpZiAocG9zdFNsdWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnkgPSAoZXZlbnQ6IENsYW5kZXN0aW5vVmVudWUpID0+IGV2ZW50LmlkID09PSBwb3N0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlbnVlU2VydmljZS5hbGxWZW51ZXMuZmluZChxdWVyeSk7XG4gICAgfSxcbiAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBpZiAodmVudWVTZXJ2aWNlLmFsbFZlbnVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdmVudWVTZXJ2aWNlLmFsbFZlbnVlcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCB2ZW51ZVNlcnZpY2UubG9hZCgpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vVmVudWVbXSA9IFtdO1xuICAgICAgICBwb3N0cy5mb3JFYWNoKChwb3N0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godmVudWVTZXJ2aWNlLmNvbnZlcnQocG9zdCwgbG9jYWxlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvL2NvbnRlbnRzID0gdmVudWVzLnNvcnRTdGlja3koY29udGVudHMpO1xuICAgICAgICBjb250ZW50cyA9IHZlbnVlU2VydmljZS5maWx0ZXJBY3RpdmUoY29udGVudHMpO1xuICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgdmVudWVTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHZlbnVlU2VydmljZS5hbGxWZW51ZXMgPSBhd2FpdCB2ZW51ZVNlcnZpY2UuZ2V0KGxvY2FsZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJ2ZW51ZVNlcnZpY2UgaW5pdFwiLCB2ZW51ZVNlcnZpY2UuX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixmPVwibW9udGhcIixoPVwicXVhcnRlclwiLGM9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsZikscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxmKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Zix5OmMsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmh9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF99LFM9ZnVuY3Rpb24gdChlLG4scil7dmFyIGk7aWYoIWUpcmV0dXJuIGc7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBzPWUudG9Mb3dlckNhc2UoKTtEW3NdJiYoaT1zKSxuJiYoRFtzXT1uLGk9cyk7dmFyIHU9ZS5zcGxpdChcIi1cIik7aWYoIWkmJnUubGVuZ3RoPjEpcmV0dXJuIHQodVswXSl9ZWxzZXt2YXIgYT1lLm5hbWU7RFthXT1lLGk9YX1yZXR1cm4hciYmaSYmKGc9aSksaXx8IXImJmd9LHc9ZnVuY3Rpb24odCxlKXtpZihwKHQpKXJldHVybi
4181B0LmNsb25lKCk7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGU/ZTp7fTtyZXR1cm4gbi5kYXRlPXQsbi5hcmdzPWFyZ3VtZW50cyxuZXcgXyhuKX0sTz12O08ubD1TLE8uaT1wLE8udz1mdW5jdGlvbih0LGUpe3JldHVybiB3KHQse2xvY2FsZTplLiRMLHV0YzplLiR1LHg6ZS4keCwkb2Zmc2V0OmUuJG9mZnNldH0pfTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIE0odCl7dGhpcy4kTD1TKHQubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UodCl9dmFyIG09TS5wcm90b3R5cGU7cmV0dXJuIG0ucGFyc2U9ZnVuY3Rpb24odCl7dGhpcy4kZD1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGUsbj10LnV0YztpZihudWxsPT09ZSlyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihPLnUoZSkpcmV0dXJuIG5ldyBEYXRlO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIS9aJC9pLnRlc3QoZSkpe3ZhciByPWUubWF0Y2goJCk7aWYocil7dmFyIGk9clsyXS0xfHwwLHM9KHJbN118fFwiMFwiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gbj9uZXcgRGF0ZShEYXRlLlVUQyhyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKSk6bmV3IERhdGUoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscyl9fXJldHVybiBuZXcgRGF0ZShlKX0odCksdGhpcy4keD10Lnh8fHt9LHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBPfSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuJGQudG9TdHJpbmcoKT09PWwpfSxtLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuPXcodCk7cmV0dXJuIHRoaXMuc3RhcnRPZihlKTw9biYmbjw9dGhpcy5lbmRPZihlKX0sbS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHcodCk8dGhpcy5zdGFydE9mKGUpfSxtLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZW5kT2YoZSk8dyh0KX0sbS4kZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE8udSh0KT90aGlzW2VdOnRoaXMuc2V0KG4sdCl9LG0udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG0udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sbS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPSEhTy51KGUpfHxlLGg9Ty5wKHQpLGw9ZnVuY3Rpb24odCxlKXt2YXIgaT1PLncobi4kdT9EYXRlLlVUQyhuLiR5LGUsdCk6bmV3IERhdGUobi4keSxlLHQpLG4pO3JldHVybiByP2k6aS5lbmRPZihhKX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBPLncobi50b0RhdGUoKVt0XS5hcHBseShuLnRvRGF0ZShcInNcIiksKHI/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShlKSksbil9LHk9dGhpcy4kVyxNPXRoaXMuJE0sbT10aGlzLiRELHY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaC
4181hoKXtjYXNlIGM6cmV0dXJuIHI/bCgxLDApOmwoMzEsMTEpO2Nhc2UgZjpyZXR1cm4gcj9sKDEsTSk6bCgwLE0rMSk7Y2FzZSBvOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxEPSh5PGc/eSs3OnkpLWc7cmV0dXJuIGwocj9tLUQ6bSsoNi1EKSxNKTtjYXNlIGE6Y2FzZSBkOnJldHVybiAkKHYrXCJIb3Vyc1wiLDApO2Nhc2UgdTpyZXR1cm4gJCh2K1wiTWludXRlc1wiLDEpO2Nhc2UgczpyZXR1cm4gJCh2K1wiU2Vjb25kc1wiLDIpO2Nhc2UgaTpyZXR1cm4gJCh2K1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxtLiRzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvPU8ucCh0KSxoPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxsPShuPXt9LG5bYV09aCtcIkRhdGVcIixuW2RdPWgrXCJEYXRlXCIsbltmXT1oK1wiTW9udGhcIixuW2NdPWgrXCJGdWxsWWVhclwiLG5bdV09aCtcIkhvdXJzXCIsbltzXT1oK1wiTWludXRlc1wiLG5baV09aCtcIlNlY29uZHNcIixuW3JdPWgrXCJNaWxsaXNlY29uZHNcIixuKVtvXSwkPW89PT1hP3RoaXMuJEQrKGUtdGhpcy4kVyk6ZTtpZihvPT09Znx8bz09PWMpe3ZhciB5PXRoaXMuY2xvbmUoKS5zZXQoZCwxKTt5LiRkW2xdKCQpLHkuaW5pdCgpLHRoaXMuJGQ9eS5zZXQoZCxNYXRoLm1pbih0aGlzLiRELHkuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgbCYmdGhpcy4kZFtsXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sbS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodCxlKX0sbS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbTy5wKHQpXSgpfSxtLmFkZD1mdW5jdGlvbihyLGgpe3ZhciBkLGw9dGhpcztyPU51bWJlcihyKTt2YXIgJD1PLnAoaCkseT1mdW5jdGlvbih0KXt2YXIgZT13KGwpO3JldHVybiBPLncoZS5kYXRlKGUuZGF0ZSgpK01hdGgucm91bmQodCpyKSksbCl9O2lmKCQ9PT1mKXJldHVybi
4181B0aGlzLnNldChmLHRoaXMuJE0rcik7aWYoJD09PWMpcmV0dXJuIHRoaXMuc2V0KGMsdGhpcy4keStyKTtpZigkPT09YSlyZXR1cm4geSgxKTtpZigkPT09bylyZXR1cm4geSg3KTt2YXIgTT0oZD17fSxkW3NdPWUsZFt1XT1uLGRbaV09dCxkKVskXXx8MSxtPXRoaXMuJGQuZ2V0VGltZSgpK3IqTTtyZXR1cm4gTy53KG0sdGhpcyl9LG0uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQoLTEqdCxlKX0sbS5mb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbi5pbnZhbGlkRGF0ZXx8bDt2YXIgcj10fHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1PLnoodGhpcykscz10aGlzLiRILHU9dGhpcy4kbSxhPXRoaXMuJE0sbz1uLndlZWtkYXlzLGY9bi5tb250aHMsaD1mdW5jdGlvbih0LG4saSxzKXtyZXR1cm4gdCYmKHRbbl18fHQoZSxyKSl8fGlbbl0uc2xpY2UoMCxzKX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gTy5zKHMlMTJ8fDEyLHQsXCIwXCIpfSxkPW4ubWVyaWRpZW18fGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10PDEyP1wiQU1cIjpcIlBNXCI7cmV0dXJuIG4/ci50b0xvd2VyQ2FzZSgpOnJ9LCQ9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06YSsxLE1NOk8ucyhhKzEsMixcIjBcIiksTU1NOmgobi5tb250aHNTaG9ydCxhLGYsMyksTU1NTTpoKGYsYSksRDp0aGlzLiRELEREOk8ucyh0aGlzLiRELDIsXCIwXCIpLGQ6U3RyaW5nKHRoaXMuJFcpLGRkOmgobi53ZWVrZGF5c01pbix0aGlzLiRXLG8sMiksZGRkOmgobi53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsbywzKSxkZGRkOm9bdGhpcy4kV10sSDpTdHJpbmcocyksSEg6Ty5zKHMsMixcIjBcIiksaDpjKDEpLGhoOmMoMiksYTpkKHMsdSwhMCksQTpkKHMsdSwhMSksbTpTdHJpbmcodSksbW06Ty5zKHUsMixcIjBcIiksczpTdHJpbmcodGhpcy4kcyksc3M6Ty5zKHRoaXMuJHMsMixcIjBcIiksU1NTOk8ucyh0aGlzLiRtcywzLFwiMFwiKSxaOml9O3JldHVybiByLnJlcGxhY2UoeSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8JFt0XXx8aS5yZXBsYWNlKFwiOlwiLFwiXCIpfSkpfSxtLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxtLmRpZmY9ZnVuY3Rpb24ocixkLGwpe3ZhciAkLHk9Ty5wKGQpLE09dyhyKSxtPShNLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsdj10aGlzLU0sZz1PLm0odGhpcyxNKTtyZXR1cm4gZz0oJD17fSwkW2NdPWcvMTIsJFtmXT1nLCRbaF09Zy8zLCRbb109KHYtbSkvNjA0OGU1LCRbYV09KHYtbSkvODY0ZTUsJFt1XT12L24sJFtzXT12L2UsJFtpXT12L3QsJClbeV18fHYsbD9nOk8uYShnKX0sbS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGYpLiREfSxtLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRFt0aGlzLiRMXX0sbS5sb2NhbGU9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gdGhpcy4kTDt2YXIgbj10aGlzLmNsb25lKCkscj1TKHQsZSwhMCk7cmV0dXJuIHImJihuLiRMPXIpLG59LG0uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gTy53KHRoaXMuJGQsdGhpcyl9LG0udG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sbS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG0udG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sTX0oKSxUPV8ucHJvdG90eXBlO3JldHVybiB3LnByb3RvdHlwZT1ULFtbXCIkbXNcIixyXSxbXCIkc1wiLGldLFtcIiRtXCIsc10sW1wiJEhcIix1XSxbXCIkV1wiLGFdLFtcIiRNXCIsZl0sW1wiJHlcIixjXSxbXCIkRFwiLGRdXS5mb3JFYWNoKChmdW5jdGlvbih0KXtUW3RbMV1dPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRnKGUsdFswXSx0WzFdKX19KSksdy5leHRlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC4kaXx8KHQoZSxfLHcpLHQuJGk9ITApLHd9LHcubG9jYWxlPVMsdy5pc0RheWpzPXAsdy51bml4PWZ1bmN0aW9uKHQpe3JldHVybiB3KDFlMyp0KX0sdy5lbj1EW2ddLHcuTHM9RCx3LnA9e30sd30pKTsiLCIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zdj10KGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGE9dChl
4181KSxkPXtuYW1lOlwic3ZcIix3ZWVrZGF5czpcInPDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2clwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDtl9tw6VfdGlfb25fdG9fZnJfbMO2XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuXCJbXCIrZSsoMT09PXR8fDI9PT10P1wiYVwiOlwiZVwiKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbVwiLGxsbDpcIkQgTU1NIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkIEQgTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvbSAlc1wiLHBhc3Q6XCJmw7ZyICVzIHNlZGFuXCIsczpcIm7DpWdyYSBzZWt1bmRlclwiLG06XCJlbiBtaW51dFwiLG1tOlwiJWQgbWludXRlclwiLGg6XCJlbiB0aW1tZVwiLGhoOlwiJWQgdGltbWFyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnYXJcIixNOlwiZW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiLCIhZnVuY3Rpb24oZSxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1pKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShpKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9pc0JldHdlZW49aSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlLGksdCl7aS5wcm90b3R5cGUuaXNCZXR3ZWVuPWZ1bmN0aW9uKGUsaSxzLGYpe3ZhciBuPXQoZSksbz10KGkpLHI9XCIoXCI9PT0oZj1mfHxcIigpXCIpWzBdLHU9XCIpXCI9PT1mWzFdO3JldHVybihyP3RoaXMuaXNBZnRlcihuLHMpOiF0aGlzLmlzQmVmb3JlKG4scykpJiYodT90aGlzLmlzQmVmb3JlKG8scyk6IXRoaXMuaXNBZnRlcihvLHMpKXx8KHI/dGhpcy5pc0JlZm9yZShuLHMpOiF0aGlzLmlzQWZ0ZXIobixzKSkmJih1P3RoaXMuaXNBZnRlcihvLHMpOiF0aGlzLmlzQmVmb3JlKG8scykpfX19KSk7IiwiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5faXNTYW1lT3JBZnRlcj10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dC5wcm90b3R5cGUuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmlzU2FtZShlLHQpfHx0aGlzLmlzQWZ0ZXIoZSx0KX19fSkpOyIsIiFmdW5jdGlvbihlLGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGkpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2lzU2FtZU9yQmVmb3JlPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpLnByb3RvdHlwZS5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbihlLGkpe3JldHVybiB0aGlzLmlzU2FtZShlLGkpfHx0aGlzLmlzQmVmb3JlKGUsaSl9fX0pKTsiLCIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9sb2NhbGl6ZWRGb3JtYXQ9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXtMVFM6XCJoOm1tOnNzIEFcIixMVDpcImg6bW0gQVwiLEw6XCJNTS9ERC9ZWVlZXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn07cmV0dXJuIGZ1bmN0aW9uKHQsbyxuKXt2YXIgcj1vLnByb3RvdHlwZSxpPXIuZm9ybWF0O24uZW4uZm9ybWF0cz1lLHIuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiWVlZWS1NTS1ERFRISDptbTpzc1pcIik7dmFyIG89dGhpcy4kbG9jYWxlKCkuZm9ybWF0cyxuPWZ1bmN0aW9uKHQsbyl7cmV0dXJuIHQucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLChmdW5jdGlvbih0LG4scil7dmFyIGk9ciYmci50b1VwcGVyQ2FzZSgpO3JldHVybiBufHxvW3JdfHxlW3JdfHxvW2ldLnJlcGxhY2UoLyhcXFtbXlxcXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZywoZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0fHxvLnNsaWNlKDEpfSk
4181pfSkpfSh0LHZvaWQgMD09PW8/e306byk7cmV0dXJuIGkuY2FsbCh0aGlzLG4pfX19KSk7Il19
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.