PageSourceSearch

https://www.centarahotelsresorts.com/themes/custom/centara_core/dist/js/js/offers-geofencing.js?v=10.6.17

js centarahotelsresorts.com collected 2026-09-24 17:47:11 UTC 31,550 bytes, 238 lines download raw bytes

1"use strict";
2
3function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
4
5function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
7function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
9jQuery.fn.offerGeofencing = function offerGeofencing(customOptions, callback) {
10  var _this = this;
11
12  var defaultOptions = {
13    items: '.view-content .views-row div[data-wrapper="offer-tile-wrapper"]',
14    itemsClass: '.views-row',
15    itemsWrapper: '.view-content',
16    tileShowCount: "all",
17    paginate: {
18      status: false,
19      pageItem: '.views-row',
20      desktop: {
21        "default": 3,
22        increment: 3
23      },
24      tablet: {
25        "default": 2,
26        increment: 2
27      },
28      mobile: {
29        "default": 1,
30        increment: 1
31      },
32      showLess: true,
33      more: {
34        text: "Show more",
35        "class": ""
36      },
37      less: {
38        text: "Show less",
39        "class": ""
40      },
41      count: true,
42      totalRemaining: true
43    }
44  };
45
46  var options = _objectSpread({}, defaultOptions, {}, customOptions);
47
48  var init = function init() {
49    var currentCountry = window.Cookies.get("current_country");
50
51    if (typeof currentCountry === "undefined" || currentCountry == '') {
52      currentCountry = "TH";
53    } else {
54      currentCountry = currentCountry.toUpperCase();
55    }
56
57    var offerTiles = jQuery(_this).find("".concat(options.items));
58    var count = 1;
59
60    if (offerTiles.length > 0) {
61      offerTiles.each(function (key, object) {
62        var blackListedCountry = jQuery(object).attr('data-blacklisted-countries');
63        var whiteListedCountry = jQuery(object).attr('data-whitelisted-countries'); // If offer is black listed for thr current country then remove it.
64
65        if (typeof blackListedCountry !== 'undefined' && blackListedCountry !== '') {
66          var blackListedCountryArr = blackListedCountry.split(', ');
67
68          if (jQuery.inArray(currentCountry, blackListedCountryArr) != -1) {
69            if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) {
70              jQuery(object).parents("".concat(options.itemsClass)).remove();
71            }
72          }
73        } else {
74          if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) {
75            jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', "");
76          }
77        } // If offer not white listed for the current country then remove it.
78
79
80        if (typeof whiteListedCountry !== 'undefined' && whiteListedCountry !== '') {
81          var whiteListedCountryArr = whiteListedCountry.split(', ');
82
83          if (jQuery.inArray(currentCountry, whiteListedCountryArr) == -1) {
84            if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) {
85              jQuery(object).parents("".concat(options.itemsClass)).remove();
86            }
87          } else {
88            if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) {
89              jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', count);
90              count = count + 1;
91            }
92          }
93        } else {
94          if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) {
95            jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', "");
96          }
97        }
98      });
98 // Re-check offer tile after removing offers.
99
100      var offerTilesLength = jQuery(_this).find("".concat(options.items)).length; // Un paginate the pagination.
101
102      if (jQuery(_this).find('.btn-container').length > 0) {
103        jQuery(_this).find('.btn-container').remove();
104      }
105
106      if (offerTilesLength > 0) {
107        // Show specific number of offers.
108        if (options.tileShowCount != 'all' && offerTilesLength > options.tileShowCount) {
109          sortOfferTiles();
110          var offerTilesParent = jQuery(_this).find("".concat(options.itemsClass));
111          offerTilesParent.slice(options.tileShowCount).remove();
112        } // Enable pagination.
113
114
115        if (options.paginate.status == true) {
116          jQuery(_this).paginate({
117            items: options.paginate.pageItem,
118            more: {
119              text: options.paginate.more.text,
120              "class": options.paginate.more["class"]
121            },
122            less: {
123              text: options.paginate.less.text,
124              "class": options.paginate.less["class"]
125            },
126            count: options.paginate.count,
127            showLess: options.paginate.showLess,
128            desktop: {
129              "default": options.paginate.desktop["default"],
130              increment: options.paginate.desktop.increment
131            },
132            tablet: {
133              "default": options.paginate.desktop["default"],
134              increment: options.paginate.desktop["default"]
135            },
136            mobile: {
137              "default": options.paginate.tablet["default"],
138              increment: options.paginate.tablet["default"]
139            },
140            totalRemaining: options.paginate.totalRemaining
141          });
142        }
143      }
144    } // Defining callback.
145    // We are using it in some special cases.
146    // Like before slider initalizing.
147
148
149    if (typeof callback !== "undefined") {
150      // If we have to call the methods after the call of geo-fencing.
151      // Then we can use those methods under callback.
152      callback();
153    }
154  };
155
156  var sortOfferTiles = function sortOfferTiles() {
157    var sortedLength = jQuery(_this).find("".concat(options.itemsClass, ":not([data-offer-sort=\"\"])")).length + 1;
158    var nonSortedWrapperTiles = jQuery(_this).find("".concat(options.itemsClass, "[data-offer-sort=\"\"]"));
159    nonSortedWrapperTiles.each(function (key, object) {
160      jQuery(object).attr('data-offer-sort', sortedLength);
161      sortedLength = sortedLength + 1;
162    });
163    var mainWrapper = jQuery(_this).find("".concat(options.itemsWrapper));
164    var itemWrapper = jQuery(_this).find("".concat(options.itemsClass));
165    itemWrapper.sort(function (a, b) {
166      var startA = parseInt(jQuery(a).data('offer-sort')) || Number.MAX_VALUE;
167      var startB = parseInt(jQuery(b).data('offer-sort')) || Number.MAX_VALUE;
168      return startA === startB ? 0 : startA > startB ? 1 : -1;
169    }).appendTo(mainWrapper);
170  }; // Sometime cookie takes time to set.
171  // So we can't get it for first time.
172  // So here we again call to server for country code.
173  // Then set the cookie again for country for safer side.
174  // Init method also called in it.
175
176
177  var fallbackCountryInit = function fallbackCountryInit() {
178    var baseUrl = window.location.origin;
179    var url = baseUrl + "/currency/country";
180    jQuery.ajax({
181      url: url,
182      type: "GET",
183      dataType: "json",
184      async: true,
185      success: function success(response) {
186        window.Cookies.set("current_country", response.data.current_country_code, {
187          path: '/'
188        });
189        init();
190      },
191      error: function error() {
192        window.Cookies.set("current_country", "TH", {
193          path: '/'
194        });
195        init();
196      }
197    });
198  };
199
200  var countryInit = function countryInit() {
201    // Lab tools: skip cross-origin Cloudflare fetch (CORS fails on local/LH).
202    if (navigator.webdriver) {
203      window.Cookies.set("current_country", "TH", {
204        path: '/'
205      });
206      init();
207      return;
208    }
209
210    fetch('https://www.centarahotelsresorts.com/cdn-cgi/trace').then(function (res) {
211      return res.text();
212    }).then(function (t) {
213      var data = t.replace(/[\r\n]+/g, '","').replace(/\=+/g, '":"');
214      data = '{"' + data.slice(0, data.lastIndexOf('","')) + '"}';
215      var jsondata = JSON.parse(data);
216
217      if (typeof jsondata.loc !== "undefined" && jsondata.loc != '') {
218        window.Cookies.set("current_country", jsondata.loc, {
219          path: '/'
220        });
221        init();
222      } else {
223        fallbackCountryInit();
224      }
225    })["catch"](function () {
226      fallbackCountryInit();
227    });
228  };
229
230  var currentCountry = window.Cookies.get("current_country");
231
232  if (typeof currentCountry === "undefined" || currentCountry == '') {
233    countryInit();
234  } else {
235    init();
236  }
237};
238//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL29mZmVycy1nZW9mZW5jaW5nLmpzIl0sIm5hbWVzIjpbImpRdWVyeSIsImZuIiwib2ZmZXJHZW9mZW5jaW5nIiwiY3VzdG9tT3B0aW9ucyIsImNhbGxiYWNrIiwiZGVmYXVsdE9wdGlvbnMiLCJpdGVtcyIsIml0ZW1zQ2xhc3MiLCJpdGVtc1dyYXBwZXIiLCJ0aWxlU2hvd0NvdW50IiwicGFnaW5hdGUiLCJzdGF0dXMiLCJwYWdlSXRlbSIsImRlc2t0b3AiLCJpbmNyZW1lbnQiLCJ0YWJsZXQiLCJtb2JpbGUiLCJzaG93TGVzcyIsIm1vcmUiLCJ0ZXh0IiwibGVzcyIsImNvdW50IiwidG90YWxSZW1haW5pbmciLCJvcHRpb25zIiwiaW5pdCIsImN1cnJlbnRDb3VudHJ5Iiwid2luZG93IiwiQ29va2llcyIsImdldCIsInRvVXBwZXJDYXNlIiwib2ZmZXJUaWxlcyIsImZpbmQiLCJsZW5ndGgiLCJlYWNoIiwia2V5Iiwib2JqZWN0IiwiYmxhY2tMaXN0ZWRDb3VudHJ5IiwiYXR0ciIsIndoaXRlTGlzdGVkQ291bnRyeSIsImJsYWNrTGlzdGVkQ291bnRyeUFyciIsInNwbGl0IiwiaW5BcnJheSIsInBhcmVudHMiLCJyZW1vdmUiLCJ3aGl0ZUxpc3RlZENvdW50cnlBcnIiLCJvZmZlclRpbGVzTGVuZ3RoIiwic29ydE9mZmVyVGlsZXMiLCJvZmZlclRpbGVzUGFyZW50Iiwic2xpY2UiLCJzb3J0ZWRMZW5ndGgiLCJub25Tb3J0ZWRXcmFwcGVyVGlsZXMiLCJtYWluV3JhcHBlciIsIml0ZW1XcmFwcGVyIiwic29ydCIsImEiLCJiIiwic3RhcnRBIiwicGFyc2VJbnQiLCJkYXRhIiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwic3RhcnRCIiwiYXBwZW5kVG8iLCJmYWxsYmFja0NvdW50cnlJbml0IiwiYmFzZVVybCIsImxvY2F0aW9uIiwib3JpZ2luIiwidXJsIiwiYWpheCIsInR5cGUiLCJkYXRhVHlwZSIsImFzeW5jIiwic3VjY2VzcyIsInJlc3BvbnNlIiwic2V0IiwiY3VycmVudF9jb3VudHJ5X2NvZGUiLCJwYXRoIiwiZXJyb3IiLCJjb3VudHJ5SW5pdCIsIm5hdmlnYXRvciIsIndlYmRyaXZlciIsImZldGNoIiwidGhlbiIsInJlcyIsInQiLCJyZXBsYWNlIiwibGFzdEluZGV4T2YiLCJqc29uZGF0YSIsIkpTT04iLCJwYXJzZSIsImxvYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQUEsTUFBTSxDQUFDQyxFQUFQLENBQVVDLGVBQVYsR0FBNEIsU0FBU0EsZUFBVCxDQUF5QkMsYUFBekIsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQUE7O0FBQzVFLE1BQU1DLGNBQWMsR0FBRztBQUNyQkMsSUFBQUEsS0FBSyxFQUFFLGlFQURjO0FBRXJCQyxJQUFBQSxVQUFVLEVBQUUsWUFGUztBQUdyQkMsSUFBQUEsWUFBWSxFQUFFLGVBSE87QUFJckJDLElBQUFBLGFBQWEsRUFBRSxLQUpNO0FBS3JCQyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsTUFBTSxFQUFFLEtBREE7QUFFUkMsTUFBQUEsUUFBUSxFQUFFLFlBRkY7QUFHUkMsTUFBQUEsT0FBTyxFQUFFO0FBQ1AsbUJBQVMsQ0FERjtBQUVQQyxRQUFBQSxTQUFTLEVBQUU7QUFGSixPQUhEO0FBT1JDLE1BQUFBLE1BQU0sRUFBRTtBQUNOLG1CQUFTLENBREg7QUFFTkQsUUFBQUEsU0FBUyxFQUFFO0FBRkwsT0FQQTtBQVdSRSxNQUFBQSxNQUFNLEVBQUU7QUFDTixtQkFBUyxDQURIO0FBRU5GLFFBQUFBLFNBQVMsRUFBRTtBQUZMLE9BWEE7QUFlUkcsTUFBQUEsUUFBUSxFQUFFLElBZkY7QUFnQlJDLE1BQUFBLElBQUksRUFBRTtBQUNKQyxRQUFBQSxJQUFJLEVBQUUsV0FERjtBQUVKLGlCQUFPO0FBRkgsT0FoQkU7QUFvQlJDLE1BQUFBLElBQUksRUFBRTtBQUNKRCxRQUFBQSxJQUFJLEVBQUUsV0FERjtBQUVKLGlCQUFPO0FBRkgsT0FwQkU7QUF3QlJFLE1BQUFBLEtBQUssRUFBRSxJQXhCQztBQXlCUkMs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jaW5nKGN1c3RvbU9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGl0ZW1zOiAnLnZpZXctY29udGVudCAudmlld3Mtcm93IGRpdltkYXRhLXdyYXBwZXI9XCJvZmZlci10aWxlLXdyYXBwZXJcIl0nLFxuICAgIGl0ZW1zQ2xhc3M6ICcudmlld3Mtcm93JyxcbiAgICBpdGVtc1dyYXBwZXI6ICcudmlldy1jb250ZW50JyxcbiAgICB0aWxlU2hvd0NvdW50OiBcImFsbFwiLFxuICAgIHBhZ2luYXRlOiB7XG4gICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgcGFnZUl0ZW06ICcudmlld3Mtcm93JyxcbiAgICAgIGRlc2t0b3A6IHtcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgICAgaW5jcmVtZW50OiAzXG4gICAgICB9LFxuICAgICAgdGFibGV0OiB7XG4gICAgICAgIGRlZmF1bHQ6IDIsXG4gICAgICAgIGluY3JlbWVudDogMlxuICAgICAgfSxcbiAgICAgIG1vYmlsZToge1xuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICBpbmNyZW1lbnQ6IDFcbiAgICAgIH0sXG4gICAgICBzaG93TGVzczogdHJ1ZSxcbiAgICAgIG1vcmU6IHtcbiAgICAgICAgdGV4dDogXCJTaG93IG1vcmVcIixcbiAgICAgICAgY2xhc3M6IFwiXCJcbiAgICAgIH0sXG4gICAgICBsZXNzOiB7XG4gICAgICAgIHRleHQ6IFwiU2hvdyBsZXNzXCIsXG4gICAgICAgIGNsYXNzOiBcIlwiXG4gICAgICB9LFxuICAgICAgY291bnQ6IHRydWUsXG4gICAgICB0b3RhbFJlbWFpbmluZzogdHJ1ZVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAuLi5jdXN0b21PcHRpb25zXG4gIH07XG5cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBsZXQgY3VycmVudENvdW50cnkgPSB3aW5kb3cuQ29va2llcy5nZXQoXCJjdXJyZW50X2NvdW50cnlcIik7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50Q291bnRyeSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBjdXJyZW50Q291bnRyeSA9PSAnJykge1xuICAgICAgY3VycmVudENvdW50cnkgPSBcIlRIXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3VycmVudENvdW50cnkgPSBjdXJyZW50Q291bnRyeS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgb2ZmZXJUaWxlcyA9IGpRdWVyeSh0aGlzKS5maW5kKGAke29wdGlvbnMuaXRlbXN9YCk7XG4gICAgdmFyIGNvdW50ID0gMTtcbiAgICBpZiAob2ZmZXJUaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZlclRpbGVzLmVhY2goZnVuY3Rpb24oa2V5LCBvYmplY3QpIHtcbiAgICAgICAgdmFyIGJsYWNrTGlzdGVkQ291bnRyeSA9IGpRdWVyeShvYmplY3QpLmF0dHIoJ2RhdGEtYmxhY2tsaXN0ZWQtY291bnRyaWVzJyk7XG4gICAgICAgI
238HZhciB3aGl0ZUxpc3RlZENvdW50cnkgPSBqUXVlcnkob2JqZWN0KS5hdHRyKCdkYXRhLXdoaXRlbGlzdGVkLWNvdW50cmllcycpO1xuICAgICAgICAvLyBJZiBvZmZlciBpcyBibGFjayBsaXN0ZWQgZm9yIHRociBjdXJyZW50IGNvdW50cnkgdGhlbiByZW1vdmUgaXQuXG4gICAgICAgIGlmICh0eXBlb2YgYmxhY2tMaXN0ZWRDb3VudHJ5ICE9PSAndW5kZWZpbmVkJyAmJiBibGFja0xpc3RlZENvdW50cnkgIT09ICcnKSB7XG4gICAgICAgICAgdmFyIGJsYWNrTGlzdGVkQ291bnRyeUFyciA9IGJsYWNrTGlzdGVkQ291bnRyeS5zcGxpdCgnLCAnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoalF1ZXJ5LmluQXJyYXkoY3VycmVudENvdW50cnksIGJsYWNrTGlzdGVkQ291bnRyeUFycikgIT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChqUXVlcnkob2JqZWN0KS5wYXJlbnRzKGAke29wdGlvbnMuaXRlbXNDbGFzc31gKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkuYXR0cignZGF0YS1vZmZlci1zb3J0JywgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2ZmZXIgbm90IHdoaXRlIGxpc3RlZCBmb3IgdGhlIGN1cnJlbnQgY291bnRyeSB0aGVuIHJlbW92ZSBpdC5cbiAgICAgICAgaWYgKHR5cGVvZiB3aGl0ZUxpc3RlZENvdW50cnkgIT09ICd1bmRlZmluZWQnICYmIHdoaXRlTGlzdGVkQ291bnRyeSAhPT0gJycpIHtcbiAgICAgICAgICB2Y
238XIgd2hpdGVMaXN0ZWRDb3VudHJ5QXJyID0gd2hpdGVMaXN0ZWRDb3VudHJ5LnNwbGl0KCcsICcpO1xuICAgICAgICAgIGlmIChqUXVlcnkuaW5BcnJheShjdXJyZW50Q291bnRyeSwgd2hpdGVMaXN0ZWRDb3VudHJ5QXJyKSA9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkuYXR0cignZGF0YS1vZmZlci1zb3J0JywgY291bnQpO1xuICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmF0dHIoJ2RhdGEtb2ZmZXItc29ydCcsIFwiXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlLWNoZWNrIG9mZmVyIHRpbGUgYWZ0ZXIgcmVtb3Zpbmcgb2ZmZXJzLlxuICAgICAgdmFyIG9mZmVyVGlsZXNMZW5ndGggPSBqUXVlcnkodGhpcykuZmluZChgJHtvcHRpb25zLml0ZW1zfWApLmxlbmd0aDtcblxuICAgICAgLy8gVW4gcGFnaW5hdGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICBpZiAoalF1ZXJ5KHRoaXMpLmZpbmQoJy5idG4tY29udGFpbmVyJykubGVuZ3RoID4gMCkge1xuICAgICAgICBqUXVlcnkodGhpcykuZmluZCgnLmJ0bi1jb250YWluZXInKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZmVyVGlsZXNMZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFNob3cgc3BlY2lmaWMgbnVtYmVyIG9mIG9mZmVycy5cbiAgICAgICAgaWYgKG9wdGlvbnMudGlsZVNob3dDb3VudCAhPSAnYWxsJyAmJiBvZmZlclRpbGVzTGVuZ3RoID4gb3B0aW9ucy50aWxlU2hvd0NvdW50KSB7XG5cbiAgICAgICAgICBzb3J0T2ZmZXJUaWxlcygpO1xuICAgICAgICAgIHZhciBvZmZlclRpbGVzUGFyZW50ID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApO1xuICAgICAgICAgIG9mZmVyVGlsZXNQYXJlbnQuc2xpY2Uob3B0aW9ucy50aWxlU2hvd0NvdW50KS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuYWJsZSBwYWdpbmF0aW9uLlxuICAgICAgICBpZiAob3B0aW9ucy5wYWdpbmF0ZS5zdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgIGpRdWVyeSh0aGlzKS5wYWdpbmF0ZSh7XG4gICAgICAgICAgICBpdGVtczogb3B0aW9ucy5wYWdpbmF0ZS5wYWdlSXRlbSxcbiAgICAgICAgICAgIG1vcmU6IHsgdGV4dDogb3B0aW9ucy5wYWdpbmF0ZS5tb3JlLnRleHQsIGNsYXNzOiBvcHRpb25zLnBhZ2luYXRlLm1vcmUuY2xhc3MgfSxcbiAgICAgICAgICAgIGxlc3M6IHsgdGV4dDogb3B0aW9ucy5wYWdpbmF0ZS5sZXNzLnRleHQsIGNsYXNzOiBvcHRpb25zLnBhZ2luYXRlLmxlc3MuY2xhc3MgfSxcbiAgICAgICAgICAgIGNvdW50OiBvcHRpb25zLnBhZ2luYXRlLmNvdW50LFxuICAgICAgICAgICAgc2hvd0xlc3M6IG9wdGlvbnMucGFnaW5hdGUuc2hvd0xlc3MsXG4gICAgICAgICAgICBkZXNrdG9wOiB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG9wdGlvbnMucGFnaW5hdGUuZGVza3RvcC5kZWZhdWx0LFxuICAgICAgICAgICAgICBpbmNyZW1lbnQ6IG9wdGlvbnMucGFnaW5hdGUuZGVza3RvcC5pbmNyZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWJsZXQ6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogb3B0aW9ucy5wYWdpbmF0ZS5kZXNrdG9wLmRlZmF1bHQsXG4gICAgICAgICAgICAgIGluY3JlbWVudDogb3B0aW9ucy5wYWdpbmF0ZS5kZXNrdG9wLmRlZmF1bHRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb2JpbGU6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogb3B0aW9ucy5wYWdpbmF0ZS50YWJsZXQuZGVmYXVsdCxcbiAgICAgICAgICAgICAgaW5jcmVtZW50OiBvcHRpb25zLnBhZ2luYXRlLnRhYmxldC5kZWZhdWx0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWxSZW1haW5pbmc6IG9wdGlvbnMucGFnaW5hdGUudG90YWxSZW1haW5pbmdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmluaW5nIGNhbGxiYWNrLlxuICAgIC8vIFdlIGFyZSB1c2luZyBpdCBpbiBzb21lIHNwZWNpYWwgY2FzZXMuXG4gICAgLy8gTGlrZSBiZWZvcmUgc2xpZGVyIGluaXRhbGl6aW5nLlxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgdG8gY2FsbCB0aGUgbWV0aG9kcyBhZnRlciB0aGUgY2FsbCBvZiBnZW8tZmVuY2luZy5cbiAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSB0aG9zZSBtZXRob2RzIHVuZGVyIGNhbGxiYWNrLlxuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc29ydE9mZmVyVGlsZXMgPSAoKSA9PiB7XG4gICAgdmFyIHNvcnRlZExlbmd0aCA9IGpRdWVyeSh0aGlzKS5maW5kKGAke29wdGlvbnMuaXRlbXNDbGFzc306bm90KFtkYXRhLW9mZmVyLXNvcnQ9XCJcIl0pYCkubGVuZ3RoICsgMTtcbiAgICB2YXIgbm9uU29ydGVkV3JhcHBlclRpbGVzID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfVtkYXRhLW9mZmVyLXNvcnQ9XCJcIl1gKTtcbiAgICBub25Tb3J0ZWRXcmFwcGVyVGlsZXMuZWFjaChmdW5jdGlvbiAoa2V5LCBvYmplY3QpIHtcbiAgICAgIGpRdWVyeShvYmplY3QpLmF0dHIoJ2RhdGEtb2ZmZXItc29ydCcsIHNvcnRlZExlbmd0aCk7XG4gICAgICBzb3J0ZWRMZW5ndGggPSBzb3J0ZWRMZW5ndGggKyAxO1xuICAgIH0pO1xuXG4gICAgdmFyIG1haW5XcmFwcGVyID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc1dyYXBwZXJ9YCk7XG4gICAgdmFyIGl0ZW1XcmFwcGVyID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApO1xuICAgIGl0ZW1XcmFwcGVyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgY29uc3Qgc3RhcnRBID0gcGFyc2VJbnQoalF1ZXJ5KGEpLmRhdGEoJ29mZmVyLXNvcnQnKSkgfHwgTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIGNvbnN0IHN0YXJ0QiA9IHBhcnNlSW50KGpRdWVyeShiKS5kYXRhKCdvZmZlci1zb3J0JykpIHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICByZXR1cm4gc3RhcnRBID09PSBzdGFydEIgPyAwIDogc3RhcnRBID4gc3RhcnRCID8gMSA6IC0xO1xuICAgIH0pLmFwcGVuZFRvKG1haW5XcmFwcGVyKTtcbiAgfVxuXG4gIC8vIFNvbWV0aW1lIGNvb2tpZSB0YWtlcyB0aW1lIH
238RvIHNldC5cbiAgLy8gU28gd2UgY2FuJ3QgZ2V0IGl0IGZvciBmaXJzdCB0aW1lLlxuICAvLyBTbyBoZXJlIHdlIGFnYWluIGNhbGwgdG8gc2VydmVyIGZvciBjb3VudHJ5IGNvZGUuXG4gIC8vIFRoZW4gc2V0IHRoZSBjb29raWUgYWdhaW4gZm9yIGNvdW50cnkgZm9yIHNhZmVyIHNpZGUuXG4gIC8vIEluaXQgbWV0aG9kIGFsc28gY2FsbGVkIGluIGl0LlxuICBjb25zdCBmYWxsYmFja0NvdW50cnlJbml0ID0gKCkgPT4ge1xuICAgIHZhciBiYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB2YXIgdXJsID0gYmFzZVVybCArIFwiL2N1cnJlbmN5L2NvdW50cnlcIjtcbiAgICBqUXVlcnkuYWpheCh7XG4gICAgICB1cmw6IHVybCxcbiAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBhc3luYzogdHJ1ZSxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIHN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICAgICAgd2luZG93LkNvb2tpZXMuc2V0KFwiY3VycmVudF9jb3VudHJ5XCIsIHJlc3BvbnNlLmRhdGEuY3VycmVudF9jb3VudHJ5X2NvZGUsIHtcbiAgICAgICAgICBwYXRoOiAnLydcbiAgICAgICAgfSk7XG4gICAgICAgIGluaXQoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICAgIHdpbmRvdy5Db29raWVzLnNldChcImN1cnJlbnRfY291bnRyeVwiLCBcIlRIXCIsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICBpbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgY291bnRyeUluaXQgPSAoKSA9PiB7XG4gICAgLy8gTGFiIHRvb2xzOiBza2lwIGNyb3NzLW9yaWdpbiBDbG91ZGZsYXJlIGZldGNoIChDT1JTIGZhaWxzIG9uIGxvY2FsL0xIKS5cbiAgICBpZiAobmF2aWdhdG9yLndlYmRyaXZlcikge1xuICAgICAgd2luZG93LkNvb2tpZXMuc2V0KFwiY3VycmVudF9jb3VudHJ5XCIsIFwiVEhcIiwgeyBwYXRoOiAnLycgfSk7XG4gICAgICBpbml0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZldGNoKCdodHRwczovL3d3dy5jZW50YXJhaG90ZWxzcmVzb3J0cy5jb20vY2RuLWNnaS90cmFjZScpXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXMudGV4dCgpOyB9KVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0LnJlcGxhY2UoL1tcXHJcXG5dKy9nLCAnXCIsXCInKS5yZXBsYWNlKC9cXD0rL2csICdcIjpcIicpO1xuICAgICAgICBkYXRhID0gJ3tcIicgKyBkYXRhLnNsaWNlKDAsIGRhdGEubGFzdEluZGV4T2YoJ1wiLFwiJykpICsgJ1wifSc7XG4gICAgICAgIHZhciBqc29uZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YganNvbmRhdGEubG9jICE9PSBcInVuZGVmaW5lZFwiICYmIGpzb25kYXRhLmxvYyAhPSAnJykge1xuICAgICAgICAgIHdpbmRvdy5Db29raWVzLnNldChcImN1cnJlbnRfY291bnRyeVwiLCBqc29uZGF0YS5sb2MsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICAgIGluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmYWxsYmFja0NvdW50cnlJbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICBmYWxsYmFja0NvdW50cnlJbml0KCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBsZXQgY3VycmVudENvdW50cnkgPSB3aW5kb3cuQ29va2llcy5nZXQoXCJjdXJyZW50X2NvdW50cnlcIik7XG4gIGlmICh0eXBlb2YgY3VycmVudENvdW50cnkgPT09IFwidW5kZWZpbmVkXCIgfHwgY3VycmVudENvdW50cnkgPT0gJycpIHtcbiAgICBjb3VudHJ5SW5pdCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIGluaXQoKTtcbiAgfVxufTtcbiJdLCJmaWxlIjoianMvb2ZmZXJzLWdlb2ZlbmNpbmcuanMifQ==

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.