PageSourceSearch

https://unimeetgothenburg.com/wp-content/themes/verktyget/script.js?ver=260216

js unimeetgothenburg.com collected 2026-10-07 04:00:40 UTC 69,126 bytes, 610 lines download raw bytes

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";
3
4var _initiateAnalytics = require("./initiateAnalytics");
5function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
6function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
7function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
8var popup = document.querySelector(".cookie-popup");
9
10//Define functions available for popup and initial use
11var getCookie = function getCookie(name) {
12  return document.cookie.split("; ").reduce(function (r, v) {
13    var parts = v.split("=");
14    return parts[0] === name ? decodeURIComponent(parts[1]) : r;
15  }, "");
16};
17(0, _initiateAnalytics.initiateMatomo)();
18var addStatisticsCookies = function addStatisticsCookies() {
19  (0, _initiateAnalytics.initiateGoogleAnalytics)();
20};
21var addMarketingCookies = function addMarketingCookies() {
22  // Google Tag Manager
23  (0, _initiateAnalytics.initialteGoogleTagManager)();
24};
25if (popup) {
26  var overlay = document.querySelector(".cookie-overlay");
27  var modals = document.querySelectorAll(".cookie-popup-content");
28  var modalLinks = document.querySelectorAll(".modal-link");
29  var acceptAllBtn = document.querySelector("#set-all-cookies");
30  var acceptNecessaryBtn = document.querySelector("#set-necessary-cookies");
31  var acceptSelectionBtn = document.querySelector("#confirm-choice");
32  var documentBody = document.body;
33  var cookieOptionSelect = document.querySelectorAll(".cookie-page-option");
34  documentBody.style.overflow = "visible";
35  var setCookie = function setCookie(name, value) {
36    var days = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 7;
37    var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "/";
38    removePopup();
39    var expires = new Date(Date.now() + days * 864e5).toUTCString();
40    document.cookie = name + "=" + encodeURIComponent(value) + "; expires=" + expires + "; path=" + path;
41    switch (name) {
42      case "statistics_cookies":
43        addStatisticsCookies();
44        if (days === 7) {
45          autoCheckSetting("statistics");
46        }
47        break;
48      case "marketing_cookies":
49        addMarketingCookies();
50        if (days === 7) {
51          autoCheckSetting("marketing");
52        }
53        break;
54      default:
55        break;
56    }
57  };
58  var deleteCookie = function deleteCookie(name) {
59    var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "/";
60    setCookie(name, "", -1, path);
61  };
62  var autoCheckSetting = function autoCheckSetting(name) {
63    cookieOptionSelect.forEach(function (option) {
64      if (name == option.value) {
65        option.checked = true;
66      }
67    });
68  };
69  var scrollToModalTop = function scrollToModalTop() {
70    var _iterator = _createForOfIteratorHelper(modals),
71      _step;
72    try {
73      for (_iterator.s();
73 !(_step = _iterator.n()).done;) {
74        var m = _step.value;
75        m.scrollTo(0, 0);
76      }
77    } catch (err) {
78      _iterator.e(err);
79    } finally {
80      _iterator.f();
81    }
82  };
83  var isOverlayHidden = function isOverlayHidden() {
84    overlay.classList.contains("cookie-overlay--active") ? documentBody.style.overflow = "hidden" : documentBody.style.overflow = "visible";
85  };
86  var showPopup = function showPopup() {
87    var h1Text = popup.querySelector("h1").innerText;
88    if (h1Text.length > 1) {
89      console.log("here");
90      overlay.classList.add("cookie-overlay--active");
91      popup.classList.add("cookie-popup--active");
92      isOverlayHidden();
93    }
94  };
95  var removePopup = function removePopup() {
96    overlay.classList.remove("cookie-overlay--active");
97    popup.classList.remove("cookie-popup--active");
98    isOverlayHidden();
99  };
100  if (!getCookie("necessary_cookies")) {
101    showPopup();
102  }
103  var _iterator2 = _createForOfIteratorHelper(modalLinks),
104    _step2;
105  try {
106    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
107      var link = _step2.value;
108      link.addEventListener("click", scrollToModalTop);
109    }
110  } catch (err) {
111    _iterator2.e(err);
112  } finally {
113    _iterator2.f();
114  }
115  acceptAllBtn.addEventListener("click", function () {
116    setCookie("necessary_cookies", "true");
117    setCookie("statistics_cookies", "true");
118    setCookie("marketing_cookies", "true");
119    window.location.reload();
120  });
121  acceptNecessaryBtn.addEventListener("click", function () {
122    setCookie("necessary_cookies", "true");
123  });
124  var confirmChoice = function confirmChoice() {
125    var checkBoxes = document.querySelectorAll("input[type=checkbox]");
126    var cookieName;
127    var cookieChecked;
128    for (var i = 0; i < checkBoxes.length; i++) {
129      cookieName = "".concat(checkBoxes[i].value, "_cookies");
130      cookieChecked = checkBoxes[i].checked;
131      if (cookieChecked) {
132        setCookie(cookieName, cookieChecked);
133      }
134    }
135    setCookie("necessary_cookies", "true");
136    window.location.reload();
137  };
138  acceptSelectionBtn.addEventListener("click", confirmChoice);
139
140  // Retrieve and edit user's previous choice
141  cookieOptionSelect.forEach(function (option) {
142    option.value === "marketing" ? option.checked = getCookie("marketing_cookies") : option.checked = getCookie("statistics_cookies");
143    option.addEventListener("change", function () {
144      if (option.checked) {
145        setCookie("".concat(option.value, "_cookies"), "true");
146      } else {
147        deleteCookie("".concat(option.value, "_cookies"));
148      }
149    });
150  });
151}
152var setInitialCookies = function setInitialCookies() {
153  if (getCookie("statistics_cookies")) {
154    addStatisticsCookies();
155  }
156  if (getCookie("marketing_cookies")) {
157    addMarketingCookies();
158  }
159};
160setInitialCookies();
161
162},{"./initiateAnalytics":4}],2:[function(require,module,exports){
163"use strict";
164
165Object.defineProperty(exports, "__esModule", {
166  value: true
167});
168exports.filter = void 0;
169var filter = exports.filter = function filter() {
170  var triggers = document.querySelector('.filters');
171  var targets = document.querySelector('.mix-container');
172  var filters = [];
173  var items = targets && targets.querySelectorAll('.mix');
174  var intersect = function intersect(arr1, arr2) {
175    return arr1.filter(function (x) {
176      return arr2.indexOf(x) >= 0;
177    }).length > 0;
178  };
179  var updateTargets = function updateTargets() {
180    if (filters.length) {
181      items.forEach(function (item) {
182        if (intersect(filters, Array.from(item.classList))) {
183          item.classList.remove('mix-hide');
184        } else {
185          item.classList.add('mix-hide');
186        }
187      });
188    } else {
189      items.forEach(function (item) {
190        item.classList.remove('mix-hide');
191      });
192    }
193  };
194  var updateFilters = function updateFilters(value) {
195    if (filters.includes(value)) {
196      filters = filters.filter(function (v) {
197        return v !== value;
198      });
199    } else {
200      filters.push(value);
201    }
202    updateTargets();
203  };
204  if (triggers) {
205    triggers.addEventListener('click', function (e) {
206      if (e.target.parentElement.classList.contains('filter')) {
207        console.log('CLICK:FITLER');
208        var value = e.target.value.split('.')[1];
209        updateFilters(value);
210      }
211    });
212  }
213};
214
215},{}],3:[function(require,module,exports){
216"use strict";
217
218Object.defineProperty(exports, "__esModule", {
219  value: true
220});
221exports.googleMaps = googleMaps;
222/* global google */
223function googleMaps($) {
224  /*
225   *  new_map
226   *
227   *  This function will render a Google Map onto the selected jQuery element
228   *
229   *  @type	function
230   *  @date	8/11/2013
231   *  @since	4.3.0
232   *
233   *  @param	$el (jQuery element)
234   *  @return	n/a
235   */
236
237  function new_map($el) {
238    // var
239    var $markers = $el.find('.marker');
240
241    // vars
242    var args = {
243      zoom: 16,
244      center: new google.maps.LatLng(0, 0),
245      mapTypeId: google.maps.MapTypeId.ROADMAP
246    };
247
248    // create map
249    var map = new google.maps.Map($el[0], args);
250
251    // add a markers reference
252    map.markers = [];
253
254    // add markers
255    $markers.each(function () {
256      add_marker($(this), map);
257    });
258
259    // center map
260    center_map(map);
261
262    // return
263    return map;
264  }
265
266  /*
267   *  add_marker
268   *
269   *  This function will add a marker to the selected Google Map
270   *
271   *  @type	function
272   *  @date	8/11/2013
273   *  @since	4.3.0
274   *
275   *  @param	$marker (jQuery element)
276   *  @param	map (Google Map object)
277   *  @return	n/a
278   */
279
280  function add_marker($marker, map) {
281    // var
282    var latlng = new google.maps.LatLng($marker.attr('data-lat'), $marker.attr('data-lng'));
283
284    // create marker
285    var marker = new google.maps.Marker({
286      position: latlng,
287      map: map
288    });
289
290    // add to array
291    map.markers.push(marker);
292
293    // if marker contains HTML, add it to an infoWindow
294    if ($marker.html()) {
295      // create info window
296      var infowindow = new google.maps.InfoWindow({
297        content: $marker.html()
298      });
299
300      // show info window when marker is clicked
301      google.maps.event.addListener(marker, 'click', function () {
302        infowindow.open(map, marker);
303      });
304    }
305  }
306
307  /*
308   *  center_map
309   *
310   *  This function will center the map, showing all markers attached to this map
311   *
312   *  @type	function
313   *  @date	8/11/2013
314   *  @since	4.3.0
315   *
316   *  @param	map (Google Map object)
317   *  @return	n/a
318   */
319
320  function center_map(map) {
321    // vars
322    var bounds = new google.maps.LatLngBounds();
323
324    // loop through all markers and create bounds
325    $.each(map.markers, function (i, marker) {
326      var latlng = new google.maps.LatLng(marker.position.lat(), marker.position.lng());
327      bounds.extend(latlng);
328    });
329
330    // only 1 marker?
331    if (map.markers.length == 1) {
332      // set center of map
333      map.setCenter(bounds.getCenter());
334      map.setZoom(16);
335    } else {
336      // fit to bounds
337      map.fitBounds(bounds);
338    }
339  }
340
341  /*
342   *  document ready
343   *
344   *  This function will render each map when the document is ready (page has loaded)
345   *
346   *  @type	function
347   *  @date	8/11/2013
348   *  @since	5.0.0
349   *
350   *  @param	n/a
351   *  @return	n/a
352   */
353  // global var
354
355  var map = null;
356  $(document).ready(function () {
357    $('.acf-map').each(function () {
358      // create map
359      map = new_map($(this));
360    });
361  });
362}
363
364},{}],4:[function(require,module,exports){
365"use strict";
366
367Object.defineProperty(exports, "__esModule", {
368  value: true
369});
370exports.initiateMatomo = exports.initiateGoogleAnalytics = exports.initialteGoogleTagManager = void 0;
371var initiateGoogleAnalytics = exports.initiateGoogleAnalytics = function initiateGoogleAnalytics() {
372  console.log("initiating google analytics");
373  (function (i, s, o, g, r, a, m) {
374    i["GoogleAnalyticsObject"] = r;
375    i[r] = i[r] || function () {
376      (i[r].q = i[r].q || []).push(arguments);
377    }, i[r].l = 1 * new Date();
378    a = s.createElement(o), m = s.getElementsByTagName(o)[0];
379    a.async = 1;
380    a.src = g;
381    m.parentNode.insertBefore(a, m);
382  })(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
383  ga("create", "UA-75141647-3", {
384    cookieExpires: 60 * 60 * 24 * (365 / 2) // Time in seconds.
385  });
386  ga("send", "pageview");
387};
388var initialteGoogleTagManager = exports.initialteGoogleTagManager = function initialteGoogleTagManager() {
389  console.log("initiating google tag manager");
vendor: 431 bytes, lines 389-402
389
390  (function (w, d, s, l, i) {
391    w[l] = w[l] || [];
392    w[l].push({
393      "gtm.start": new Date().getTime(),
394      event: "gtm.js"
395    });
396    var f = d.getElementsByTagName(s)[0],
397      j = d.createElement(s),
398      dl = l != "dataLayer" ? "&l=" + l : "";
399    j.async = true;
400    j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
401    f.parentNode.insertBefore(j, f);
402  })(window, document, "script", "dataLayer", "
402GTM-N7WK534
vendor: 4 bytes, line 402
402");
403};
404var initiateMatomo = exports.initiateMatomo = function initiateMatomo() {
405  console.log("initiating Matomo");
406  var _paq = window._paq = window._paq || [];
407  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
408  _paq.push(["trackPageView"]);
409  _paq.push(["enableLinkTracking"]);
410  (function () {
411    var u = "https://matomo.goteborgco.se/";
412    _paq.push(["setTrackerUrl", u + "matomo.php"]);
413    _paq.push(["setSiteId", "10"]);
414    var d = document,
415      g = d.createElement("script"),
416      s = d.getElementsByTagName("script")[0];
417    g.async = true;
418    g.src = u + "matomo.js";
419    s.parentNode.insertBefore(g, s);
420  })();
421};
422
423},{}],5:[function(require,module,exports){
424"use strict";
425
426Object.defineProperty(exports, "__esModule", {
427  value: true
428});
429exports.navigation = void 0;
430var e = function e(selector) {
431  return document.querySelector(selector);
432};
433var toggleDrawer = function toggleDrawer() {
434  e('body').classList.toggle('has-open-drawer');
435};
436var toggleLanguage = function toggleLanguage() {
437  e('body').classList.toggle('has-open-language');
438};
439var searchListener = function searchListener(e) {
440  if (e.key === 'Escape') {
441    toggleSearch();
442  }
443};
444var toggleSearch = function toggleSearch(event) {
445  e('body').classList.toggle('has-open-search');
446  if (e('body').classList.contains('has-open-search')) {
447    e('.nav-list-actions-search input[type="search"]').focus();
448    document.body.addEventListener('keydown', searchListener, true);
449  } else {
450    document.body.removeEventListener('keydown', searchListener, true);
451  }
452};
453var getPageY = function getPageY() {
454  return window.pageYOffset || document.body.scrollTop || window.scrollY;
455};
456var logPageY = function logPageY() {
457  console.log('Page Y');
458  if (window.pageYOffset) {
459    console.log('window.pageYOffset', window.pageYOffset);
460  }
461  if (document.body.pageYOffset) {
462    console.log('docuemnt.body.pageYOffset', document.body.pageYOffset);
463  }
464  if (window.scrollY) {
465    console.log('window.scrollY', window.scrollY);
466  }
467  console.log('');
468};
469var setFixed = function setFixed(y) {
470  var isFixed = e('.nav-list').classList.contains('is-fixed');
471
472  // user is scrolled more than 10 pixels and nav isn't fixed, add the fixed class
473  if (y > 10 && !isFixed) {
474    e('.nav-list').classList.add('is-fixed');
475    // user isn't scrolled at all or less than 10 pixels and the nav is fixed, remove the fixed class
476  } else if (y < 10 && isFixed) {
477    e('.nav-list').classList.remove('is-fixed');
478  }
479};
480var setScrollingDown = function setScrollingDown(y, prevY) {
481  var isScrollingDown = e('.nav-list').classList.contains('is-scrolling-down');
482
483  // user is scrolling futher down from previous position and scrolling down class isn't added, add it
484  if (y > 100 && y > prevY && !isScrollingDown) {
485    e('.nav-list').classList.add('is-scrolling-down');
486    // user is scrolling up (less than previous position) and scrolling down class is added, remove it
487  } else if (y < prevY && isScrollingDown) {
488    e('.nav-list').classList.remove('is-scrolling-down');
489  }
490};
491var navigation = exports.navigation = function navigation() {
492  var openDrawer = e('.nav-list-actions-open-drawer');
493  var closeDrawer = e('.nav-drawer-actions-close-drawer');
494  var toggleLangBtn = e('.nav-list-actions-toggle-language');
495  var toggleSearchBtn = e('.nav-list-actions-toggle-search');
496  if (openDrawer && closeDrawer) {
497    openDrawer.addEventListener('click', toggleDrawer);
498    closeDrawer.addEventListener('click', toggleDrawer);
499  }
500  if (toggleLangBtn) {
501    toggleLangBtn.addEventListener('click', toggleLanguage);
502  }
503  if (toggleSearchBtn) {
504    toggleSearchBtn.addEventListener('click', toggleSearch);
505  }
506  var y = getPageY();
507  var prevY = 0;
508  var timer;
509  setFixed(y);
510  window.addEventListener('scroll', function () {
511    if (timer) {
512      window.clearTimeout(timer);
513    }
514    timer = setTimeout(function () {
515      y = getPageY();
516
517      // logPageY()
518      setFixed(y);
519      setScrollingDown(y, prevY);
520      prevY = getPageY();
521    }, 100);
522  });
523};
524
525},{}],6:[function(require,module,exports){
526"use strict";
527
528Object.defineProperty(exports, "__esModule", {
529  value: true
530});
531exports.responsiveVideo = void 0;
532var getCookie = function getCookie(name) {
533  return document.cookie.split("; ").reduce(function (r, v) {
534    var parts = v.split("=");
535    return parts[0] === name ? decodeURIComponent(parts[1]) : r;
536  }, "");
537};
538var wrapElement = function wrapElement(element) {
539  return function (wrapper) {
540    element.parentNode.insertBefore(wrapper, element);
541    wrapper.appendChild(element);
542  };
543};
544var createVideoWrapper = function createVideoWrapper(parentType, parentClass) {
545  return function (childElement) {
546    var parentElement = document.createElement(parentType);
547    parentElement.style.cssText = "padding-bottom: ".concat(childElement.height / childElement.width * 100, "%;");
548    parentElement.setAttribute('class', parentClass);
549    return parentElement;
550  };
551};
552var responsiveVideo = exports.responsiveVideo = function responsiveVideo() {
553  var videos = document.querySelectorAll('iframe[src*="youtube.com"]');
554  videos.forEach(function (video) {
555    if (!getCookie("marketing_cookies")) {
556      video.parentElement.removeChild(video);
557    } else {
558      var wrapper = createVideoWrapper('div', 'responsive-video')(video);
559      wrapElement(video)(wrapper);
560    }
561  });
562};
563
564},{}],7:[function(require,module,exports){
565"use strict";
566
567var _nav = require("./nav");
568var _filter = require("./filter");
569var _googleMaps = require("./google-maps");
570var _responsiveVideo = require("./responsive-video");
571require("./cookie-popup");
572require("./widget-goteborgcom");
573/* global NodeList, Cookies, jQuery */
574
575// import "./programme-load-more";
576
577/* IE 11 fix */
578if (window.NodeList && !NodeList.prototype.forEach) {
579  NodeList.prototype.forEach = Array.prototype.forEach;
580}
581(0, _nav.navigation)();
582(0, _filter.filter)();
583(0, _responsiveVideo.responsiveVideo)();
584(0, _googleMaps.googleMaps)(jQuery);
585
586// has user already accepted cookies? proceed if not
587// if (!Cookies.get("cookie_agreement")) {
588//   // show cookies notice
589//   document.body.classList.add("has-open-cookie-notice");
590//   // listen for clicks on the close cookie notice button
591//   document.querySelector(".cookie-notice").addEventListener("click", (e) => {
592//     if (e.target.classList.contains("close-cookie-notice")) {
593//       // if close cookies notice button is clicked
594//       // set the cookie and remove the notice.
595//       Cookies.set("cookie_agreement", true, { expires: 365 });
596//       document.body.classList.remove("has-open-cookie-notice");
597//     }
598//   });
599// }
600
601},{"./cookie-popup":1,"./filter":2,"./google-maps":3,"./nav":5,"./responsive-video":6,"./widget-goteborgcom":8}],8:[function(require,module,exports){
602"use strict";
603
604window.addEventListener("message", function (e) {
605  var _e$data, _e$data2, _e$data3;
606  if ((_e$data = e.data) !== null && _e$data !== void 0 && _e$data.widgetHeight && (_e$data2 = e.data) !== null && _e$data2 !== void 0 && _e$data2.widgetId) document.getElementById((_e$data3 = e.data) === null || _e$data3 === void 0 ? void 0 : _e$data3.widgetId).style.height = e.data.widgetHeight + "px";
607});
608
609},{}]},{},[7])
610//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvanMvY29va2llLXBvcHVwLmpzIiwiYXNzZXRzL2pzL2ZpbHRlci5qcyIsImFzc2V0cy9qcy9nb29nbGUtbWFwcy5qcyIsImFzc2V0cy9qcy9pbml0aWF0ZUFuYWx5dGljcy5qcyIsImFzc2V0cy9qcy9uYXYuanMiLCJhc3NldHMvanMvcmVzcG9uc2l2ZS12aWRlby5qcyIsImFzc2V0cy9qcy9zY3JpcHQuanMiLCJhc3NldHMvanMvd2lkZ2V0LWdvdGVib3JnY29tLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSxJQUFBLGtCQUFBLEdBQUEsT0FBQTtBQUk2QixTQUFBLDJCQUFBLENBQUEsRUFBQSxDQUFBLFFBQUEsQ0FBQSx5QkFBQSxNQUFBLElBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsQ0FBQSxxQkFBQSxDQUFBLFFBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLDJCQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxNQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxDQUFBLE9BQUEsRUFBQSxNQUFBLENBQUEsWUFBQSxFQUFBLGVBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxDQUFBLFdBQUEsRUFBQSxXQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsTUFBQSxLQUFBLElBQUEsV0FBQSxJQUFBLE1BQUEsS0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxXQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsQ0FBQSxnQkFBQSxTQUFBLGlKQUFBLENBQUEsRUFBQSxDQUFBLE9BQUEsQ0FBQSxnQkFBQSxDQUFBLFdBQUEsRUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLFdBQUEsRUFB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QUksY0FBQSxRQUFBLHVCQUFOLFFBQUEsQ0FBUSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFDLElBQUk7QUFBQSxDQUFDLENBQUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJpbXBvcnQge1xyXG4gIGluaXRpYWx0ZUdvb2dsZVRhZ01hbmFnZXIsXHJcbiAgaW5pdGlhdGVNYXRvbW8sXHJcbiAgaW5pdGlhdGVHb29nbGVBbmFseXRpY3MsXHJcbn0gZnJvbSBcIi4vaW5pdGlhdGVBbmFseXRpY3NcIjtcclxuXHJcbmNvbnN0IHBvcHVwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jb29raWUtcG9wdXBcIik7XHJcblxyXG4vL0RlZmluZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGZvciBwb3B1cCBhbmQgaW5pdGlhbCB1c2VcclxuY29uc3QgZ2V0Q29va2llID0gKG5hbWUpID0+IHtcclxuICByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiOyBcIikucmVkdWNlKChyLCB2KSA9PiB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHYuc3BsaXQoXCI9XCIpO1xyXG4gICAgcmV0dXJuIHBhcnRzWzBdID09PSBuYW1lID8gZGVjb2RlVVJJQ29tcG9uZW50KHBhcnRzWzFdKSA6
610IHI7XHJcbiAgfSwgXCJcIik7XHJcbn07XHJcblxyXG5pbml0aWF0ZU1hdG9tbygpO1xyXG5cclxuY29uc3QgYWRkU3RhdGlzdGljc0Nvb2tpZXMgPSAoKSA9PiB7XHJcbiAgaW5pdGlhdGVHb29nbGVBbmFseXRpY3MoKTtcclxufTtcclxuXHJcbmNvbnN0IGFkZE1hcmtldGluZ0Nvb2tpZXMgPSAoKSA9PiB7XHJcbiAgLy8gR29vZ2xlIFRhZyBNYW5hZ2VyXHJcbiAgaW5pdGlhbHRlR29vZ2xlVGFnTWFuYWdlcigpO1xyXG59O1xyXG5cclxuaWYgKHBvcHVwKSB7XHJcbiAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY29va2llLW92ZXJsYXlcIik7XHJcbiAgY29uc3QgbW9kYWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jb29raWUtcG9wdXAtY29udGVudFwiKTtcclxuICBjb25zdCBtb2RhbExpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tb2RhbC1saW5rXCIpO1xyXG4gIGNvbnN0IGFjY2VwdEFsbEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2V0LWFsbC1jb29raWVzXCIpO1xyXG4gIGNvbnN0IGFjY2VwdE5lY2Vzc2FyeUJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2V0LW5lY2Vzc2FyeS1jb29raWVzXCIpO1xyXG4gIGNvbnN0IGFjY2VwdFNlbGVjdGlvbkJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29uZmlybS1jaG9pY2VcIik7XHJcbiAgY29uc3QgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICBjb25zdCBjb29raWVPcHRpb25TZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNvb2tpZS1wYWdl
610LW9wdGlvblwiKTtcclxuXHJcbiAgZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XHJcblxyXG4gIGNvbnN0IHNldENvb2tpZSA9IChuYW1lLCB2YWx1ZSwgZGF5cyA9IDcsIHBhdGggPSBcIi9cIikgPT4ge1xyXG4gICAgcmVtb3ZlUG9wdXAoKTtcclxuXHJcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIGRheXMgKiA4NjRlNSkudG9VVENTdHJpbmcoKTtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9XHJcbiAgICAgIG5hbWUgK1xyXG4gICAgICBcIj1cIiArXHJcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgK1xyXG4gICAgICBcIjsgZXhwaXJlcz1cIiArXHJcbiAgICAgIGV4cGlyZXMgK1xyXG4gICAgICBcIjsgcGF0aD1cIiArXHJcbiAgICAgIHBhdGg7XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgXCJzdGF0aXN0aWNzX2Nvb2tpZXNcIjpcclxuICAgICAgICBhZGRTdGF0aXN0aWNzQ29va2llcygpO1xyXG5cclxuICAgICAgICBpZiAoZGF5cyA9PT0gNykge1xyXG4gICAgICAgICAgYXV0b0NoZWNrU2V0dGluZyhcInN0YXRpc3RpY3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIm1hcmtldGluZ19jb29raWVzXCI6XHJcbiAgICAgICAgYWRkTWFya2V0aW5nQ29va2llcygpO1xyXG5cclxuICAgICAgICBpZiAoZGF5cyA9PT0gNykge1xyXG4gICAgICAgICAgYXV0b0NoZWNrU2V0dGluZyhcIm1hcmtldGluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGRlbGV0ZUNvb2tpZSA9IChuYW1lLCBwYXRoID0gXCIvXCIpID0+IHtcclxuICAgIHNldENvb2tpZShuYW1lLCBcIlwiLCAtMSwgcGF0aCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgYXV0b0NoZWNrU2V0dGluZyA9IChuYW1lKSA9PiB7XHJcbiAgICBjb29raWVPcHRpb25TZWxlY3QuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChuYW1lID09IG9wdGlvbi52YWx1ZSkge1xyXG4gICAgICAgIG9wdGlvbi5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2Nyb2xsVG9Nb2RhbFRvcCA9ICgpID0+IHtcclxuICAgIGZvciAoY29uc3QgbSBvZiBtb2RhbHMpIHtcclxuICAgICAgbS5zY3JvbGxUbygwLCAwKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBpc092ZXJsYXlIaWRkZW4gPSAoKSA9PiB7XHJcbiAgICBvdmVybGF5LmNsYXNzTGlzdC5jb250YWlucyhcImNvb2tpZS1vdmVybGF5LS1hY3RpdmVcIilcclxuICAgICAgPyAoZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIilcclxuICAgICAgOiAoZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCIpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNob3dQb3B1cCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGgxVGV4dCA9IHBvcHVwLnF1ZXJ5U2VsZWN0b3IoXCJoMVwiKS5pbm5lclRleHQ7XHJcbiAgICBpZiAoaDFUZXh0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJoZXJlXCIpO1xyXG4gICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJjb29raWUtb3ZlcmxheS0tYWN0aXZlXCIpO1xyXG4gICAgICBwb3B1cC5jbGFzc0xpc3QuYWRkKFwiY29va2llLXBvcHVwLS1hY3RpdmVcIik7XHJcbiAgICAgIGlzT3ZlcmxheUhpZGRlbigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlbW92ZVBvcHVwID0gKCkgPT4ge1xyXG4gICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKFwiY29va2llLW92ZXJsYXktLWFjdGl2ZVwiKTtcclxuICAgIHBvcHVwLmNsYXNzTGlzdC5yZW1vdmUoXCJjb29raWUtcG9wdXAtLWFjdGl2ZVwiKTtcclxuICAgIGlzT3ZlcmxheUhpZGRlbigpO1xyXG4gIH07XHJcblxyXG4gIGlmICghZ2V0Q29va2llKFwibmVjZXNzYXJ5X2Nvb2tpZXNcIikpIHtcclxuICAgIHNob3dQb3B1cCgpO1xyXG4gIH1cclxuXHJcbiAgZm9yIChjb25zdCBsaW5rIG9mIG1vZGFsTGlua3MpIHtcclxuICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHNjcm9sbFRvTW9kYWxUb3ApO1xyXG4gIH1cclxuXHJcbiAgYWNjZXB0QWxsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICBzZXRDb29raWUoXCJuZWNlc3NhcnlfY29va2llc1wiLCBcInRydWVcIik7XHJcbiAgICBzZXRDb29raWUoXCJzdGF0aXN0aWNzX2Nvb2tpZXNcIiwgXCJ0cnVlXCIpO1xyXG4gICAgc2V0Q29va2llKFwibWFya2V0aW5nX2Nvb2tpZXNcIiwgXCJ0cnVlXCIpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH0pO1xyXG5cclxuICBhY2NlcHROZWNlc3NhcnlCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIHNldENvb2tpZShcIm5lY2Vzc2FyeV9jb29raWVzXCIsIFwidHJ1ZVwiKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY29uZmlybUNob2ljZSA9ICgpID0+IHtcclxuICAgIGNvbnN0IGNoZWNrQm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbdHlwZT1jaGVja2JveF1cIik7XHJcbiAgICBsZXQgY29va2llTmFtZTtcclxuICAgIGxldCBjb29raWVDaGVja2VkO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja0JveGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvb2tpZU5hbWUgPSBgJHtjaGVja0JveGVzW2ldLnZhbHVlfV9jb29raWVzYDtcclxuICAgICAgY29va2llQ2hlY2tlZCA9IGNoZWNrQm94ZXNbaV0uY2hlY2tlZDtcclxuICAgICAgaWYgKGNvb2tpZUNoZWNrZWQpIHtcclxuICAgICAgICBzZXRDb29raWUoY29va2llTmFtZSwgY29va2llQ2hlY2tlZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNldENvb2tpZShcIm5lY2Vzc2FyeV9jb29raWVzXCIsIFwidHJ1ZVwiKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICB9O1xyXG5cclxuICBhY2NlcHRTZWxlY3Rpb25CdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNvbmZpcm1DaG9pY2UpO1xyXG5cclxuICAvLyBSZXRyaWV2ZSBhbmQgZWRpdCB1c2VyJ3MgcHJldmlvdXMgY2hvaWNlXHJcbiAgY29va2llT3B0aW9uU2VsZWN0LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgb3B0aW9uLnZhbHVlID09PSBcIm1hcmtldGluZ1wiXHJcbiAgICAgID8gKG9wdGlvbi5jaGVja2VkID0gZ2V0Q29va2llKFwibWFya2V0aW5nX2Nvb2tpZXNcIikpXHJcbiAgICAgIDogKG9wdGlvbi5jaGVja2VkID0gZ2V0Q29va2llKFwic3RhdGlzdGljc19jb29raWVzXCIpKTtcclxuXHJcbiAgICBvcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24uY2hlY2tlZCkge1xyXG4gICAgICAgI
610HNldENvb2tpZShgJHtvcHRpb24udmFsdWV9X2Nvb2tpZXNgLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlQ29va2llKGAke29wdGlvbi52YWx1ZX1fY29va2llc2ApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG5cclxuY29uc3Qgc2V0SW5pdGlhbENvb2tpZXMgPSAoKSA9PiB7XHJcbiAgaWYgKGdldENvb2tpZShcInN0YXRpc3RpY3NfY29va2llc1wiKSkge1xyXG4gICAgYWRkU3RhdGlzdGljc0Nvb2tpZXMoKTtcclxuICB9XHJcbiAgaWYgKGdldENvb2tpZShcIm1hcmtldGluZ19jb29raWVzXCIpKSB7XHJcbiAgICBhZGRNYXJrZXRpbmdDb29raWVzKCk7XHJcbiAgfVxyXG59O1xyXG5zZXRJbml0aWFsQ29va2llcygpO1xyXG4iLCJcclxuZXhwb3J0IGNvbnN0IGZpbHRlciA9ICgpID0+IHtcclxuICBjb25zdCB0cmlnZ2VycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5maWx0ZXJzJylcclxuICBjb25zdCB0YXJnZXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1peC1jb250YWluZXInKVxyXG5cclxuICBsZXQgZmlsdGVycyA9IFtdXHJcbiAgY29uc3QgaXRlbXMgPSB0YXJnZXRzICYmIHRhcmdldHMucXVlcnlTZWxlY3RvckFsbCgnLm1peCcpXHJcblxyXG4gIGNvbnN0IGludGVyc2VjdCA9IChhcnIxLCBhcnIyKSA9PiB7XHJcbiAgICByZXR1cm4gYXJyMS5maWx0ZXIoeCA9PiBhcnIyLmluZGV4T2YoeCkgPj0gMCkubGVuZ3RoID4gMFxyXG4gIH1cclxuXHJcbiAgY29uc3QgdXBkYXRlVGFyZ2V0cyA9ICgpID0+IHtcclxuICAgIGlmIChmaWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmIChpbnRlcnNlY3QoZmlsdGVycywgQXJyYXkuZnJvbShpdGVtLmNsYXNzTGlzdCkpKSB7XHJcbiAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21peC1oaWRlJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtaXgtaGlkZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21peC1oaWRlJylcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHVwZGF0ZUZpbHRlcnMgPSB2YWx1ZSA9PiB7XHJcbiAgICBpZiAoZmlsdGVycy5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgZmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWx0ZXJzLnB1c2godmFsdWUpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVGFyZ2V0cygpXHJcbiAgfVxyXG5cclxuICBpZiAodHJpZ2dlcnMpIHtcclxuICAgIHRyaWdnZXJzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZmlsdGVyJykpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ0xJQ0s6RklUTEVSJylcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnNwbGl0KCcuJylbMV1cclxuICAgICAgICB1cGRhdGVGaWx0ZXJzKHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCIvKiBnbG9iYWwgZ29vZ2xlICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnb29nbGVNYXBzICgkKSB7XHJcbiAgLypcclxuICAgKiAgbmV3X21hcFxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZW5kZXIgYSBHb29nbGUgTWFwIG9udG8gdGhlIHNlbGVjdGVkIGpRdWVyeSBlbGVtZW50XHJcbiAgICpcclxuICAgKiAgQHR5cGVcdGZ1bmN0aW9uXHJcbiAgICogIEBkYXRlXHQ4LzExLzIwMTNcclxuICAgKiAgQHNpbmNlXHQ0LjMuMFxyXG4gICAqXHJcbiAgICogIEBwYXJhbVx0JGVsIChqUXVlcnkgZWxlbWVudClcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIG5ld19tYXAgKCRlbCkge1xyXG4gICAgLy8gdmFyXHJcbiAgICB2YXIgJG1hcmtlcnMgPSAkZWwuZmluZCgnLm1hcmtlcicpXHJcblxyXG4gICAgLy8gdmFyc1xyXG4gICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgIHpvb206IDE2LFxyXG4gICAgICBjZW50ZXI6IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoMCwgMCksXHJcbiAgICAgIG1hcFR5cGVJZDogZ29vZ2xlLm1hcHMuTWFwVHlwZUlkLlJPQURNQVBcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgbWFwXHJcbiAgICB2YXIgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCgkZWxbMF0sIGFyZ3MpXHJcblxyXG4gICAgLy8gYWRkIGEgbWFya2VycyByZWZlcmVuY2VcclxuICAgIG1hcC5tYXJrZXJzID0gW11cclxuXHJcbiAgICAvLyBhZGQgbWFya2Vyc1xyXG4gICAgJG1hcmtlcnMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGFkZF9tYXJrZXIoJCh0aGlzKSwgbWFwKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBjZW50ZXIgbWFwXHJcbiAgICBjZW50ZXJfbWFwKG1hcClcclxuXHJcbiAgICAvLyByZXR1cm5cclxuICAgIHJldHVybiBtYXBcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIGFkZF9tYXJrZXJcclxuICAgKlxyXG4gICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGEgbWFya2VyIHRvIHRoZSBzZWxlY3RlZCBHb29nbGUgTWFwXHJcbiAgICpcclxuICAgKiAgQHR5cGVcdGZ1bmN0aW9uXHJcbiAgICogIEBkYXRlXHQ4LzExLzIwMTNcclxuICAgKiAgQHNpbmNlXHQ0LjMuMFxyXG4gICAqXHJcbiAgICogIEBwYXJhbVx0JG1hcmtlciAoalF1ZXJ5IGVsZW1lbnQpXHJcbiAgICogIEBwYXJhbVx0bWFwIChHb29nbGUgTWFwIG9iamVjdClcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIGFkZF9tYXJrZXIgKCRtYXJrZXIsIG1hcCkge1xyXG4gICAgLy8gdmFyXHJcbiAgICB2YXIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZygkbWFya2VyLmF0dHIoJ2RhdGEtbGF0JyksICRtYXJrZXIuYXR0cignZGF0YS1sbmcnKSlcclxuXHJcbiAgICAvLyBjcmVhdGUgbWFya2VyXHJcbiAgICB2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XHJcbiAgICAgIHBvc2l0aW9uOiBsYXRsbmcsXHJcbiAgICAgIG1hcDogbWFwXHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGFkZCB0byBhcnJheVxyXG4gICAgbWFwLm1hcmtlcnMucHVzaChtYXJrZXIpXHJcblxyXG4gICAgLy8gaWYgbWFya2VyIGNvbnRhaW5zIEhUTUwsIGFkZCBpdCB0byBhbiBpbmZvV2luZG93XHJcbiAgICBpZiAoJG1hcmtlci5odG1sKCkpIHtcclxuICAgICAgLy8gY3JlYXRlIGluZm8gd2luZG93XHJcbiAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xyXG4gICAgICAgIGNvbnRlbnQ6ICRtYXJrZXIuaHRtbCgpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBzaG93IGluZm8gd2luZG93IHdoZW4gbWFya2VyIGlzIGNsaWNrZWRcclxuICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaW5mb3dpbmRvdy5vcGVuKG1hcCwgbWFya2VyKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgY2VudGVyX21hcFxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBjZW50ZXIgdGhlIG1hcCwgc2hvd2luZyBhbGwgbWFya2VycyBhdHRhY2hlZCB0byB0aGlzIG1hcFxyXG4gICAqXHJcbiAgICogIEB0eXBlXHRmdW5jdGlvblxyXG4gICAqICBAZGF0ZVx0OC8xMS8yMDEzXHJcbiAgICogIEBzaW5jZVx0NC4zLjBcclxuICAgKlxyXG4gICAqICBAcGFyYW1cdG1hcCAoR29vZ2xlIE1hcCBvYmplY3QpXHJcbiAgICogIEByZXR1cm5cdG4vYVxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBjZW50ZXJfbWFwIChtYXApIHtcclxuICAgIC8vIHZhcnNcclxuICAgIHZhciBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKClcclxuXHJcbiAgICAvLyBsb29wIHRocm91Z2ggYWxsIG1hcmtlcnMgYW5kIGNyZWF0ZSBib3VuZHNcclxuICAgICQuZWFjaChtYXAubWFya2VycywgZnVuY3Rpb24gKGksIG1hcmtlcikge1xyXG4gICAgICB2Y
610XIgbGF0bG5nID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtYXJrZXIucG9zaXRpb24ubGF0KCksIG1hcmtlci5wb3NpdGlvbi5sbmcoKSlcclxuXHJcbiAgICAgIGJvdW5kcy5leHRlbmQobGF0bG5nKVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBvbmx5IDEgbWFya2VyP1xyXG4gICAgaWYgKG1hcC5tYXJrZXJzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIC8vIHNldCBjZW50ZXIgb2YgbWFwXHJcbiAgICAgIG1hcC5zZXRDZW50ZXIoYm91bmRzLmdldENlbnRlcigpKVxyXG4gICAgICBtYXAuc2V0Wm9vbSgxNilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZpdCB0byBib3VuZHNcclxuICAgICAgbWFwLmZpdEJvdW5kcyhib3VuZHMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBkb2N1bWVudCByZWFkeVxyXG4gICAqXHJcbiAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZW5kZXIgZWFjaCBtYXAgd2hlbiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkgKHBhZ2UgaGFzIGxvYWRlZClcclxuICAgKlxyXG4gICAqICBAdHlwZVx0ZnVuY3Rpb25cclxuICAgKiAgQGRhdGVcdDgvMTEvMjAxM1xyXG4gICAqICBAc2luY2VcdDUuMC4wXHJcbiAgICpcclxuICAgKiAgQHBhcmFtXHRuL2FcclxuICAgKiAgQHJldHVyblx0bi9hXHJcbiAgICovXHJcbiAgLy8gZ2xvYmFsIHZhclxyXG4gIFxyXG4gIHZhciBtYXAgPSBudWxsXHJcblxyXG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICAgICQoJy5hY2YtbWFwJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vIGNyZWF0ZSBtYXBcclxuICAgICAgbWFwID0gbmV3X21hcCgkKHRoaXMpKVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBpbml0aWF0ZUdvb2dsZUFuYWx5dGljcyA9ICgpID0+IHtcclxuICBjb25zb2xlLmxvZyhcImluaXRpYXRpbmcgZ29vZ2xlIGFuYWx5dGljc1wiKTtcclxuICAoZnVuY3Rpb24gKGksIHMsIG8sIGcsIHIsIGEsIG0pIHtcclxuICAgIGlbXCJHb29nbGVBbmFseXRpY3NPYmplY3RcIl0gPSByO1xyXG4gICAgKGlbcl0gPVxyXG4gICAgICBpW3JdIHx8XHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAoaVtyXS5xID0gaVtyXS5xIHx8IFtdKS5wdXNoKGFyZ3VtZW50cyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICAoaVtyXS5sID0gMSAqIG5ldyBEYXRlKCkpO1xyXG4gICAgKGEgPSBzLmNyZWF0ZUVsZW1lbnQobykpLCAobSA9IHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF0pO1xyXG4gICAgYS5hc3luYyA9IDE7XHJcbiAgICBhLnNyYyA9IGc7XHJcbiAgICBtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsIG0pO1xyXG4gIH0pKFxyXG4gICAgd2luZG93LFxyXG4gICAgZG9jdW1lbnQsXHJcbiAgICBcInNjcmlwdFwiLFxyXG4gICAgXCIvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanNcIixcclxuICAgIFwiZ2FcIlxyXG4gICk7XHJcblxyXG4gIGdhKFwiY3JlYXRlXCIsIFwiVUEtNzUxNDE2NDctM1wiLCB7XHJcbiAgICBjb29raWVFeHBpcmVzOiA2MCAqIDYwICogMjQgKiAoMzY1IC8gMiksIC8vIFRpbWUgaW4gc2Vjb25kcy5cclxuICB9KTtcclxuICBnYShcInNlbmRcIiwgXCJwYWdldmlld1wiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsdGVHb29nbGVUYWdNYW5hZ2VyID0gKCkgPT4ge1xyXG4gIGNvbnNvbGUubG9nKFwiaW5pdGlhdGluZyBnb29nbGUgdGFnIG1hbmFnZXJcIik7XHJcbiAgKGZ1bmN0aW9uICh3LCBkLCBzLCBsLCBpKSB7XHJcbiAgICB3W2xdID0gd1tsXSB8fCBbXTtcclxuICAgIHdbbF0ucHVzaCh7IFwiZ3RtLnN0YXJ0XCI6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBldmVudDogXCJndG0uanNcIiB9KTtcclxuICAgIHZhciBmID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxcclxuICAgICAgaiA9IGQuY3JlYXRlRWxlbWVudChzKSxcclxuICAgICAgZGwgPSBsICE9IFwiZGF0YUxheWVyXCIgPyBcIiZsPVwiICsgbCA6IFwiXCI7XHJcbiAgICBqLmFzeW5jID0gdHJ1ZTtcclxuICAgIGouc3JjID0gXCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndG0uanM/aWQ9XCIgKyBpICsgZGw7XHJcbiAgICBmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosIGYpO1xyXG4gIH0pKHdpbmRvdywgZG9jdW1lbnQsIFwic2NyaXB0XCIsIFwiZGF0YUxheWVyXCIsIFwiR1RNLU43V0s1MzRcIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhdGVNYXRvbW8gPSAoKSA9PiB7XHJcbiAgY29uc29sZS5sb2coXCJpbml0aWF0aW5nIE1hdG9tb1wiKTtcclxuICB2YXIgX3BhcSA9ICh3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdKTtcclxuICAvKiB0cmFja2VyIG1ldGhvZHMgbGlrZSBcInNldEN1c3RvbURpbWVuc2lvblwiIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIFwidHJhY2tQYWdlVmlld1wiICovXHJcbiAgX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xyXG4gIF9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xyXG4gIChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdSA9IFwiaHR0cHM6Ly9tYXRvbW8uZ290ZWJvcmdjby5zZS9cIjtcclxuICAgIF9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIHUgKyBcIm1hdG9tby5waHBcIl0pO1xyXG4gICAgX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBcIjEwXCJdKTtcclxuICAgIHZhciBkID0gZG9jdW1lbnQsXHJcbiAgICAgIGcgPSBkLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksXHJcbiAgICAgIHMgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xyXG4gICAgZy5hc3luYyA9IHRydWU7XHJcbiAgICBnLnNyYyA9IHUgKyBcIm1hdG9tby5qc1wiO1xyXG4gICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLCBzKTtcclxuICB9KSgpO1xyXG59O1xyXG4iLCJjb25zdCBlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcclxuXHJcbmNvbnN0IHRvZ2dsZURyYXdlciA9ICgpID0+IHtcclxuICBlKCdib2R5JykuY2xhc3NMaXN0LnRvZ2dsZSgnaGFzLW9wZW4tZHJhd2VyJylcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlTGFuZ3VhZ2UgPSAoKSA9PiB7XHJcbiAgZSgnYm9keScpLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1vcGVuLWxhbmd1YWdlJylcclxufVxyXG5cclxuY29uc3Qgc2VhcmNoTGlzdGVuZXIgPSAoZSkgPT4ge1xyXG4gIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgIHRvZ2dsZVNlYXJjaCgpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVTZWFyY2ggPSAoZXZlbnQpID0+IHtcclxuICBlKCdib2R5JykuY2xhc3NMaXN0LnRvZ2dsZSgnaGFzLW9wZW4tc2VhcmNoJylcclxuXHJcbiAgaWYgKGUoJ2JvZHknKS5jbGFzc0xpc3QuY29udGFpbnMoJ2hhcy1vcGVuLXNlYXJjaCcpKSB7XHJcbiAgICBlKCcubmF2LWxpc3QtYWN0aW9ucy1zZWFyY2ggaW5wdXRbdHlwZT1cInNlYXJjaFwiXScpLmZvY3VzKClcclxuXHJcbiAgICBkb2
610N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBzZWFyY2hMaXN0ZW5lciwgdHJ1ZSlcclxuICB9IGVsc2Uge1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgc2VhcmNoTGlzdGVuZXIsIHRydWUpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBnZXRQYWdlWSA9ICgpID0+ICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgd2luZG93LnNjcm9sbFkpXHJcblxyXG5jb25zdCBsb2dQYWdlWSA9ICgpID0+IHtcclxuICBjb25zb2xlLmxvZygnUGFnZSBZJylcclxuICBpZiAod2luZG93LnBhZ2VZT2Zmc2V0KSB7IGNvbnNvbGUubG9nKCd3aW5kb3cucGFnZVlPZmZzZXQnLCB3aW5kb3cucGFnZVlPZmZzZXQpIH1cclxuICBpZiAoZG9jdW1lbnQuYm9keS5wYWdlWU9mZnNldCkgeyBjb25zb2xlLmxvZygnZG9jdWVtbnQuYm9keS5wYWdlWU9mZnNldCcsIGRvY3VtZW50LmJvZHkucGFnZVlPZmZzZXQpIH1cclxuICBpZiAod2luZG93LnNjcm9sbFkpIHsgY29uc29sZS5sb2coJ3dpbmRvdy5zY3JvbGxZJywgd2luZG93LnNjcm9sbFkpIH1cclxuICBjb25zb2xlLmxvZygnJylcclxufVxyXG5cclxuY29uc3Qgc2V0Rml4ZWQgPSB5ID0+IHtcclxuICBjb25zdCBpc0ZpeGVkID0gZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1maXhlZCcpXHJcblxyXG4gIC8vIHVzZXIgaXMgc2Nyb2xsZWQgbW9yZSB0aGFuIDEwIHBpeGVscyBhbmQgbmF2IGlzbid0IGZpeGVkLCBhZGQgdGhlIGZpeGVkIGNsYXNzXHJcbiAgaWYgKHkgPiAxMCAmJiAhaXNGaXhlZCkge1xyXG4gICAgZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LmFkZCgnaXMtZml4ZWQnKVxyXG4gICAgLy8gdXNlciBpc24ndCBzY3JvbGxlZCBhdCBhbGwgb3IgbGVzcyB0aGFuIDEwIHBpeGVscyBhbmQgdGhlIG5hdiBpcyBmaXhlZCwgcmVtb3ZlIHRoZSBmaXhlZCBjbGFzc1xyXG4gIH0gZWxzZSBpZiAoeSA8IDEwICYmIGlzRml4ZWQpIHtcclxuICAgIGUoJy5uYXYtbGlzdCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWZpeGVkJylcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHNldFNjcm9sbGluZ0Rvd24gPSAoeSwgcHJldlkpID0+IHtcclxuICBjb25zdCBpc1Njcm9sbGluZ0Rvd24gPSBlKCcubmF2LWxpc3QnKS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXNjcm9sbGluZy1kb3duJylcclxuXHJcbiAgLy8gdXNlciBpcyBzY3JvbGxpbmcgZnV0aGVyIGRvd24gZnJvbSBwcmV2aW91cyBwb3NpdGlvbiBhbmQgc2Nyb2xsaW5nIGRvd24gY2xhc3MgaXNuJ3QgYWRkZWQsIGFkZCBpdFxyXG4gIGlmICh5ID4gMTAwICYmIHkgPiBwcmV2WSAmJiAhaXNTY3JvbGxpbmdEb3duKSB7XHJcbiAgICBlKCcubmF2LWxpc3QnKS5jbGFzc0xpc3QuYWRkKCdpcy1zY3JvbGxpbmctZG93bicpXHJcbiAgICAvLyB1c2VyIGlzIHNjcm9sbGluZyB1cCAobGVzcyB0aGFuIHByZXZpb3VzIHBvc2l0aW9uKSBhbmQgc2Nyb2xsaW5nIGRvd24gY2xhc3MgaXMgYWRkZWQsIHJlbW92ZSBpdFxyXG4gIH0gZWxzZSBpZiAoeSA8IHByZXZZICYmIGlzU2Nyb2xsaW5nRG93bikge1xyXG4gICAgZSgnLm5hdi1saXN0JykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2Nyb2xsaW5nLWRvd24nKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5hdmlnYXRpb24gPSAoKSA9PiB7XHJcbiAgY29uc3Qgb3BlbkRyYXdlciA9IGUoJy5uYXYtbGlzdC1hY3Rpb25zLW9wZW4tZHJhd2VyJylcclxuICBjb25zdCBjbG9zZURyYXdlciA9IGUoJy5uYXYtZHJhd2VyLWFjdGlvbnMtY2xvc2UtZHJhd2VyJylcclxuICBjb25zdCB0b2dnbGVMYW5nQnRuID0gZSgnLm5hdi1saXN0LWFjdGlvbnMtdG9nZ2xlLWxhbmd1YWdlJylcclxuICBjb25zdCB0b2dnbGVTZWFyY2hCdG4gPSBlKCcubmF2LWxpc3QtYWN0aW9ucy10b2dnbGUtc2VhcmNoJylcclxuXHJcbiAgaWYgKG9wZW5EcmF3ZXIgJiYgY2xvc2VEcmF3ZXIpIHtcclxuICAgIG9wZW5EcmF3ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVEcmF3ZXIpXHJcbiAgICBjbG9zZURyYXdlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZURyYXdlcilcclxuICB9XHJcblxyXG4gIGlmICh0b2dnbGVMYW5nQnRuKSB7XHJcbiAgICB0b2dnbGVMYW5nQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlTGFuZ3VhZ2UpXHJcbiAgfVxyXG5cclxuICBpZiAodG9nZ2xlU2VhcmNoQnRuKSB7XHJcbiAgICB0b2dnbGVTZWFyY2hCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVTZWFyY2gpXHJcbiAgfVxyXG5cclxuICBsZXQgeSA9IGdldFBhZ2VZKClcclxuICBsZXQgcHJldlkgPSAwXHJcbiAgbGV0IHRpbWVyXHJcblxyXG4gIHNldEZpeGVkKHkpXHJcblxyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XHJcbiAgICBpZiAodGltZXIpIHtcclxuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcilcclxuICAgIH1cclxuXHJcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICB5ID0gZ2V0UGFnZVkoKVxyXG5cclxuICAgICAgLy8gbG9nUGFnZVkoKVxyXG4gICAgICBzZXRGaXhlZCh5KVxyXG4gICAgICBzZXRTY3JvbGxpbmdEb3duKHksIHByZXZZKVxyXG5cclxuICAgICAgcHJldlkgPSBnZXRQYWdlWSgpXHJcbiAgICB9LCAxMDApXHJcbiAgfSlcclxufVxyXG4iLCJjb25zdCBnZXRDb29raWUgPSAobmFtZSkgPT4ge1xyXG4gIHJldHVybiBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7IFwiKS5yZWR1Y2UoKHIsIHYpID0+IHtcclxuICAgIGNvbnN0IHBhcnRzID0gdi5zcGxpdChcIj1cIik7XHJcbiAgICByZXR1cm4gcGFydHNbMF0gPT09IG5hbWUgPyBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMV0pIDogcjtcclxuICB9LCBcIlwiKTtcclxufTtcclxuXHJcbmNvbnN0IHdyYXBFbGVtZW50ID0gZWxlbWVudCA9PiB3cmFwcGVyID0+IHtcclxuICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGVsZW1lbnQpXHJcbiAgd3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50KVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVWaWRlb1dyYXBwZXIgPSAocGFyZW50VHlwZSwgcGFyZW50Q2xhc3MpID0+IGNoaWxkRWxlbWVudCA9PiB7XHJcbiAgY29uc3QgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50VHlwZSlcclxuXHJcbiAgcGFyZW50RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gYHBhZGRpbmctYm90dG9tOiAkeyhjaGlsZEVsZW1lbnQuaGVpZ2h0IC8gY2hpbGRFbGVtZW50LndpZHR
610oKSAqIDEwMH0lO2BcclxuICBwYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBwYXJlbnRDbGFzcylcclxuXHJcbiAgcmV0dXJuIHBhcmVudEVsZW1lbnRcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlc3BvbnNpdmVWaWRlbyA9ICgpID0+IHtcclxuICBjb25zdCB2aWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbc3JjKj1cInlvdXR1YmUuY29tXCJdJylcclxuXHJcbiAgdmlkZW9zLmZvckVhY2godmlkZW8gPT4ge1xyXG4gICAgaWYgKCFnZXRDb29raWUoXCJtYXJrZXRpbmdfY29va2llc1wiKSkge1xyXG4gICAgICB2aWRlby5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHZpZGVvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBjcmVhdGVWaWRlb1dyYXBwZXIoJ2RpdicsICdyZXNwb25zaXZlLXZpZGVvJykodmlkZW8pXHJcbiAgXHJcbiAgICAgIHdyYXBFbGVtZW50KHZpZGVvKSh3cmFwcGVyKVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuIiwiLyogZ2xvYmFsIE5vZGVMaXN0LCBDb29raWVzLCBqUXVlcnkgKi9cclxuXHJcbmltcG9ydCB7IG5hdmlnYXRpb24gfSBmcm9tIFwiLi9uYXZcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XHJcbmltcG9ydCB7IGdvb2dsZU1hcHMgfSBmcm9tIFwiLi9nb29nbGUtbWFwc1wiO1xyXG5pbXBvcnQgeyByZXNwb25zaXZlVmlkZW8gfSBmcm9tIFwiLi9yZXNwb25zaXZlLXZpZGVvXCI7XHJcbmltcG9ydCBcIi4vY29va2llLXBvcHVwXCI7XHJcbi8vIGltcG9ydCBcIi4vcHJvZ3JhbW1lLWxvYWQtbW9yZVwiO1xyXG5pbXBvcnQgXCIuL3dpZGdldC1nb3RlYm9yZ2NvbVwiO1xyXG5cclxuXHJcbi8qIElFIDExIGZpeCAqL1xyXG5pZiAod2luZG93Lk5vZGVMaXN0ICYmICFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xyXG4gIE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XHJcbn1cclxuXHJcbm5hdmlnYXRpb24oKTtcclxuZmlsdGVyKCk7XHJcbnJlc3BvbnNpdmVWaWRlbygpO1xyXG5nb29nbGVNYXBzKGpRdWVyeSk7XHJcblxyXG4vLyBoYXMgdXNlciBhbHJlYWR5IGFjY2VwdGVkIGNvb2tpZXM/IHByb2NlZWQgaWYgbm90XHJcbi8vIGlmICghQ29va2llcy5nZXQoXCJjb29raWVfYWdyZWVtZW50XCIpKSB7XHJcbi8vICAgLy8gc2hvdyBjb29raWVzIG5vdGljZVxyXG4vLyAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImhhcy1vcGVuLWNvb2tpZS1ub3RpY2VcIik7XHJcbi8vICAgLy8gbGlzdGVuIGZvciBjbGlja3Mgb24gdGhlIGNsb3NlIGNvb2tpZSBub3RpY2UgYnV0dG9uXHJcbi8vICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jb29raWUtbm90aWNlXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4vLyAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImNsb3NlLWNvb2tpZS1ub3RpY2VcIikpIHtcclxuLy8gICAgICAgLy8gaWYgY2xvc2UgY29va2llcyBub3RpY2UgYnV0dG9uIGlzIGNsaWNrZWRcclxuLy8gICAgICAgLy8gc2V0IHRoZSBjb29raWUgYW5kIHJlbW92ZSB0aGUgbm90aWNlLlxyXG4vLyAgICAgICBDb29raWVzLnNldChcImNvb2tpZV9hZ3JlZW1lbnRcIiwgdHJ1ZSwgeyBleHBpcmVzOiAzNjUgfSk7XHJcbi8vICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImhhcy1vcGVuLWNvb2tpZS1ub3RpY2VcIik7XHJcbi8vICAgICB9XHJcbi8vICAgfSk7XHJcbi8vIH1cclxuIiwid2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsZT0+e2lmKGUuZGF0YT8ud2lkZ2V0SGVpZ2h0ICYmIGUuZGF0YT8ud2lkZ2V0SWQpZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5kYXRhPy53aWRnZXRJZCkuc3R5bGUuaGVpZ2h0PWUuZGF0YS53aWRnZXRIZWlnaHQrXCJweFwifSk7Il19

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.