PageSourceSearch

http://www.lightfield-forum.com/wordpress/wp-content/uploads/js/pg-mn.js

js lightfield-forum.com collected 2026-09-26 07:18:22 UTC 137,093 bytes, 2,452 lines download raw bytes

1// allow chainloading of pgjs
2var pgjs_chainloaded = pgjs_chainloaded || false;
3var pgjs_chainload_config = location.search.split('pgjs=')[1];
4
5if (!!pgjs_chainload_config && !pgjs_chainloaded) {
6  pgjs_chainloaded = true;
7  var end = pgjs_chainload_config.indexOf('&');
8  if (end > 0) {
9    pgjs_chainload_config = pgjs_chainload_config.substring(0, end);
10  }
11  var src = ('https:' === document.location.protocol ? 'https:' : 'http:') + '//www.lightfield-forum.com/' + pgjs_chainload_config;
12  var scripts = document.getElementsByTagName("script");
13  var chainload_found = false;
14  for (var i = 0; i < scripts.length; i++) {
15    if (scripts[i].src === src) {
16      chainload_found = true;
17      break;
18    }
19  }
20  if (!chainload_found) {
21    var script = document.createElement("script");
22    script.async = true;
23    script.type = "text/javascript";
24    script.src = src;
25    var target = document.getElementsByTagName("head")[0];
26    target.insertBefore(script, target.firstChild);
27    throw "-- switching to config[" + pgjs_chainload_config + "]";
28  }
29}
30
31window.pgjs = window.pgjs || {};
32window.googletag = window.googletag || {};
33window.googletag.cmd = window.googletag.cmd || [];
34var CONST_ADBLOCK_CATEGORY = 'pgjs adblock detection';
35pgjs.kvps = pgjs.kvps || [];
36pgjs.publisher = pgjs.publisher || {};
37pgjs.versioning = {
38  'gdpr' : '2018-06-03', // fixed callback for adblock detection, removed date check
39  'adblock-detection' : '2016-06-03', // fixed callback for adblock detection
40}
41
42//TraffiCop variables used
43pgjs.startTime = pgjs.startTime || (new Date()).getTime();
44pgjs.coordinateArray = pgjs.coordinateArray || [];
45pgjs.onUnloadCheck=false, pgjs.scrollTracked = false;
46
47//Variables used across all user events
48pgjs.trafficEvents = function () {
49  var MAX_ALLOWED_PACKETS = 100,MAX_ALLOWED_PACKETS2 = 5;
50  var eventInterval = null;
51  var event_packets = [];
52  var mouseX, mouseY, prevX, prevY, mouse_counter, scroll_counter, resize_counter, event_counter, keypress_counter,mouse_counter2,touch_counter1,touch_counter2;
53  mouseX = mouseY = prevX = prevY = mouse_counter = mouse_counter2 = scroll_counter = event_counter = resize_counter = keypress_counter = touch_counter1 = touch_counter2= 0;
54
55  function addPacket(packet) {
56    event_packets.push(packet);
57  }
58  function getPackets() {
59    return event_packets;
60  }
61  function setMouseX(value) {
62    mouseX = value;
63  }
64  function getMouseX() {
65    return mouseX;
66  }
67  function setMouseY(value) {
68    mouseY = value;
69  }
70  function getMouseY() {
71    return mouseY;
72  }
73  function setPrevMouseX(value) {
74    prevX = value;
75  }
76  function getPrevMouseX() {
77    return prevX;
78  }
79  function setPrevMouseY(value) {
80    prevY = value;
81  }
82  function getPrevMouseY() {
83    return prevY;
84  }
85  function getMouseCounter() {
86    return mouse_counter;
87  }
88  function incrementMouseCounter() {
89    ++mouse_counter;
90  }
91  function getMouseCounter2() {
92    return mouse_counter2;
93  }
94  function incrementMouseCounter2() {
95    ++mouse_counter2;
96  }
97  function getEventCounter() {
98    return event_counter;
99  }
100  function incrementEventCounter() {
101    ++event_counter;
102  }
103  function getMaxEvents() {
104    return MAX_ALLOWED_PACKETS2;
105  }
106  function getMaxAllowedPackets() {
107    return MAX_ALLOWED_PACKETS;
108  }
109  function getMaxAllowedPackets2() {
110    return MAX_ALLOWED_PACKETS;
111  }
112  function cleanEventData() {
113    event_packets = [];
114    mouse_counter = 0;
115  }
116  function setEventInterval(interval) {
117    eventInterval = interval;
118  }
119  function getEventInterval() {
120    return eventInterval;
121  }
122  function incrementScrollCounter() {
123    ++scroll_counter;
124  }
125  function getScrollCounter() {
126    return scroll_counter;
127  }
128  function incrementResizeCounter() {
129    ++resize_counter;
130  }
131  function getResizeCounter() {
132    return resize_counter;
133  }
134  function incrementKeypressCounter() {
135    ++keypress_counter;
136  }
137  function getKeypressCounter() {
138    return keypress_counter;
139  }
140  function incrementTouchCounter1() {
141    ++touch_counter1;
142  }
143  function getTouchCounter1() {
144    return touch_counter1;
145  }
146  function incrementTouchCounter2() {
147    ++touch_counter2;
148  }
149  function getTouchCounter2() {
150    return touch_counter2;
151  }
152
153  return {
154    addPacket: addPacket,
155    getPackets: getPackets,
156    setMouseX: setMouseX,
157    getMouseX: getMouseX,
158    setMouseY: setMouseY,
159    getMouseY: getMouseY,
160    setPrevMouseX: setPrevMouseX,
161    getPrevMouseX: getPrevMouseX,
162    setPrevMouseY: setPrevMouseY,
163    getPrevMouseY: getPrevMouseY,
164    getMouseCounter: getMouseCounter,
165    incrementMouseCounter: incrementMouseCounter,
166    getMouseCounter2: getMouseCounter2,
167    incrementMouseCounter2: incrementMouseCounter2,
168    getEventCounter: getEventCounter,
169    incrementEventCounter: incrementEventCounter,
170    getMaxEvents: getMaxEvents,
171    cleanEventData: cleanEventData,
172    setEventInterval: setEventInterval,
173    getEventInterval: getEventInterval,
174    incrementScrollCounter: incrementScrollCounter,
175    getScrollCounter: getScrollCounter,
176    incrementResizeCounter: incrementResizeCounter,
177    getResizeCounter: getResizeCounter,
178    getKeypressCounter: getKeypressCounter,
179    incrementKeypressCounter: incrementKeypressCounter,
180    getTouchCounter1:getTouchCounter1,
181    incrementTouchCounter1: incrementTouchCounter1,
182    getTouchCounter2: getTouchCounter2,
183    incrementTouchCounter2: incrementTouchCounter2,
184    getMaxAllowedPackets: getMaxAllowedPackets,
185    getMaxAllowedPackets2: getMaxAllowedPackets2
186  };
187}();
188
189pgjs.loadJS = function(src, async) {
190  // load JS asynchronously, and only once
191  pgjs.loadedJS = pgjs.loadedJS || [];
192  src = src.replace(/^(https)/,"");
193  src = src.replace(/^(http)/,"");
194  src = src.replace(/^(:)/,"");
195  var found = false;
196  if (pgjs.loadedJS.indexOf(src) >= 0) { // don't reload the same script twice
197    pgjs.log('already loaded src[' + src + '], skipping load', 'chainload');
198  } else {
199    var scripts = document.getElementsByTagName("script");
200    for (var i = 0; i < scripts.length; i++) {
201//    pgjs.log('checking loaded script[' + scripts[i].src + '] against src[' + src + ']');
202      if ((scripts[i].src === src) || (scripts[i].src === 'http:' + src) || (scripts[i].src === 'https:' + src)) {
203        pgjs.log('found src[' + src + '] on page, skipping load', 'chainload');
204        pgjs.loadedJS.push(src);
205        found = true;
206        break;
207      }
208    }
209    if (!found) {
210      // use array to track what's been loaded... DOM may not be available to permute
211      // at the time that this loads.
212      pgjs.loadedJS.push(src);
213      pgjs.ssl = pgjs.ssl || ('https:' === document.location.protocol);
214      (function() {
215        var script = document.createElement("script");
216        script.async = true;
217        if (typeof async !== 'undefined') { // must code like this because async=false || true is always true
218          script.async = async;
219        }
220        script.type = "text/javascript";
221        script.src = (pgjs.ssl ? 'https:' : 'http:') + src;
222        var target = document.getElementsByTagName("head")[0];
223        target.insertBefore(script, target.firstChild);
224        pgjs.log('loading js[' + src + ']');
225      })();
226      return true;
227    }
228  }
229  return false;
230};
231
232pgjs.get = function(key) {
233  if (typeof pgjs.getVariables === 'undefined') {
234    pgjs.getVariables = {};
235    document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
236      function decode(s) {return decodeURIComponent(s.split("+").join(" "));}
237      var key = decode(arguments[1]);
238      var value = decode(arguments[2]);
239      if (!isNaN(parseFloat(value)) && isFinite(value)) {
240        value = parseFloat(value);
241      }
242      pgjs.getVariables[key] = value;
243    });
244  }
245  if (!!pgjs.getVariables[key])
246    return pgjs.getVariables[key];
247  return false;
248};
249
250pgjs.log = function(msg, section) {
251  if (pgjs.debug) {
252    var prefix = 'PG' + (!!section ? '.' + section : '') + ': ';
253    if (typeof msg == 'string') {
254      console.log(prefix + msg);
255    } else {
256      console.log(prefix);
257      console.log(msg);
258    }
259  };
260}
261
262if (pgjs.get('pg_debug') || pgjs.get('pg_gdpr') || pgjs.get('pgdebug') || pgjs.get('m2debug') || pgjs.get('m2_debug') || pgjs.get('pgjs') || pgjs.get('pghb')) {
263  pgjs.debug = true;
264  // override console clearing functions.  some bidders call these.
265  window.clear = function() { console.log('===== window.clear() called, ignoring ===== '); }
266  window.console.clear = function() { console.log('===== window.console.clear() called, ignoring ===== '); }
267  window.top.clear = function() { console.log('===== window.top.clear() called, ignoring ===== '); }
268}
269
270// // load DFP as soon as possible
271// pgjs.log('force loading gpt.js');
272// window.googletag.cmd.push(function () {
273//   window.googletag.pubads().disableInitialLoad();
274//   window.top.pgjs.disabledGptInitialLoad = true;
275// });
276// pgjs.loadJS('//www.googletagservices.com/tag/js/gpt.js');
277
278pgjs.cookie = function(key, value, days) {
279  if (value || (value === '') || (typeof value != 'undefined')) {
280    var expires;
281    if (days) {
282      var date = new Date();
283      date.setTime(date.getTime()+(days*24*60*60*1000));
284      expires = "; expires="+date.toGMTString();
285    } else {
286      expires = "";
287    }
288    document.cookie = key+"="+value+expires+"; path=/";
289    return value;
290  }
291  var nameEQ = key + "=";
292  var ca = document.cookie.split(';');
293  for(var i=0;i < ca.length;i++) {
294    var c = ca[i];
295    while (c.charAt(0)===' ') {
296      c = c.substring(1,c.length);
297    }
298    if (c.indexOf(nameEQ) === 0) {
299      return c.substring(nameEQ.length,c.length);
300    }
301  }
302  return false;
303};
304pgjs.deleteCookie = function (name) {
305  pgjs.cookie(name, "", -1);
306};
307
308pgjs.getScreenWidth = function(win) {
309  var w = window.win || window._win || window;
310  var d = w.document;
311
312  if (w.innerWidth) {
313    return w.innerWidth;
314  } else if (d.body.clientWidth) {
315    return d.body.clientWidth;
316  } else if (d.documentElement.clientWidth) {
317    return d.documentElement.clientWidth;
318  }
319  return 0;
320}
321
322pgjs.isMobile = function() {
323  // detect whether the visitor is on a mobile device.  some pubs have their own
324  // library for this, but we've found that some of them are failing to load
325  // before pgjs is loaded.
326  if (typeof window.isMobileDevice === 'function') {
327    return window.isMobileDevice();
328  } else if (typeof window.isMobileDevice === 'boolean') {
329    return window.isMobileDevice;
330  }
331  if (typeof window.isMobile === 'function') {
332    return window.isMobile();
333  } else if (typeof window.isMobile === 'boolean') {
334    return window.isMobile;
335  }
336  if (typeof window.pageMobile === 'function') {
337    return window.pageMobile();
338  } else if (typeof window.pageMobile === 'boolean') {
339    return window.pageMobile;
340  }
341  if ((pgjs.getScreenWidth() > 0) && (pgjs.getScreenWidth() <= 800)) { return true; }
342  var mobile = false;
343  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) mobile = true;})(navigator.userAgent||navigator.vendor||window.opera);
344  return mobile;
345};
346
347pgjs.postObject = function(endpoint, object) {
348  try {
349    var xhr = new XMLHttpRequest();
350    xhr.open('POST',  endpoint, true);
351    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
352    xhr.send(JSON.stringify({'data' : object}));
353  } catch (e) {
354    pgjs.log('failed to post object to endpoint[' + endpoint + ']');
355    pgjs.log(object);
356  }
357}
358
359pgjs.visitorHasAdBlock = function() {
360  if (typeof pgjs.adblocked == 'undefined') {
361    pgjs.adblocked = false;
362    var domElement = document.createElement('div');
363    var adBlockId = 'ad-test-' + Math.random().toString(32);
364    domElement.setAttribute("class", "advertisement ad advertising ad_holder ad-placement bottom-ad adsbox")
365    domElement.setAttribute("id", adBlockId);
366    domElement.setAttribute("style", "width:300px;height:250px;background:#CCC;top:-500px;position:absolute;");
367    document.body.appendChild(domElement);
368    var tag = document.getElementById(adBlockId);
369    if ((tag.length < 1) || (tag.clientHeight < 1) || tag.offsetHeight === 0) {
370      pgjs.adblocked = true;
371    }
372    tag.remove();
373  }
374  return pgjs.adblocked;
375}
376
377pgjs.isNewSession = function() {
378  var sessionTracked = pgjs.cookie('sessionTracked');
379  if (sessionTracked) {
380    pgjs.log('- existing session found in cookie', 'pageviews');
381  } else {
382    try {
383      sessionTracked = window.sessionStorage.getItem('sessionTracked');
384      if (sessionTracked) {
385        pgjs.log('- existing session found in sessionStorage', 'pageviews');
386      }
387    } catch (e) {
388      pgjs.log('! fetching session tracking from localStorage failed for error[' + e + ']', 'pageviews');
389    }
390  }
391  if (!sessionTracked) {
392    pgjs.log('+ new session found', 'pageviews');
393    return true;
394  }
395  if (sessionTracked) {
396    pgjs.log('~ session already tracked, checking if UTMs changed', 'pageviews');
397    var utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
398    utmKeys.forEach(function(key) {
399      if (pgjs.get(key) != '') {
400        if (pgjs.cookie(key) != get(key)) {
401          pgjs.log('+ new session, utm key[' + key + '] in get[' + pgjs.get('key') + '] doesn\'t match cookie[' + pgjs.cookie(key) + ']', 'pageviews');
402          return true;
403        }
404        try {
405          if (window.sessionStorage.getItem(key) != pgjs.get(key)) {
406            pgjs.log('+ new session, utm key[' + key + '] in get[' + pgjs.get('key') + '] doesn\'t match sessionStorage[' + window.sessionStorage.getItem(key) + ']', 'pageviews');
407            return true;
408          }
409        } catch (e) {
410          pgjs.log('! fetching session tracking from localStorage failed for key[' + key + '] error[' + e + ']', 'pageviews');
411        }
412      }
413    });
414  }
415  pgjs.log('- session has already been tracked', 'pageviews');
416  return false;
417}
418
419
420// each pageview in a session is counted here.  many bidders drop out throughout
421// the session and adops will sometimes enable more aggressive ads on later pageviews
422pgjs.getSessionDepth = function() {
423  if (typeof pgjs.sessionDepth == 'undefined') {
424    if (isNewSession()) {
425      pgjs.sessionDepth = 0;
426    } else {
427      pgjs.sessionDepth = parseInt(cookie('session_depth') || 0);
428      if (isNaN(pgjs.sessionDepth)) {
429        pgjs.sessionDepth = 0;
430      }
431    }
432    pgjs.sessionDepth++;
433    if (pgjs.sessionDepth == 1) {
434      try {
435        window.sessionStorage.setItem('sessionTracked', '1');
436      } catch (e) {
437        cookie('sessionTracked', '1', 1);
438      }
439    }
440    cookie('session_depth', pgjs.sessionDepth, 1);
441  }
442  return pgjs.sessionDepth;
443}
444
445pgjs.publisher.getDfpNetworkCode = function() {
446  // included for compatibility with m2js functions
447  if (typeof pgjs.publisher.dfpNetworkCode == 'undefined') {
448    pgjs.publisher.dfpNetworkCode = '';
449    try{
450      var slots = window.googletag.pubads().getSlots();
451      for (var i = 0; i < slots.length; i++) {
452        var parts = slots[i].getAdUnitPath().split('/');
453        if (typeof parts[1] !== 'undefined') {
454          pgjs.publisher.dfpNetworkCode = parts[1];
455          break;
456        }
457      }
458    } catch(e){ //let's just catch it if googletag is not present
459    }
460  }
461  return pgjs.publisher.dfpNetworkCode;
462}
463
464pgjs.getPublisher = function() {
465  // included for compatibility with pgjs functions
466  return pgjs.publisher;
467}
468
469//Domain name
470pgjs.getPublisherDomain2 = function () {
471  return window.location.host.replace(/^www\./,'');
472};
473
474pgjs.postDfpKvps = function() {
475  // POST JSON to http://kvp.m2.ai
476  // `{'networkCode': {'keyname': ['val1', 'val2']}}`
477  // e.g. `{'73004400': {'key3': ['abc']}}`
478  var request = new XMLHttpRequest();
479  request.open('POST', (pgjs.ssl ? 'https:' : 'http:') + '//kvp.m2.ai', true);
480  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
481  var data = {};
482  data[getDfpNetworkCode()] = {};
483  Object.keys(pgjs.kvps).forEach(function(key) {
484    if (typeof data[getDfpNetworkCode()][key] === 'undefined') {
485      data[getDfpNetworkCode()][key] = [];
486    }
487    data[getDfpNetworkCode()][key].push(pgjs.kvps[key]);
488  });
489  request.send(JSON.stringify(data));
490};
491
492pgjs.setKvps = function(kvps) {
493  // set KVPs for tracking and multivariate testing
494  window.googletag.cmd.push(function () {
495    if (typeof window.googletag.pubads() !== 'undefined') {
496      var slots = window.googletag.pubads().getSlots();
497      slots.forEach(function(slot) {
498        for (var key in kvps) {
499          var keyValue = String([kvps[key]]).substring(0, 40); // KVPs have a max length of 40 characters.  any KVP that's set longer than that is completely ignored by DFP
500          pgjs.log('setting KVP key[' + key + '] to value[' + keyValue + '] for slot[' + slot.getAdUnitPath() + ']');
501          slot.setTargeting(key, keyValue);
502        }
503      });
504    } else {
505      pgjs.log('failed to set global KVPs because pubads isn\'t ready');
506    }
507  });
508};
509
510pgjs.trackPageview = function() {
511  pgjs.log('tracking pageview', 'pageviews');
512  if (typeof pgjs === 'undefined'){ return false; }
513  pgjs.pageviewTracked = (pgjs && pgjs.pageviewTracked) || false;
514  if (pgjs.pageviewTracked) {
515    return true;
516  }
517  window.googletag.pubads().getSlots().forEach(function(slot) {
518    if (!pgjs.pageviewTracked) {
519      var divId = slot.getSlotElementId();
520      pgjs.log('+ checking unit[' + slot.getAdUnitPath() + '] div[' + divId + ']', 'pageviews');
521      if ((typeof divId != 'undefined') && (divId) && !!document.getElementById(divId)) {
522        pgjs.log('+ tracking pageview', 'pageviews');
523        slot.setTargeting('pageview', '1');
524        if (getSessionDepth() == 1) {
525          slot.setTargeting('session', '1');
526        }
527        pgjs.pageviewTracked = true;
528        return true;
529      }
530    }
531  });
532  return false;
533}
534
535pgjs.getDeviceType = function() {
536  if (pgjs.isMobile())
537    return 'mobile';
538  return 'desktop';
539}
540
541pgjs.getGoogleAnalyticsVersion   = function() {
542  // this function returns the google analytics version used by publisher.
543  if (typeof pgjs.googleAnalyticsVersion == 'undefined') {
544    pgjs.googleAnalyticsVersion = false;
545    if (typeof window.ga != 'undefined') {
546      // ga() tracking in analytics.js... see https://developers.google.com/analytics/devguides/collection/analyticsjs/events
547      pgjs.googleAnalyticsVersion = 'ga';
548    } else if (typeof window.GoogleAnalyticsObject != 'undefined') {
549      // found some renamed copies
550      pgjs.googleAnalyticsVersion = 'gao';
551    } else if (typeof window._gaq != 'undefined') {
552      // some ultra-legacy implementations using ga.js weren't set up to use trackEvent() and need to gaq.push() instead.
553      pgjs.googleAnalyticsVersion = 'gaq';
554    } else if (typeof window.trackEvent != 'function') {
555      // trackEvent tracking in ga.js... see https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide?hl=en
556      pgjs.googleAnalyticsVersion = 'trackEvent';
557    }
558    if (pgjs.googleAnalyticsVersion) {
559      pgjs.log('support found for version[' + pgjs.googleAnalyticsVersion + ']', 'google analytics');
560    } else {
561      pgjs.log('no support found', 'google analytics');
562    }
563  }
564  return pgjs.googleAnalyticsVersion;
565}
566
567pgjs.logGaEvent = function(category, action, label) {
568  if (pgjs.getGoogleAnalyticsVersion() == 'ga') {
569    pgjs.log('version[' + pgjs.getGoogleAnalyticsVersion() + ']: category[' + category + '] action[' + action + '] label[' + label + ']', 'google analytics');
570    window.ga('send', 'event', category, action, label);
571  } else if (pgjs.getGoogleAnalyticsVersion() == 'gao') {
572    pgjs.log('version[' + pgjs.getGoogleAnalyticsVersion() + ']: category[' + category + '] action[' + action + '] label[' + label + ']', 'google analytics');
573    window[window.GoogleAnalyticsObject]('send', 'event', category, action, label);
574  } else if (pgjs.getGoogleAnalyticsVersion() == 'trackEvent') {
575    pgjs.log('version[' + pgjs.getGoogleAnalyticsVersion() + ']: category[' + category + '] action[' + action + '] label[' + label + ']', 'google analytics');
576    trackEvent(category, action, label);
577  } else if (pgjs.getGoogleAnalyticsVersion() == 'gaq') {
578    pgjs.log('version[' + pgjs.getGoogleAnalyticsVersion() + ']: category[' + category + '] action[' + action + '] label[' + label + ']', 'google analytics');
579    _gaq.push(['_trackEvent', category, action, label]);
580  } else {
581    pgjs.log('no valid version, failed to log category[' + category + '] action[' + action + '] label[' + label + ']', 'google analytics');
582  }
583}
584
585pgjs.getJSON = function(url, callback) {
586    var xhr = new XMLHttpRequest();
587    xhr.open('GET', url, true);
588    xhr.onload = function() {
589      var status = xhr.status;
590      if (status === 200) {
591        callback(null, JSON.parse(xhr.responseText));
592      } else {
593        callback(status, xhr.response);
594      }
595    };
596    xhr.send();
597};
598
599pgjs.getUtm = function(key) {
600  var keyValue = '/empty/';
601  if (pgjs.get(key)) {
602    keyValue = pgjs.get(key);
603  } else if ((typeof window.sessionStorage !== 'undefined') && !!window.sessionStorage.getItem(key)) {
604    keyValue = window.sessionStorage.getItem(key);
605  } else if (pgjs.cookie(key)) {
606    keyValue = pgjs.cookie(key);
607  }
608  return keyValue;
609}
610
611pgjs.getGptSlotByAdUnitCode = function(adUnitCode) {
612  if (!!window.googletag && !!window.googletag.pubads()) {
613    var slots = window.googletag.pubads().getSlots();
614    for (var i = 0; i < slots.length; i++) {
615      if (slots[i].getAdUnitPath() === adUnitCode)
616        return slots[i];
617    }
618  }
619  return false;
620};
621
622pgjs.gdpr = pgjs.gdpr || {};
623
624pgjs.gdpr.consentDuration = pgjs.gdpr.consentDuration || 30*13;
625if (typeof pgjs.gdpr.roadBlock == 'undefined') {
626  pgjs.gdpr.roadBlock = true;
627}
628pgjs.gdpr.enableRoadBlock = function() { pgjs.gdpr.roadBlock = true; }
629pgjs.gdpr.disableRoadblock = function() { pgjs.gdpr.roadBlock = false; }
630pgjs.gdpr.partners = pgjs.gdpr.partners || [];
631pgjs.gdpr.gvlPartners = pgjs.gdpr.gvlPartners || [];
632pgjs.gdpr.gvlFeatures = pgjs.gdpr.gvlFeatures || [];
633pgjs.gdpr.gvlPurposes = pgjs.gdpr.gvlPurposes || [];
634pgjs.gdpr.design = pgjs.gdpr.design || 'icecap';
635pgjs.gdprAnalytics = pgjs.gdprAnalytics || {};
636
637pgjs.publisher = pgjs.publisher || {};
638pgjs.publisher.name = pgjs.publisher.name || window.location.hostname.replace(/^(www\.)/,"").replace(/^(www2\.)/,"").replace(/^(ww2\.)/,"");
639pgjs.log('pub privacy[' + pgjs.publisher.privacy + '] policyUrl[' + pgjs.publisher.policyUrl + '] privacyPolicy[' + pgjs.publisher.privacyPolicy + ']');
640pgjs.publisher.policyUrl = pgjs.publisher.policyUrl || pgjs.publisher.privacyPolicy || pgjs.publisher.privacy;
641if (!pgjs.publisher.policyUrl) {
642  pgjs.publisher.policyUrldefaulted = true;
643  pgjs.publisher.policyUrl = 'http://' + window.location.hostname + '/privacy-policy/';
644}
645pgjs.publisher.isPublisher = true;
646pgjs.gdpr.partners.push(pgjs.publisher);
647pgjs.gdpr.partners = pgjs.gdpr.partners.concat([
648  {'name': 'AtomX', 'policyUrl': 'https://www.atomx.com/privacy'},
649  {'name': 'Beachfront', 'policyUrl': 'http://beachfrontmedia.com/privacy-policy/'},
650  {'name': 'Brightcom / Ybrant', 'policyUrl': 'http://www.ybrantdigital.com/pt/privacy-policy.html'},
651  {'name': 'C1xbid', 'policyUrl': 'http://c1exchange.com/policy'},
652  {'name': 'Defy Media', 'policyUrl': 'http://defymedia.com/privacy-policy/'},
653  {'name': 'Eplanning', 'policyUrl': 'https://www.e-planning.net/en/privacy.html'},
654  {'name': 'Fidelity', 'policyUrl': 'https://fidelity-media.com/privacy-policy/'},
655  {'name': 'Freewheel-SSP', 'policyUrl': 'http://freewheel.tv/privacy-policy/'},
656  {'name': 'HeadBidding (NativeAds)', 'policyUrl': 'https://nativeads.com/privacy-policy.php'},
657  {'name': 'HiroMedia', 'policyUrl': 'http://www.hiro-media.com/privacy.php'},
658  {'name': 'Hudled Masses', 'policyUrl': 'https://img1.wsimg.com/blobby/go/df00bb8a-a61b-43af-a6da-3feb6a59c59a/downloads/1bq09pqem_107344.docx'},
659  {'name': 'Imonomy', 'policyUrl': 'http://imonomy.com/privacy-policy/'},
660  {'name': 'InvestingChannel', 'policyUrl': 'http://media.investingchannel.com/privacy-policy/'},
661  {'name': 'J Carter Marketing', 'policyUrl': 'https://www.adfrontiers.com/policy.html'},
662  {'name': 'Kargo', 'policyUrl': 'https://www.kargo.com/privacy/'},
663  {'name': 'Komoona', 'policyUrl': 'https://www.komoona.com/privacy-policy'},
664  {'name': 'KruxLink', 'policyUrl': 'https://www.salesforce.com/products/marketing-cloud/sfmc/salesforce-dmp-privacy/'},
665  {'name': 'Madrivo Digital', 'policyUrl': 'http://www.madrivo.com/privacy.html'},
666  {'name': 'Mantis', 'policyUrl': 'http://www.mantisadnetwork.com/privacy-policy/'},
667  {'name': 'Matomy', 'policyUrl': 'http://www.matomy.com/global-privacy-policy/'},
668  {'name': 'Media net', 'policyUrl': 'https://www.media.net/en/privacy-policy'},
669  {'name': 'Pixfuture', 'policyUrl': 'https://www.pixfuture.com/privacy-policy/'},
670  {'name': 'SmartyAds', 'policyUrl': 'https://smartyads.com/privacy-policy'},
671  {'name': 'Stellar Media', 'policyUrl': 'http://stellar-media-solutions.com/privacy_policy.php'},
672  {'name': 'StickyAdsTV', 'policyUrl': 'http://freewheel.tv/privacy-policy/'},
673  {'name': 'Twenga', 'policyUrl': 'https://www.twenga-solutions.com/en/privacypolicy'},
674  {'name': 'Velis Media', 'policyUrl': 'http://www.velismedia.com/PDF/PrivacyPolicy.pdf'},
675  {'name': 'VertaMedia', 'policyUrl': 'https://adtelligent.com/privacy-policy/'},
676  {'name': 'Vertoz', 'policyUrl': 'https://www.vertoz.com/privacy-policy'},
677  {'name': 'WideOrbit', 'policyUrl': 'https://www.wideorbit.com/privacy/'},
678  {'name': 'Yellow Hammer / PubSquared', 'policyUrl': 'https://springserve.com/privacy-policy/'},
679  {'name': 'Yieldbot', 'policyUrl': 'https://www.yieldbot.com/website-privacy-policy/'},
680  {'name': 'Mobfox', 'policyUrl': 'https://www.mobfox.com/privacy-policy/'},
681  {'name': 'Nas Media', 'policyUrl': 'http://mobile.nasmedia.co.kr/'},
682  {'name': 'Optimatic', 'policyUrl': 'http://www.optimatic.com/wp-content/uploads/2016/11/Privacy_Policy11-16.pdf'},
683  {'name': 'Peak 226', 'policyUrl': 'https://www.peak226.com/privacy-policy'},
684  {'name': 'Platformio', 'policyUrl': 'https://platform.io/privacy_policy.txt'},
685  {'name': 'Read Peak', 'policyUrl': 'https://www.readpeak.com/privacy-policy/'},
686  {'name': 'Rock You', 'policyUrl': 'https://rockyou.com/privacy-policy/'},
687  {'name': 'Rtb Demand', 'policyUrl': 'http://rtbdemand.com/privacy-policy'},
688  {'name': 'Serverbid', 'policyUrl': 'https://www.serverbid.com/privacy/'},
689  {'name': 'TrustX', 'policyUrl': 'https://trustx.org/rules/'},
690  {'name': 'Ucfunnel', 'policyUrl': 'https://www.ucfunnel.com/privacy-policy'},
691  {'name': 'Yield Lab', 'policyUrl': 'http://www.yieldlab.com/meta-navigation/data-protection/?L=1'},
692  {'name': 'Yieldone', 'policyUrl': 'https://www.platform-one.co.jp/data/'},
693  {'name': 'Consumable', 'policyUrl': 'http://consumable.com/privacy-policy.html'},
694  {'name': 'LockerDome', 'policyUrl': 'https://lockerdome.com/privacy'},
695  {'name': 'Moat', 'policyUrl': 'https://moat.com/privacy'},
696  {'name': 'PubGuru / MonetizeMore / eSell Solutions', 'policyUrl': 'https://www.monetizemore.com/privacy-policy/'},
697  {"name":"Google","policyUrl":"https://www.google.com/policies/technologies/partner-sites/"},
698  {"name":"2KDirect Inc.","policyUrl":"https://www.ipromote.com/privacy-policy/"},
699  {"name":"[24]7.ai (successor to EngageClick)","policyUrl":"https://www.247.ai/privacy-policy#gdpr_compliance"},
700  {'name': '152 Media', 'policyUrl': 'https://reports.152media.com/guest/policy'},
701  {"name":"1trn","policyUrl":"https://1trn.com/privacy.php"},
702  {"name":"22-Visions","policyUrl":"http://www.universalmediasolutions.net/DataPrivacy"},
703  {"name":"A1 Media Group","policyUrl":"http://www.a1mediagroup.jp/privacy-policy"},
704  {"name":"A1platform","policyUrl":"https://www.a1platform.co.kr/privacy"},
705  {'name': 'A4G', 'policyUrl': 'https://www.a4g.com/privacy'},
706  {"name":"Aarki","policyUrl":"http://corp.aarki.com/privacy"},
707  {"name":"abilicom","policyUrl":"https://contactimpact.de/datenschutz"},
708  {"name":"activecore","policyUrl":"https://www.activecore.jp/privacy-policy/"},
709  {"name":"Acuityads","policyUrl":"https://www.acuityads.com/privacy-policy/"},
710  {"name":"Adacado","policyUrl":"https://www.adacado.com/privacy-policy-april-25-2018/"},
711  {"name":"Adadyn","policyUrl":"http://www.adadyn.com/privacypolicy.html"},
712  {"name":"Adara Media","policyUrl":"https://adara.com/2018/04/10/adara-gdpr-faq/"},
713  {"name":"Adbalancer","policyUrl":"https://www.adbalancer.com/datenschutz/"},
714  {"name":"Adblade","policyUrl":"https://www.adblade.com/doc/privacy"},
715  {'name': 'AdButler', 'policyUrl': 'https://www.adbutler.com/agreements.spark?agreement=privacy'},
716  {"name":"ADBOX","policyUrl":"http://www.adboxdigital.uk/privacy"},
717  {"name":"Adcash","policyUrl":"https://adcash.com/legal/"},
718  {"name":"AdClear","policyUrl":"https://www.adclear.de/datenschutzerklaerung/"},
719  {"name":"Adclouds","policyUrl":"https://adclouds.io/data-gdpr/"},
720  {"name":"AdColony","policyUrl":"https://www.adcolony.com/gdpr/"},
721  {"name":"Addictive Mobility","policyUrl":"https://addictivemobility.com/privacy.html"},
722  {"name":"Addition Plus","policyUrl":"http://additionplus.com/privacy-policy/"},
723  {"name":"Addroid","policyUrl":"https://addroid.com/terms.html"},
724  {"name":"AdElement","policyUrl":"http://adelement.com/privacy-policy.html"},
725  {"name":"Adello","policyUrl":"http://www.adello.com/privacy-policy"},
726  {"name":"ADEX","policyUrl":"http://theadex.com"},
727  {'name': 'Adequant', 'policyUrl': 'http://adequant.com/privacy-policy/'},
728  {"name":"Adform","policyUrl":"https://site.adform.com/uncategorized/product-and-services-privacy-policy/"},
729  {"name":"AdGibbon BV","policyUrl":"http://www.agcs.works/legal/"},
730  {'name': 'Adgorithms', 'policyUrl': 'https://albert.ai/terms-and-conditions/'},
731  {"name":"adhood","policyUrl":"https://www.theadx.com/en/privacy.php"},
732  {"name":"Adikteev","policyUrl":"https://www.adikteev.com/eu/privacy/"},
733  {"name":"AdKernel","policyUrl":"https://adkernel.com/privacy-policy/"},
734  {"name":"AdLedge","policyUrl":"https://adledge.com/data-privacy/"},
735  {"name":"adlocal.net","policyUrl":"http://adlocal.net/privacy.php"},
736  {"name":"Adloox","policyUrl":"http://adloox.com/disclaimer"},
737  {"name":"Adludio","policyUrl":"https://adludio.com/termsandconditions"},
738  {"name":"AdMaster/LnData","policyUrl":"http://www.admaster.com.cn/eng/index.php?c=abouts&a=content&code=useterms_en"},
739  {"name":"AdMaxim","policyUrl":"http://www.admaxim.com/admaxim-privacy-policy/"},
740  {"name":"Admedo","policyUrl":"https://www.admedo.com/privacy-policy"},
741  {'name': 'AdMedia', 'policyUrl': 'http://admedia.com/privacy/'},
742  {"name":"Admetrics","policyUrl":"https://admetrics.io/en/privacy_policy/"},
743  {"name":"Admixer","policyUrl":"https://admixer.net/privacy"},
744  {"name":"Adnami ApS","policyUrl":"https://adnami.io/privacy-policy.html"},
745  {"name":"adnanny.com","policyUrl":"http://adserver01.de/"},
746  {"name":"Adnetic","policyUrl":"https://adnetic.ru/policies/privacy"},
747  {"name":"Adobe Advertising Cloud","policyUrl":"https://www.adobe.com/privacy/general-data-protection-regulation.html"},
748  {'name': 'AdOcean', 'policyUrl': 'https://adocean-global.com/en/company/privacy-policy/'},
749  {"name":"AdPlay","policyUrl":"https://rtb.adplay-mobile.com/privacy-policy"},
750  {"name":"AdPredictive","policyUrl":"http://adpredictive.com/optout/"},
751  {"name":"AdRetarget","policyUrl":"https://adretarget.me/privacy-policy/"},
752  {"name":"Adriver","policyUrl":"https://www.adriver.ru/about/privacy-en/"},
753  {"name":"AdRoll, Inc. ","policyUrl":"https://www.adroll.com/gdpr"},
754  {"name":"adrule","policyUrl":"https://www.adrule.net/de/datenschutz/"},
755  {"name":"Adsniper","policyUrl":"http://ad-sniper.com/docs/privacy-en.pdf"},
756  {'name': 'AdSparc', 'policyUrl': 'http://www.adsparc.com/AdSparc-Privacy-Policy-9-2
756016.pdf'},
757  {"name":"AdSpirit AdServer","policyUrl":"https://www.adspirit.de/datenschutz00.0.html"},
758  {"name":"Adssets","policyUrl":"http://adssets.com/policy"},
759  {"name":"adTarget.me","policyUrl":"https://adtarget.me/privacy.html"},
760  {"name":"Adtelligence","policyUrl":"https://adtelligence.com/en/data-privacy/"},
761  {"name":"Adtelligent Inc.","policyUrl":"https://adtelligent.com/terms-and-conditions/"},
762  {"name":"AdTrader","policyUrl":"https://adtrader.com/privacy.html"},
763  {"name":"AdTriba","policyUrl":"https://privacy.adtriba.com/"},
764  {"name":"advanced STORE GmbH","policyUrl":"https://www.ad4mat.com/en/privacy/"},
765  {"name":"Advanse","policyUrl":"http://advanseads.com/privacy-policy/"},
766  {"name":"Adventive","policyUrl":"https://www.adventive.com/privacy-policy/"},
767  {"name":"Adventori","policyUrl":"https://www.adventori.com/fr/avec-nous/mentions-legales/"},
768  {"name":"Adverline","policyUrl":"https://www.adverline.com/privacy/privacy.html"},
769  {"name":"Advertserve","policyUrl":"https://privacy.advertserve.com/"},
770  {"name":"Advmaker","policyUrl":"https://advmaker.net/policy/"},
771  {"name":"advolution.control","policyUrl":"http://advolution.de/privacy.php"},
772  {"name":"Adways SAS","policyUrl":"http://www.adways.com/policy/"},
773  {'name': 'AdXcg', 'policyUrl': 'https://www.adxcg.com/privacy-policy.html'},
774  {"name":"Adzerk","policyUrl":"https://dev.adzerk.com/docs/privacy-policy-customers"},
775  {"name":"Adzymic","policyUrl":"http://www.adzymic.co/privacy"},
776  {"name":"AE Media","policyUrl":"http://www.aemedia.sg/privacy-policy/"},
777  {"name":"Aedge Performance S.L.","policyUrl":"https://www.peakadx.com/privacy.php"},
778  {"name":"AerServ","policyUrl":"https://www.aerserv.com/privacy-policy/"},
779  {"name":"affilinet","policyUrl":"https://www.affili.net/uk/footeritem/privacy-policy"},
780  {"name":"Aidata","policyUrl":"https://my.aidata.me/data/uploads/aidata.me-privacy-policy.pdf"},
781  {"name":"Airtory","policyUrl":"https://airtory.com/privacy_policy.html"},
782  {"name":"Akamai","policyUrl":"http://www.akamai.com/compliance/privacy"},
783  {"name":"AKTYVUS SEKTORIUS","policyUrl":"http://business.eskimi.com/datacontrol"},
784  {"name":"Alkemics","policyUrl":"https://www.alkemics.com/privacy/"},
785  {"name":"All In Views LTD","policyUrl":"https://www.allinviews.com/privacy-policy"},
786  {"name":"Alooma","policyUrl":"http://alooma.tv/privacypolicy.htm"},
787  {"name":"Amazon","policyUrl":"https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201909010"},
788  {'name': 'Amazon A9', 'policyUrl': 'https://www.a9.com/privacy'},
789  {"name":"Amino Payments, Inc.","policyUrl":"https://www.aminopay.com/gdpr-compliance/"},
790  {"name":"Amobee ","policyUrl":"https://www.amobee.com/trust/privacy-guidelines"},
791  {"name":"Analights","policyUrl":"https://analights.com/docs/analights-consent-to-the-processing-of-personal-data-en.pdf"},
792  {"name":"Aniview Inc.","policyUrl":"https://www.aniview.com/privacy-policy/"},
793  {"name":"Answer Media","policyUrl":"http://www.answermedia.com/privacy"},
794  {"name":"AntVoice","policyUrl":"https://www.antvoice.com/en/privacypolicy/"},
795  {"name":"APNIC","policyUrl":"https://labs.apnic.net/privacy.shtml"},
796  {"name":"AppGrowth Inc.","policyUrl":"https://s3.amazonaws.com/appgrowth-cloud/legal/Privacy-Policy-Appgrowth.pdf"},
797  {"name":"Appier","policyUrl":"https://www.appier.com/privacy_policy/latest/privacy_policy.html"},
798  {"name":"AppLift","policyUrl":"https://docs.google.com/document/d/1fdKB858jH_rrs2rwhaS0lzQwvB-JP-uMjfhONgzlZz4/edit"},
799  {"name":"AppLovin Corp.","policyUrl":"https://www.applovin.com/privacy"},
800  {"name":"AppNexus","policyUrl":"https://www.appnexus.com/en/company/platform-privacy-policy"},
801  {"name":"Appreciate","policyUrl":"https://appreciate.mobi/page.html#/end-user-privacy-policy"},
802  {"name":"AppsFlyer","policyUrl":"https://www.appsflyer.com/privacy-policy/"},
803  {"name":"appTV","policyUrl":"https://www.apptv.com/privacy-policy"},
804  {"name":"Arbigo Inc.","policyUrl":"http://www.arbigo.com/terms--policy.html"},
805  {"name":"Arrivalist","policyUrl":"https://www.arrivalist.com/privacy#gdpr"},
806  {"name":"Art of Click","policyUrl":"http://www.artofclick.com/privacy-policy/"},
807  {'name': 'Arteebee', 'policyUrl': 'http://arteebee.com/dsp-terms/'},
808  {"name":"Artsai","policyUrl":"http://www.artsai.com/home/privacy/"},
809  {"name":"Audience2Media","policyUrl":"https://www.audience2media.com/privacy"},
810  {"name":"AudienceProject","policyUrl":"http://privacy.audienceproject.com/for-users/"},
811  {"name":"Audiencevalue","policyUrl":"https://www.audiencevalue.com/legal.php"},
812  {"name":"Aunica","policyUrl":"http://www.aunica.com/privacy/privacy.html"},
813  {"name":"Avocet","policyUrl":"http://avocet.io/privacy-portal"},
814  {"name":"Awin","policyUrl":"https://www.awin.com/gb/legal/privacy-policy-gb"},
815  {"name":"Azameo","policyUrl":"http://www.azameo.fr/en/privacy-policy-notice/"},
816  {"name":"BannerBuilder","policyUrl":"http://bannerbuilder.co.nz/privacy-policy/"},
817  {"name":"Batch Media","policyUrl":"http://batch.ba/datenschutzerklarung/"},
818  {"name":"BDSK Handels GmbH & Co. KG","policyUrl":"https://www.xxxlutz.de/ocms/privacy"},
819  {"name":"Beeswax","policyUrl":"https://www.beeswax.com/privacy.html"},
820  {"name":"Belboon","policyUrl":"https://www.belboon.com/en/about-us/datenschutz/"},
821  {"name":"Betgenius","policyUrl":"http://betting.geniussports.com/connextra-service-terms-conditions/"},
822  {"name":"Better Banners","policyUrl":"https://betterbanners.com/en/privacy"},
823  {"name":"Bidease","policyUrl":"https://bidease.com/terms-of-use"},
824  {"name":"BidMotion","policyUrl":"http://www.bidmotion.com/gdpr"},
825  {"name":"Bidswitch","policyUrl":"http://www.bidswitch.com/privacy-policy/"},
826  {"name":"Bidtheatre","policyUrl":"https://www.bidtheatre.com/privacy-policy"},
827  {"name":"Bigabid","policyUrl":"http://www.bigabid.com/data-protection/gdpr"},
828  {"name":"Bizible","policyUrl":"https://www.bizible.com/gdpr"},
829  {"name":"Blismedia","policyUrl":"http://www.blis.com/privacy/"},
830  {"name":"Blue","policyUrl":"http://getblue.io/privacy"},
831  {"name":"Bluecore, Inc.","policyUrl":"https://www.bluecore.com/privacy-policy/"},
832  {"name":"Blueworks","policyUrl":"https://hleb.agency/policy/eng/index.html"},
833  {"name":"Bombora","policyUrl":"http://bombora.com/privacy"},
834  {"name":"Bonzai","policyUrl":"https://www.bonzai.co/privacy2018.html"},
835  {"name":"Booking.com","policyUrl":"https://www.booking.com/content/privacy.en-gb.html"},
836  {"name":"Brainworkz","policyUrl":"http://brainworkz.eu"},
837  {"name":"Branch","policyUrl":"https://branch.io/policies/"},
838  {"name":"Bridgewell","policyUrl":"http://www.bridgewell.com.tw/privacy/"},
839  {"name":"Bucksense","policyUrl":"https://www.bucksense.com/platform-privacy-policy/"},
840  {"name":"C3 Metrics","policyUrl":"https://c3metrics.com/privacy"},
841  {"name":"Cablato","policyUrl":"http://cablato.com/privacy"},
842  {"name":"CapitalData","policyUrl":"https://www.capitaldata.fr/charte-vie-privee-display-personnalise/"},
843  {"name":"Cauly","policyUrl":"https://www.cauly.net/index.html#/home/privacy4"},
844  {"name":"Cedato","policyUrl":"https://www.cedato.com/privacy-policy/"},
845  {"name":"Celtra","policyUrl":"https://www.celtra.com/privacy-policy/"},
846  {"name":"Centro","policyUrl":"https://www.centro.net/privacy-policy/"},
847  {"name":"Chalk Digital","policyUrl":"http://www.chalkdigital.com/privacy-policy-2/"},
848  {"name":"Cheq","policyUrl":"https://www.cheq.ai/privacy"},
849  {"name":"Chitika","policyUrl":"https://chitika.com/privacy-policy/"},
850  {"name":"Cint","policyUrl":"https://www.cint.com/participant-privacy-notice/"},
851  {"name":"Clearstream.TV, Inc","policyUrl":"https://www.clearstream.tv/privacy-policy"},
852  {"name":"Clickagy","policyUrl":"https://www.clickagy.com/privacy/"},
853  {"name":"ClickForce","policyUrl":"http://www.clickforce.com.tw/site/privacyPolicy"},
854  {"name":"Clickonometrics","policyUrl":"https://www.clickonometrics.com/optout/"},
855  {"name":"Clickpoint","policyUrl":"http://site.clickpoint.com/privacy"},
856  {"name":"Clinch","policyUrl":"https://clinch.co/pages/privacy.html"},
857  {"name":"Cloud Technologies","policyUrl":"http://green.erne.co/assets/PolicyCT.pdf"},
858  {"name":"Cloudflare","policyUrl":"https://www.cloudflare.com/security-policy/"},
859  {"name":"CoAdvertise","policyUrl":"http://www.coadvertise.com/en/gdpr/"},
860  {"name":"CollegeHumor","policyUrl":"http://www.collegehumor.com/static/privacy/policy"},
861  {"name":"Combell","policyUrl":"https://www.combell.com/nl/over-combell/privacy-policy"},
862  {"name":"Commanders Act","policyUrl":"https://www.commandersact.com/en/privacy/"},
863  {"name":"comScore","policyUrl":"https://www.comscore.com/About-comScore/Privacy-Policy"},
864  {"name":"Connatix","policyUrl":"https://connatix.com/privacy-policy/"},
865  {"name":"Connexity","policyUrl":"http://connexity.com/gb/privacy-policy/"},
866  {"name":"Constant Contact","policyUrl":"https://www.constantcontact.com/legal/privacy-statement"},
867  {"name":"Conversant/CJ Affiliate","policyUrl":"https://www.conversantmedia.eu/legal/privacy-policy"},
868  {"name":"Conversion Logic","policyUrl":"http://www.conversionlogic.com/privacy-policy-overview/"},
869  {"name":"Conversive","policyUrl":"https://conversive.nl/privacy/"},
870  {"name":"Cortex","policyUrl":"http://www.heraldweekly.com/privacy-policy/"},
871  {"name":"Credebat","policyUrl":"https://www.credebat.com/privacy-policy"},
872  {"name":"Crimtan","policyUrl":"https://crimtan.com/privacy-ctl/"},
873  {"name":"Criteo","policyUrl":"https://www.criteo.com/privacy/"},
874  {"name":"CrossInstall, Inc","policyUrl":"https://www.crossinstall.com/data"},
875  {"name":"Crucial Interactive Inc.","policyUrl":"https://www.crucialinteractive.com/privacy-policy/"},
876  {"name":"Crutchfield","policyUrl":"https://www.crutchfield.com/support/privacy.aspx"},
877  {"name":"CUBED","policyUrl":"http://cubed.ai/privacy-policy/gdpr/"},
878  {"name":"Cuebiq","policyUrl":"https://www.cuebiq.com/privacypolicy/"},
879  {"name":"CyberAgent","policyUrl":"https://adtech.cyberagent.io/privacy"},
880  {"name":"d3media","policyUrl":"http://www.d3sv.net/privacy/"},
881  {"name":"DAC","policyUrl":"http://www.dac.co.jp/english/utility/rule"},
882  {"name":"Datafy","policyUrl":"http://www.datafy-software.com/cookie-policy/"},
883  {"name":"Datalicious","policyUrl":"https://www.datalicious.com/privacy/"},
884  {"name":"DataXu","policyUrl":"https://www.dataxu.com/gdpr/"},
885  {"name":"DaVinci11","policyUrl":"http://www.adsfactor.com/gdpr.html"},
886  {"name":"DeepIntent","policyUrl":"https://www.deepintent.com/datapolicy/"},
887  {"name":"Delta Projects","policyUrl":"http://www.deltaprojects.com/data-collection-
887policy/"},
888  {"name":"DeltaX","policyUrl":"http://www.deltax.com/gdpr.html"},
889  {"name":"Demand Side Science, Inc.","policyUrl":"http://demand-side-science.jp/privacy"},
890  {"name":"Demandbase","policyUrl":"https://www.demandbase.com/privacy-policy/"},
891  {"name":"DENTSU","policyUrl":"http://www.dentsu.co.jp/terms/data_policy.html"},
892  {"name":"Dentsu Aegis Network","policyUrl":"http://www.dentsu.com/termsofuse/data_policy.html"},
893  {"name":"Digiseg","policyUrl":"http://www.digiseg.io/GDPR/"},
894  {"name":"Digitec Galaxus AG","policyUrl":"https://www.digitec.ch/de/Wiki/2791"},
895  {"name":"Digitize","policyUrl":"http://www.digitize.ie/online-privacy/"},
896  {"name":"Display.direct","policyUrl":"https://display.direct/wp-content/uploads/2018/04/Privacy-Policy.pdf"},
897  {"name":"DistroScale","policyUrl":"http://www.distroscale.com/about/privacy-policy/"},
898  {"name":"DMA Institute","policyUrl":"https://www.dma-institute.com/privacy-compliancy/"},
899  {"name":"Dochase","policyUrl":"http://www.dochase.com/privacy.html"},
900  {"name":"Double Check","policyUrl":"https://adchex.com"},
901  {"name":"DoubleVerify","policyUrl":"https://www.doubleverify.com/privacy/"},
902  {"name":"Downstream.ai","policyUrl":"http://www.downstream.ai/privacy.html"},
903  {"name":"DServe","policyUrl":"http://dserve.dentsu360th.com/privacy-policy"},
904  {"name":"Dstillery","policyUrl":"https://dstillery.com/privacy-policy/"},
905  {"name":"DTS","policyUrl":"https://client.adhslx.com/privacy.html"},
906  {"name":"DYNADMIC","policyUrl":"http://eu.dynadmic.com/privacy-policy/"},
907  {"name":"DynAdmic Corporation","policyUrl":"http://us.dynadmic.com/privacy-policy/"},
908  {"name":"E-Contenta","policyUrl":"https://e-contenta.com/en/privacy/"},
909  {"name":"E-Planning","policyUrl":"https://www.e-planning.net/en/privacy.html"},
910  {"name":"Eacnur","policyUrl":"https://eacnur.org/es/politica-privacidad"},
911  {"name":"EASYmedia","policyUrl":"https://www.rvty.net/gdpr"},
912  {"name":"eBay","policyUrl":"https://www.ebay.com/help/policies/member-behaviour-policies/user-privacy-notice-privacy-policy?id=4260#section12"},
913  {"name":"ebuilders","policyUrl":"http://ebuilders.nl/privacy"},
914  {"name":"econda GmbH","policyUrl":"https://www.econda.de/service/datenschutz/"},
915  {"name":"Effinity","policyUrl":"https://www.effiliation.com/politique-confidentialite.html"},
916  {"name":"eMarketingSolutions","policyUrl":"https://emarketingsolutions.es/privacy-policy"},
917  {"name":"Emerse","policyUrl":"https://www.emerse.com/privacy-policy/"},
918  {"name":"emetriq","policyUrl":"https://www.emetriq.com/datenschutz/"},
919  {"name":"Enbritely","policyUrl":"http://enbrite.ly/privacy-policy-2/"},
920  {"name":"engageBDR","policyUrl":"http://engagebdr.com/terms/EngageBDR_Buyer_Addendum_December_2015.pdf"},
921  {"name":"Ensighten","policyUrl":"https://www.ensighten.com/privacy-policy/"},
922  {"name":"ENVISIONX LTD","policyUrl":"http://envisionx.co/privacy"},
923  {"name":"Epic Combo","policyUrl":"http://adagnit.io/privacy-policy/"},
924  {"name":"Erate","policyUrl":"http://www.eratead.com/privacy_policy.pdf"},
925  {"name":"Essens","policyUrl":"https://essens.no/privacy-policy/"},
926  {"name":"ESV","policyUrl":"https://www.wizaly.com/terms-of-use#privacy-policy"},
927  {"name":"Etu Corporation","policyUrl":"https://www.etusolution.com/index.php/en/about/gdpr"},
928  {"name":"Eulerian Technologies","policyUrl":"https://www.eulerian.com/en/privacy/"},
929  {"name":"EVC","policyUrl":"http://morequalifiedleads.co.uk/privacy.html"},
930  {"name":"Evidon","policyUrl":"https://www.evidon.com/resources/privacy-statement/"},
931  {"name":"Exactag","policyUrl":"https://www.exactag.com/en/data-privacy/"},
932  {"name":"Exponential","policyUrl":"http://exponential.com/privacy/"},
933  {"name":"Exposebox","policyUrl":"http://www.exposebox.com/policy.html"},
934  {"name":"Extreme Reach","policyUrl":"https://extremereach.com/privacy-policy/"},
935  {"name":"Eyereturn Marketing","policyUrl":"https://eyereturnmarketing.com/privacy/"},
936  {"name":"F Sharp","policyUrl":"https://fsharp.co/privacy-policy"},
937  {"name":"F@N communications","policyUrl":"http://www.fancs.com/privacypolicy"},
938  {"name":"Facebook","policyUrl":"https://www.facebook.com/about/privacy/update"},
939  {"name":"Fiverr","policyUrl":"https://www.fiverr.com/privacy-policy"},
940  {"name":"Flashtalking","policyUrl":"http://www.flashtalking.com/first-party-ad-serving/"},
941  {"name":"FlixMobility","policyUrl":"https://www.flixbus.com/privacy-policy"},
942  {"name":"fluct","policyUrl":"https://corp.fluct.jp/privacy/"},
943  {"name":"Forbes","policyUrl":"https://www.forbes.com/fdc/privacy.html"},
944  {"name":"Foursquare","policyUrl":"https://foursquare.com/legal/privacy"},
945  {"name":"Fractional Media","policyUrl":"https://www.fractionalmedia.com/privacy-policy"},
946  {"name":"Fraudlogix","policyUrl":"http://www.fraudlogix.com/privacy-policy/"},
947  {"name":"Freckle IoT","policyUrl":"https://freckleiot.com/privacy-policy/"},
948  {"name":"Fringe81","policyUrl":"http://www.fringe81.com/privacy/"},
949  {"name":"FuelX","policyUrl":"http://www.fuelx.com/privacy"},
950  {"name":"FUSIO BY S4M","policyUrl":"http://www.s4m.io/privacy-policy/"},
951  {"name":"Fyber","policyUrl":"https://www.fyber.com/legal/gdpr-faqs/"},
952  {"name":"GDM Services, Inc d/b/a Fiksu DSP","policyUrl":"https://fiksu.com/gdpr/"},
953  {"name":"Gemius","policyUrl":"https://www.gemius.com/cookie-policy.html"},
954  {"name":"GetIntent","policyUrl":"https://getintent.com/privacy/"},
955  {"name":"GfK","policyUrl":"https://sensic.net/"},
956  {"name":"Giantmedia","policyUrl":"http://giantmedia.com/about-giant/privacy-policy/"},
957  {"name":"GlobalWebIndex","policyUrl":"http://legal.trendstream.net/non-panellist_privacy_policy"},
958  {"name":"GO.PL","policyUrl":"https://go.pl/polityka-bezpieczenstwa-danych-osobowych/"},
959  {"name":"GoldSpot Media","policyUrl":"https://corp.fluct.jp/privacy/gsm/"},
960  {"name":"Goodway Group","policyUrl":"https://goodwaygroup.com/privacy-policy/"},
961  {"name":"GP One","policyUrl":"http://www.gsi-one.org/templates/gsi/en/files/privacy_policy.pdf"},
962  {"name":"Gridsum","policyUrl":"https://ad2.gridsumdissector.com/about-googleadwords-privacy?lang=en"},
963  {"name":"GroovinAds","policyUrl":"http://www.groovinads.com/en#privacy_modal"},
964  {"name":"GroundhogTech","policyUrl":"http://www.ghtinc.com/mi-dsp/privacy-policies/"},
965  {"name":"GroundTruth","policyUrl":"https://www.groundtruth.com/privacy-policy/"},
966  {"name":"GroupM","policyUrl":"https://www.groupm.com/privacy-policy"},
967  {"name":"Gruuv Interactive","policyUrl":"https://www.gruuvinteractive.com/privacy-policy/"},
968  {"name":"Gruvi","policyUrl":"http://www.gruvi.tv/gdpr"},
969  {"name":"gskinner","policyUrl":"https://createjs.com/legal/privacy.html"},
970  {"name":"Haensel AMS","policyUrl":"https://haensel-ams.com/data-privacy/"},
971  {"name":"Happyfication inc","policyUrl":"https://happyfication.com/privacy-policy/"},
972  {"name":"Hashtag'd","policyUrl":"https://hashtagd.net/about/privacy"},
973  {"name":"Havas Media France - DBi","policyUrl":"http://www.centraltag.com/commercial/policy/index.action"},
974  {"name":"hbfsTech","policyUrl":"http://www.hbfstech.com/fr/privacy.html"},
975  {"name":"Herolens","policyUrl":"https://herolens.com/privacy.html"},
976  {"name":"HockeyCurve","policyUrl":"http://hockeycurve.com/optout.html"},
977  {"name":"Hotels.com L. P.","policyUrl":"https://uk.hotels.com/customer_care/privacy.html"},
978  {"name":"Housing.com","policyUrl":"https://housing.com/terms.html"},
979  {"name":"HQ GmbH","policyUrl":"https://www.hqgmbh.eu/datenschutz.html"},
980  {"name":"hurra.com","policyUrl":"http://www.hurra.com/impressum"},
981  {"name":"hybrid.ai","policyUrl":"https://hybrid.ai/data_protection_policy"},
982  {"name":"iBILLBOARD","policyUrl":"http://www.ibillboard.com/privacymanagement/"},
983  {"name":"IBM","policyUrl":"https://www.ibm.com/customer-engagement/digital-marketing/gdpr"},
984  {"name":"IGAWorks","policyUrl":"http://www.igaworks.com/en/rule_user.html"},
985  {"name":"Ignition One","policyUrl":"https://www.ignitionone.com/privacy-policy/gdpr-subject-access-requests/"},
986  {"name":"Impact","policyUrl":"https://impact.com/privacy-policy/"},
987  {"name":"Improve Digital","policyUrl":"https://www.improvedigital.com/privacy-policy/"},
988  {"name":"INCUBIQ","policyUrl":"https://www.wootled.com/privacy"},
989  {"name":"Index Exchange","policyUrl":"http://www.indexexchange.com/privacy/"},
990  {"name":"Infectious Media","policyUrl":"https://impressiondesk.com/"},
991  {"name":"INFINIA","policyUrl":"http://www.infiniamobile.com/privacy_policy"},
992  {"name":"INFOnline","policyUrl":"https://www.infonline.de/datenschutz/"},
993  {"name":"Ingenious Technologies","policyUrl":"https://www.ingenioustechnologies.com/privacy-policy/"},
994  {"name":"Inmind","policyUrl":"https://opinion.com.ua/Default.aspx?p=confidential&l=1"},
995  {"name":"InMobi","policyUrl":"https://www.inmobi.com/privacy-policy-for-eea"},
996  {"name":"Innity","policyUrl":"https://www.innity.com/privacy-policy.php"},
997  {"name":"Innovid","policyUrl":"http://www.innovid.com/privacy-policy"},
998  {"name":"Inspired Mobile","policyUrl":"https://www.inspired-mobile.com/GDPR-how/"},
999  {"name":"Instinctive","policyUrl":"https://instinctive.io/privacy"},
1000  {"name":"Integral Ad Science","policyUrl":"http://www.integralads.com/privacy-policy"},
1001  {"name":"intelliAd","policyUrl":"https://www.intelliad.de/datenschutz"},
1002  {"name":"Interplus","policyUrl":"https://www.now-tracking.com/privacy.html"},
1003  {"name":"Interpolls","policyUrl":"https://www.interpolls.com/privacy"},
1004  {"name":"Interpublic Group ","policyUrl":"https://www.interpublic.com/privacy-notice"},
1005  {"name":"Interrogare GmbH","policyUrl":"https://www.interrogare.de/en/contact/data-protection/"},
1006  {"name":"Intimate Merger","policyUrl":"https://corp.intimatemerger.com/privacypolicy-en/"},
1007  {"name":"IOTEC","policyUrl":"https://www.iotecglobal.com/privacy-policy/"},
1008  {"name":"IQM","policyUrl":"https://iqm.com/privacy-policy"},
1009  {"name":"Jampp","policyUrl":"https://jampp.com/privacy-policy/"},
1010  {"name":"Jivox","policyUrl":"http://www.jivox.com/privacy/"},
1011  {"name":"Joystick Interactive","policyUrl":"http://joystickinteractive.com/privacy.html"},
1012  {"name":"JustWatch","policyUrl":"https://www.justwatch.com/uk/imprint"},
1013  {"name":"Kadam","policyUrl":"https://www.kadam.net/ru/privacy-policy"},
1014  {"name":"Kantar","policyUrl":"https://www.kantarmedia.com/global/privacy-statement"},
1015  {"name":"KAYAK","policyUrl":"https://www.kayak.com/privacy"},
1016  {"name":"KEEN","policyUrl":"http://www.ingenio.com/documents/help/privacypolicy.asp"},
1017  {"name":"KeyCDN","policyUrl":"https://www.keycdn.com/gdpr"},
1018  {"name":"Kimia Group","policyUrl":"https://kimiagroup.com/privacy-policy.html"},
1019  {"name":"Knorex","policyUrl":"https://www.knorex.com/privacy"},
1020  {"name":"Kochava","policyUrl":"https://www.kochava.com/support-privacy/"},
1021  {"name":"KPI Solutions","policyUrl":"https://www.adv.admeme.net/en
1021/privacy/optout.html"},
1022  {"name":"Kwanko","policyUrl":"http://www.kwanko.com/gdpr"},
1023  {"name":"Kwanzoo","policyUrl":"http://www.kwanzoo.com/cms/gdpr-privacy-addendum/"},
1024  {"name":"LANDS' END","policyUrl":"https://www.landsend.com/customerservice/legal_policies/privacy/"},
1025  {"name":"Lifesight","policyUrl":"https://www.lifesight.io/privacy"},
1026  {"name":"LifeStreet","policyUrl":"http://www.lifestreet.com/privacy"},
1027  {"name":"Liftoff","policyUrl":"https://liftoff.io/privacy-policy/"},
1028  {"name":"Ligatus","policyUrl":"https://www.ligatus.com/en/privacy-policy"},
1029  {"name":"LINK Institut","policyUrl":"http://www.link.ch/privacy"},
1030  {"name":"LinkedIn","policyUrl":"https://www.linkedin.com/legal/privacy-policy"},
1031  {"name":"Linkstorm","policyUrl":"https://www.linkstorm.net/privacy/"},
1032  {"name":"ListenLoop","policyUrl":"https://listenloop.com/user-consent-policy"},
1033  {"name":"LiveIntent","policyUrl":"https://liveintent.com/services-privacy-policy/"},
1034  {"name":"LivelyImpact","policyUrl":"http://www.livelyimpact.com/privacy-policy.html"},
1035  {"name":"LiveRamp","policyUrl":"https://liveramp.com/service-privacy-policy/"},
1036  {"name":"LKQD","policyUrl":"http://www.lkqd.com/privacy-policy/"},
1037  {"name":"Localsensor","policyUrl":"https://www.localsensor.com/privacy.html"},
1038  {"name":"Localstars","policyUrl":"https://www.localstars.com/localstars-privacy-policy"},
1039  {"name":"Lockon","policyUrl":"https://www.ebis.ne.jp/gdpr_e/"},
1040  {"name":"LOKA Research","policyUrl":"https://lokaplatform.com/privacy/"},
1041  {"name":"LoopMe","policyUrl":"https://loopme.com/privacy/"},
1042  {"name":"Lotame","policyUrl":"https://www.lotame.com/about-lotame/privacy/"},
1043  {"name":"LotLinx®","policyUrl":"https://www.lotlinx.com/privacy-statement/"},
1044  {"name":"Louder","policyUrl":"http://louder.com.au/privacy/"},
1045  {"name":"Lucid","policyUrl":"https://drive.google.com/file/d/15XwJA8U1WixiYRIqz1dBq-gokgLLszpi/view?usp=sharing"},
1046  {"name":"M,P,NEWMEDIA,","policyUrl":"https://www.mp-newmedia.com/datenschutz"},
1047  {"name":"Macromill group","policyUrl":"https://www.metrixlab.com/privacy-statement/"},
1048  {"name":"MADGIC","policyUrl":"https://www.madgic.com/privacy-and-protection-policy/"},
1049  {"name":"Maelico LTD","policyUrl":"http://hyperadx.com/privacy_policy.html"},
1050  {"name":"Mail.ru","policyUrl":"https://help.mail.ru/mail-help/UA"},
1051  {"name":"MainADV","policyUrl":"http://www.mainad.com/privacy-policy"},
1052  {"name":"Manage.com","policyUrl":"https://www.manage.com/privacy-policy/"},
1053  {"name":"Market Points, Inc.","policyUrl":"http://www.marketpointsinc.com/privacy.html"},
1054  {"name":"Marketing Science Consulting Group, Inc.","policyUrl":"http://mktsci.com/privacy_policy.htm"},
1055  {"name":"Markit","policyUrl":"https://www.markitdigital.com/products/ads/privacy-policy/"},
1056  {"name":"Mashero","policyUrl":"http://www.mashero.com/en/privacy-protection"},
1057  {"name":"Maverick","policyUrl":"https://www.mvrck.co.jp/privacy/about-targeting-ad/"},
1058  {"name":"MaxCDN","policyUrl":"https://www.maxcdn.com/gdpr/"},
1059  {"name":"MBR Targeting Gmbh","policyUrl":"https://privacy.mbr-targeting.com"},
1060  {"name":"Media Force","policyUrl":"http://www.mediaforce.com/privacy.html"},
1061  {"name":"media.ventive GmbH","policyUrl":"http://www.contentspread.net/?page=privacy"},
1062  {"name":"Mediahead","policyUrl":"http://mediahead.com"},
1063  {"name":"MediaMath","policyUrl":"http://www.mediamath.com/privacy-policy/"},
1064  {"name":"MEDIAN","policyUrl":"http://www.median.eu/en/privacy-policy/"},
1065  {"name":"Mediarithmics","policyUrl":"https://www.mediarithmics.com/en/data-privacy.html"},
1066  {"name":"mediasmart","policyUrl":"https://mediasmart.io/privacy/"},
1067  {"name":"MediaWallah","policyUrl":"http://mediawallah.com/privacy-policy/"},
1068  {"name":"Meetrics","policyUrl":"https://www.meetrics.com/en/data-privacy/"},
1069  {"name":"Metalyzer","policyUrl":"https://metapeople.com/datenschutz/"},
1070  {"name":"MGID","policyUrl":"https://www.mgid.com/privacy-policy"},
1071  {"name":"Miaozhen Systems","policyUrl":"http://www.miaozhen.com/index.php/EN/Index/articontent/articleid/202.html"},
1072  {"name":"MicroAd","policyUrl":"https://www.microad.co.jp/privacy/"},
1073  {"name":"Millemedia","policyUrl":"https://www.millemedia.de/datenschutz/"},
1074  {"name":"MindTake Research","policyUrl":"https://www.mindtake.com/en/reppublika-privacy-policy"},
1075  {"name":"MiQ","policyUrl":"http://wearemiq.com/privacy-policy/"},
1076  {"name":"Mixmarket Affiliate Network","policyUrl":"http://mixmarket.biz/confidential/"},
1077  {"name":"Mixpo","policyUrl":"http://www.netsertive.com/privacy-policy/"},
1078  {"name":"Mobfox","policyUrl":"https://www.mobfox.com/privacy-policy/"},
1079  {"name":"Mobile Innovations","policyUrl":"http://paypersale.ru/index/optout"},
1080  {"name":"Mobitrans","policyUrl":"http://www.mobitrans.net/privacy-policy/"},
1081  {"name":"Mobpro","policyUrl":"http://mobpro.com/privacy.html"},
1082  {"name":"Mobusi","policyUrl":"https://www.mobusi.com/privacy.en.html"},
1083  {"name":"Mobvista/Mintegral","policyUrl":"https://www.mintegral.com/en/privacy"},
1084  {"name":"Moloco Ads","policyUrl":"http://www.molocoads.com/private-policy.html"},
1085  {"name":"Momentum","policyUrl":"http://www.m0mentum.co.jp/privacy.html"},
1086  {"name":"Mopedo","policyUrl":"http://mopedo.com/privacy-terms/"},
1087  {"name":"MSI-ACI","policyUrl":"http://site.msi-aci.com/Home/FlexTrackPrivacy"},
1088  {"name":"N2","policyUrl":"https://n2.fi/privacy-policy/"},
1089  {"name":"Nano Interactive","policyUrl":"http://www.nanointeractive.com/privacy"},
1090  {"name":"Naoplay","policyUrl":"http://www.digigladd.com/privacy.php"},
1091  {"name":"Native Touch","policyUrl":"https://nativetouch.com/privacy-policy/"},
1092  {"name":"NativeAds.com","policyUrl":"https://nativeads.com/privacy-policy.php"},
1093  {"name":"Navegg","policyUrl":"https://www.navegg.com/en/privacy-policy/"},
1094  {"name":"Neodata Group","policyUrl":"https://www.neodatagroup.com/en/security-policy"},
1095  {"name":"NEORY GmbH","policyUrl":"https://www.neory.com/privacy.html"},
1096  {"name":"Net Info","policyUrl":"https://www.netinfocompany.bg/privacy.php"},
1097  {"name":"NET-Metrix AG","policyUrl":"https://www.net-metrix.ch/ueber-uns/datenschutzerklaerung"},
1098  {"name":"Netflix","policyUrl":"http://www.netflix.com/google-3PAS-info"},
1099  {"name":"Netquest","policyUrl":"https://www.nicequest.com/us/privacy"},
1100  {"name":"Netscore","policyUrl":"http://netscore.pl/polityka-prywatnosci/"},
1101  {"name":"NetSuccess","policyUrl":"https://www.inres.sk/optout/index_sk.html"},
1102  {"name":"Neuralone","policyUrl":"https://web.neural.one/privacy-policy/"},
1103  {"name":"Neustar","policyUrl":"https://www.home.neustar/privacy"},
1104  {"name":"NEXD","policyUrl":"https://nexd.com/privacy-policy/"},
1105  {"name":"Nexus Soft","policyUrl":"https://www.nexus-soft.org/index/privacy"},
1106  {"name":"Nielsen","policyUrl":"http://www.nielsen.com/us/en/privacy-statement/digital-measurement.html"},
1107  {"name":"NinthDecimal","policyUrl":"http://www.ninthdecimal.com/privacy-policy-terms-of-service/"},
1108  {"name":"Nordic Factory Solutions AB","policyUrl":"https://www.bannerflow.com/privacy"},
1109  {"name":"Norstat","policyUrl":"https://opinion-people.com/dataprotection"},
1110  {"name":"Novem","policyUrl":"http://www.novem.pl/doc/Novem_polityka_prywatnosci.pdf"},
1111  {"name":"nugg.ad","policyUrl":"https://nugg.ad/de/datenschutz/allgemeine-informationen.html"},
1112  {"name":"numberly","policyUrl":"http://ads.1000mercis.com/us.html"},
1113  {"name":"Oath","policyUrl":"https://policies.oath.com/xw/en/oath/privacy/enterprise/b2bprivacypolicy/"},
1114  {"name":"Objective Partners","policyUrl":"https://www.objectivepartners.com/cookie-policy-and-privacy-statement/"},
1115  {"name":"Omnicom Media Group","policyUrl":"https://www.omnicommediagroup.com/disclaimer.htm"},
1116  {"name":"OmniVirt","policyUrl":"https://www.omnivirt.com/tos/privacy/"},
1117  {"name":"On Device Research","policyUrl":"https://ondeviceresearch.com/GDPR"},
1118  {"name":"OneDigitalAd Technologies","policyUrl":"https://www.onedigitalad.com/privacy/privacyPolicy.html"},
1119  {"name":"OneTag","policyUrl":"https://www.onetag.net/privacy/"},
1120  {"name":"Onseo","policyUrl":"http://onseo.biz/privacy.html"},
1121  {"name":"OpenSlate","policyUrl":"https://www.openslate.com/general-data-protection-regulation-gdpr-compliance-statement/"},
1122  {"name":"OpenX Technologies","policyUrl":"https://www.openx.com/legal/privacy-policy/"},
1123  {"name":"OpinionAds","policyUrl":"https://opinionads.com/privacy"},
1124  {"name":"Optimise","policyUrl":"https://www.optimisemedia.com/privacy_policy/"},
1125  {"name":"Optimize LCC D.B.A Genius Monkey","policyUrl":"https://www.geniusmonkey.com/gdpr.php"},
1126  {"name":"Optomaton","policyUrl":"http://optomaton.com/privacy.html"},
1127  {"name":"Oracle Data Cloud","policyUrl":"https://www.oracle.com/legal/privacy/marketing-cloud-data-cloud-privacy-policy.html"},
1128  {"name":"Orbis Video","policyUrl":"http://www.orbisvideo.com/privacy-policy/"},
1129  {"name":"OTTO","policyUrl":"https://www.otto.de/shoppages/service/datenschutz"},
1130  {"name":"OVC GmbH","policyUrl":"https://www.kissnofrog.com/legal/privacy"},
1131  {"name":"Overstock","policyUrl":"https://help.overstock.com/help/s/article/PRIVACY-AND-SECURITY-POLICY"},
1132  {"name":"Oxford BioChronometrics","policyUrl":"https://oxford-biochron.com/privacy-policy/"},
1133  {"name":"Papayamobile","policyUrl":"https://affiliate.appflood.com/gdpr"},
1134  {"name":"Parrable","policyUrl":"https://www.parrable.com/privacy"},
1135  {"name":"Parship","policyUrl":"https://www.parship.de/privacypolicy/"},
1136  {"name":"Pathmatics","policyUrl":"https://www.pathmatics.com/privacy#advertising"},
1137  {"name":"PERMODO","policyUrl":"http://permodo.com/de/privacy.html"},
1138  {"name":"Persona.ly","policyUrl":"http://persona.ly/privacy_policy"},
1139  {"name":"Phaistos Networks","policyUrl":"http://adman.gr/gdpr"},
1140  {"name":"Pi-rate / pubintl","policyUrl":"https://pi-rate.com.au/privacy.html"},
1141  {"name":"Pixalate","policyUrl":"http://www.pixalate.com/privacypolicy/"},
1142  {"name":"Piximedia","policyUrl":"https://piximedia.com/privacy/"},
1143  {"name":"Placecast","policyUrl":"http://placecast.net/privacy_policy.html"},
1144  {"name":"Placed","policyUrl":"https://www.placed.com/privacy-policy"},
1145  {"name":"Platform161","policyUrl":"https://platform161.com/cookie-and-privacy-policy/"},
1146  {"name":"Platform360","policyUrl":"http://platform360.co/privacy.html"},
1147  {"name":"PlatformOne","policyUrl":"https://www.platform-one.co.jp/data/"},
1148  {"name":"PMG","policyUrl":"https://www.pmg.com/privacy-policy/"},
1149  {"name":"Polldaddy","policyUrl":"https://automattic.com/privacy/"},
1150  {"name":"Polytab","policyUrl":"https://infernotions.com/privacy-notice/"},
1151  {"name":"PopRule","policyUrl":"http://purposelab.com/privacy/"},
1152  {"name":"ProData Media","policyUrl":"http://prodata.media/gdpr.html"},
1153  {"name":"ProgSol.cz","policyUrl":"http://www.impressionmedia.cz/files/Zasady-ochrany-a-zpracovani-osobnich-udaju-IM.pdf"},
1154  {"name":"Protected Media","policyUrl":"http://www.protected.media/privacy-policy/"},
1155  {"name":"Publicis Groupe","policyUrl":"https://www.publicismedia.de/datenschutz/"},
1156  {"name":"PubMatic","policyUrl":"https://pubmatic.com/legal/privacy-policy/"},
1157  {"name":"Pulpo (An Entravision Company)","policyUrl":"https://www.pulpo.com/en/privacy-policy/"},
1158  {"name":"PulsePoint","policyUrl":"https://www.pulsepoint.com/privacy-policy"},
1159  {"name":"Pure Cobalt","policyUrl":"https://www.purecobalt.com/policy/"},
1160  {"name":"Qantas","policyUrl":"http://www.qantas.com/au/en/support/privacy-and-security.html#our-contact-details"},
1161  {"name":"Quadas","policyUrl":"http://www.quadas.com/ys.php?gid=0"},
1162  {"name":"Qualia","policyUrl":"https://bluecava.com/privacy-policy"},
1163  {"name":"Qualtrics","policyUrl":"https://www.qualtrics.com/uk/platform/gdpr/"},
1164  {"name":"Quantasy","policyUrl":"http://planqk.com"},
1165  {"name":"Quantcast","policyUrl":"https://www.quantcast.com/privacy/"},
1166  {"name":"QuarticON","policyUrl":"http://quarticon.com/privacy-statement/"},
1167  {"name":"Quple","policyUrl":"http://quple.io/privacy.html"},
1168  {"name":"Rackspace","policyUrl":"http://www.rackspace.com/gdpr"},
1169  {"name":"Rakuten Marketing","policyUrl":"https://rakutenmarketing.com/legal-notices/services-privacy-policy"},
1170  {"name":"RAM","policyUrl":"http://www.rampanel.com/ram_privacy_policy.html"},
1171  {"name":"Reactive","policyUrl":"http://reactive-agency.ru/"},
1172  {"name":"Realytics","policyUrl":"https://www.realytics.io/gdpr-and-how-realytics-is-getting-ready/"},
1173  {"name":"Realzeit","policyUrl":"https://realzeit.io/privacy.html"},
1174  {"name":"Reamp","policyUrl":"https://rmemx.reamp.com.br/2015/privacy-policy/privacy.html"},
1175  {"name":"Recruit JP","policyUrl":"https://www.r-ad.ne.jp/optout/"},
1176  {"name":"REES46","policyUrl":"https://docs.rees46.com/display/en/Legal"},
1177  {"name":"Relay42","policyUrl":"https://relay42.com/privacy"},
1178  {"name":"Remerge","policyUrl":"http://remerge.io/privacy-policy.html"},
1179  {"name":"Resonate","policyUrl":"https://www.resonate.com/privacy-policy/"},
1180  {"name":"RevenueMantra","policyUrl":"http://www.revenuemantra.com/privacy.html"},
1181  {"name":"RevJet","policyUrl":"https://www.revjet.com/privacy"},
1182  {"name":"Rezonence","policyUrl":"https://rezonence.com/privacy-policy/"},
1183  {"name":"RhythmOne LLC","policyUrl":"https://www.rhythmone.com/landing/gdpr"},
1184  {"name":"RichMedia Studio","policyUrl":"http://www.richmediastudio.com/privacy_policy/"},
1185  {"name":"RIESENIA.com","policyUrl":"https://www.adboost.sk/gdpr.html"},
1186  {"name":"RN SSI Group","policyUrl":"https://www.valuedopinions.co.uk/privacy"},
1187  {"name":"ROMIR","policyUrl":"http://ssp.rmh.ru/files/privacy_policy_eng.pdf"},
1188  {"name":"Rontar","policyUrl":"https://www.rontar.com/content/content-324"},
1189  {"name":"Roq.ad","policyUrl":"https://www.roq.ad/privacy-policy"},
1190  {"name":"Roy Morgan Research","policyUrl":"http://www.roymorgan.com/digital-privacy"},
1191  {"name":"RTB House","policyUrl":"https://www.rtbhouse.com/gdpr/"},
1192  {"name":"Rubicon Project","policyUrl":"http://rubiconproject.com/rubicon-project-yield-optimization-privacy-policy/"},
1193  {"name":"Rutarget","policyUrl":"https://segmento.ru/en/gdpr"},
1194  {"name":"Salesforce DMP","policyUrl":"https://www.salesforce.com/company/privacy/"},
1195  {"name":"Sape","policyUrl":"https://traffic.sape.ru/policy.html"},
1196  {"name":"SAS One Planet Only","policyUrl":"https://oneplanetonly.com/files/PRIVACY_POLICY.pdf"},
1197  {"name":"Scenestealer","policyUrl":"http://www.scenestealer.tv/privacy-policy"},
1198  {"name":"SCIBIDS TECHNOLOGY","policyUrl":"http://scibids.com/privacy"},
1199  {"name":"Scigineer","policyUrl":"https://www.scigineer.co.jp/privacy/"},
1200  {"name":"Scoota","policyUrl":"http://scoota.com/privacy-policy/"},
1201  {"name":"Seenthis","policyUrl":"https://seenthis.co/privacy-notice-2018-04-18.pdf"},
1202  {"name":"Sellpoints","policyUrl":"https://retargeter.com/legal-privacy/"},
1203  {"name":"Semasio GmbH","policyUrl":"http://www.semasio.com/privacy-policy/"},
1204  {"name":"SFR","policyUrl":"http://www.sfr.fr/securite-confidentialite.html"},
1205  {"name":"Sharethrough, Inc.","policyUrl":"https://platform-cdn.sharethrough.com/privacy-policy"},
1206  {"name":"Sift Media","policyUrl":"https://www.sift.co/privacy"},
1207  {"name":"Signal","policyUrl":"https://www.signal.co/privacy-policy/"},
1208  {"name":"Silver Egg Technology","policyUrl":"http://www.silveregg.co.jp/GDPR"},
1209  {"name":"Simplaex GmBH","policyUrl":"https://simplaex.com/advertising-privacy-policy/"},
1210  {"name":"Simpli.fi","policyUrl":"https://www.simpli.fi/site-privacy-policy2/"},
1211  {"name":"Sizmek","policyUrl":"https://www.sizmek.com/privacy-policy/"},
1212  {"name":"Sketchfab, Inc.","policyUrl":"https://sketchfab.com/privacy"},
1213  {"name":"Sled, Inc.","policyUrl":"http://www.parsec.media/privacy-policy/"},
1214  {"name":"Smaato","policyUrl":"https://www.smaato.com/privacy/"},
1215  {"name":"Smadex","policyUrl":"http://smadex.com/end-user-privacy-policy/"},
1216  {"name":"Smart","policyUrl":"http://smartadserver.com/company/privacy-policy/"},
1217  {"name":"Smart.bid ltd","policyUrl":"http://www.smart.bid/privacy/"},
1218  {"name":"smartclip Holding AG","policyUrl":"http://privacy-portal.smartclip.net"},
1219  {"name":"Smartology","policyUrl":"https://www.smartology.net/privacy-policy/"},
1220  {"name":"SMARTSTREAM","policyUrl":"https://www.smartstream.tv/de/datenschutz"},
1221  {"name":"Snitcher.com","policyUrl":"http://help.snitcher.com/general-information/does-snitcher-conform-to-the-gdpr"},
1222  {"name":"So-net Media Networks","policyUrl":"http://www.so-netmedia.jp/cookie/index.html"},
1223  {"name":"Sociomantic","policyUrl":"https://www.sociomantic.com/privacy/en/"},
1224  {"name":"Sodel Software Solutions Pvt. Ltd.","policyUrl":"http://www.audience73.com/privacy.html"},
1225  {"name":"Softcrylic","policyUrl":"https://softcrylic.com/privacy-policy/"},
1226  {"name":"Softcube","policyUrl":"http://softcube.com/privacy-policy"},
1227  {"name":"Sojern","policyUrl":"https://www.sojern.com/privacy/product-privacy-policy/"},
1228  {"name":"Somo Audience","policyUrl":"https://somoaudience.com/legal/"},
1229  {"name":"Somplo","policyUrl":"http://somplo.com/privacy-policy/"},
1230  {"name":"SourceKnowledge","policyUrl":"http://www.sourceknowledge.com/privacy"},
1231  {"name":"Sovrn ","policyUrl":"https://www.sovrn.com/privacy-policy/"},
1232  {"name":"SPACE ADSERVER","policyUrl":"https://adx.space/policy.html"},
1233  {"name":"Sparks47","policyUrl":"http://www.sparks47.com/privacy/"},
1234  {"name":"Spartoo","policyUrl":"https://www.spartoo.co.uk/data_protection.php"},
1235  {"name":"Splicky","policyUrl":"https://www.splicky.com/de/web/privacy"},
1236  {"name":"Spotad","policyUrl":"http://www.spotad.co/privacy-policy/"},
1237  {"name":"SpotX","policyUrl":"https://www.spotx.tv/privacy-policy/"},
1238  {"name":"Spring Venture Group","policyUrl":"http://www.springventuregroup.com/privacy-policy/"},
1239  {"name":"SpringServe","policyUrl":"https://springserve.com/consumer-privacy"},
1240  {"name":"StackAdapt","policyUrl":"https://www.stackadapt.com/privacy"},
1241  {"name":"Stage Flag","policyUrl":"http://stageflag.com/privacy/"},
1242  {"name":"StartApp","policyUrl":"https://www.startapp.com/policy/privacy-policy/"},
1243  {"name":"Stratio Big Data","policyUrl":"https://www.mutua.es/politica-cookies/"},
1244  {"name":"StreamRail","policyUrl":"https://www.ironsrc.com/wp-content/uploads/2016/11/ironSourceDisplayPrivacyPolicy.pdf"},
1245  {"name":"SUITE 66","policyUrl":"http://www.suite66.com/privacy-policy/"},
1246  {"name":"Supership","policyUrl":"https://supership.jp/optout/"},
1247  {"name":"Survata","policyUrl":"https://www.survata.com/respondent-privacy-policy/"},
1248  {"name":"Suzumuchi","policyUrl":"http://suzuserver.dk/GDPR/"},
1249  {"name":"Swaven","policyUrl":"http://www.swaven.com/cookie-policy/"},
1250  {"name":"TabMo","policyUrl":"http://static.tabmo.io.s3.amazonaws.com/privacy-policy/index.html"},
1251  {"name":"Taboola","policyUrl":"https://www.taboola.com/privacy-policy"},
1252  {"name":"TACTICâ„¢ Real-Time Marketing","policyUrl":"http://tacticrealtime.com/privacy/"},
1253  {"name":"Tagtoo","policyUrl":"https://www.tagtoo.com.tw/privacy_en.html"},
1254  {"name":"Tail","policyUrl":"https://www.tail.digital/#privacy"},
1255  {"name":"Taiwan Mobile Co Ltd","policyUrl":"http://www.ghtinc.com/mi-dsp/privacy-policies/"},
1256  {"name":"tapCLIQ","policyUrl":"https://www.tapcliq.com/privacy"},
1257  {"name":"Tapjoy","policyUrl":"https://www.tapjoy.com/legal/#privacy-policy"},
1258  {"name":"Tapklik","policyUrl":"https://www.tapklik.com/gdpr"},
1259  {"name":"TapSense","policyUrl":"https://www.tapsense.com/company/privacy-policy"},
1260  {"name":"Taptica","policyUrl":"https://www.taptica.com/privacy/"},
1261  {"name":"Teads.TV","policyUrl":"https://teads.tv/privacy-policy/"},
1262  {"name":"Tealium","policyUrl":"https://tealium.com/protecting-your-privacy-and-your-data/"},
1263  {"name":"TEEMO","policyUrl":"https://teemo.co/fr/confidentialite/"},
1264  {"name":"Telecoming","policyUrl":"http://www.telecoming.com/privacy-policy/"},
1265  {"name":"TenMax","policyUrl":"https://www.tenmax.io/gdpr-privacy-policy"},
1266  {"name":"The Bridge","policyUrl":"https://bridgecdi.com/privacy.php"},
1267  {"name":"The Reach Group","policyUrl":"https://www.reachgroup.com/en/privacy-statement/"},
1268  {"name":"The Trade Desk","policyUrl":"https://www.thetradedesk.com/general/privacy-policy"},
1269  {"name":"Thomann GmbH","policyUrl":"https://www.thomann.de/de/compinfo_privacy.html"},
1270  {"name":"ThoughtLeadr","policyUrl":"http://www.thoughtleadr.com/privacy-policy/"},
1271  {"name":"Thunder","policyUrl":"https://makethunder.com/privacy"},
1272  {"name":"TimeOne","policyUrl":"https://www.timeonegroup.com/privacy-policies/"},
1273  {"name":"Tinkoff.ru","policyUrl":"https://static.tinkoff.ru/documents/docs/processing-personal-data.pdf"},
1274  {"name":"TotalJobs Group Ltd","policyUrl":"https://www.totaljobs.com/privacy-policy"},
1275  {"name":"Touch Ads","policyUrl":"https://touchads.com/company-index.html#privacy-policy"},
1276  {"name":"TraceAd","policyUrl":"http://www.tracead.co.uk/230/gdpr-privacy-policy-gdpr"},
1277  {"name":"Tradedoubler","policyUrl":"http://www.tradedoubler.com/en/privacy-policy/"},
1278  {"name":"Trafmag","policyUrl":"http://trafmag.com/policy#gdpr"},
1279  {"name":"travel audience – An Amadeus Company","policyUrl":"https://travelaudience.com/product-privacy-policy/"},
1280  {"name":"Treepodia","policyUrl":"https://www.treepodia.com/En/docroot/Documents/Treepodia_Website_and_Platform_Privacy_Policy.pdf"},
1281  {"name":"Trend Research","policyUrl":"https://trendfrage.de/?ID=135"},
1282  {"name":"TreSensa","policyUrl":"http://tresensa.com/eu-privacy/index.html"},
1283  {"name":"Tribes Research","policyUrl":"https://www.tribesresearch.co.uk/terms-conditions-cookie-and-privacy-policy/"},
1284  {"name":"TripAdvisor","policyUrl":"https://tripadvisor.mediaroom.com/us-privacy-policy"},
1285  {"name":"TripleLift ","policyUrl":"https://triplelift.com/privacy/"},
1286  {"name":"TROVIT","policyUrl":"https://corporate.trovit.com/politica-de-privacidad"},
1287  {"name":"True Wave Technologies Limited","policyUrl":"http://truewave.io/gdpr.html"},
1288  {"name":"TruEffect","policyUrl":"https://trueffect.com/privacy-policy/"},
1289  {"name":"TrustArc","policyUrl":"https://www.trustarc.com/privacy-policy/"},
1290  {"name":"Turbobytes","policyUrl":"https://www.turbobytes.com/gdpr/"},
1291  {"name":"TVadSync","policyUrl":"https://www.tvadsync.com/privacy-policy/"},
1292  {"name":"Twinpine","policyUrl":"http://twinpinenetwork.com/privacy-policy/"},
1293  {"name":"twyn","policyUrl":"http://www.twyn.com/datenschutz.html"},
1294  {"name":"Ubimo","policyUrl":"http://www.ubimo.com/privacy/"},
1295  {"name":"ucfunnel","policyUrl":"https://www.ucfunnel.com/privacy-policy"},
1296  {"name":"UDG","policyUrl":"https://www.udg.de/wp-content/uploads/2018/04/privacy_policy_EN.pdf"},
1297  {"name":"Umeng Plus Beijing Technology Limited Company","policyUrl":"https://dip.umeng.com/opt_out.html?spm=a211g2.181323.0.0.5c633604LjuRQc"},
1298  {"name":"Underdog Media","policyUrl":"https://underdogmedia.com/privacy-policy/gdpr"},
1299  {"name":"Undertone","policyUrl":"https://www.undertone.com/privacy/"},
1300  {"name":"UNICORN","policyUrl":"https://uncn.jp/cup?lan=en"},
1301  {"name":"Unisport","policyUrl":"https://www.unisport.dk/privacy/"},
1302  {"name":"Unitymedia","policyUrl":"https://www.unitymedia.de/privatkunden/datenschutz/"},
1303  {"name":"Universo Online","policyUrl":"http://www.dynad.net/"},
1304  {"name":"Unruly","policyUrl":"https://unruly.co/privacy"},
1305  {"name":"usemax (Emego GmbH)","policyUrl":"http://www.usemax.de/?l=privacy"},
1306  {"name":"Ve Interactive","policyUrl":"https://www.ve.com/privacy-policy"},
1307  {"name":"Vertoz","policyUrl":"https://www.vertoz.com/gdpr"},
1308  {"name":"Vertriebswerk","policyUrl":"https://eazy.de/agb"},
1309  {"name":"Verve","policyUrl":"https://www.verve.com/privacy-policy/"},
1310  {"name":"Viant","policyUrl":"https://viantinc.com/privacy-policy/"},
1311  {"name":"Vidazoo","policyUrl":"http://www.vidazoo.com/privacy"},
1312  {"name":"Video Research Interactive","policyUrl":"https://www.videoi.co.jp/privacy/"},
1313  {"name":"Videology","policyUrl":"https://videologygroup.com/en/privacy-policy/"},
1314  {"name":"Viewbix","policyUrl":"http://corp.viewbix.com/cookie-policy/"},
1315  {"name":"Vimeo","policyUrl":"https://vimeo.com/cookie_policy"},
1316  {"name":"Virtual Minds","policyUrl":"https://virtualminds.de/datenschutz/"},
1317  {"name":"VIVALU","policyUrl":"http://www.vivalu.com/downloads/de_DE/VIVALU_Datenschutz_2018.pdf"},
1318  {"name":"Vizury","policyUrl":"https://www1.vizury.com/legal/privacy-policy"},
1319  {"name":"Vodafone GmbH","policyUrl":"https://www.vodafone.de/unternehmen/datenschutz-privatsphaere.html"},
1320  {"name":"VRTCAL","policyUrl":"https://vrtcal.com/docs/Terms.pdf"},
1321  {"name":"Vserv","policyUrl":"https://www.vserv.com/privacy-policy/"},
1322  {"name":"Vuble","policyUrl":"http://vuble.tv/privacy"},
1323  {"name":"Vungle","policyUrl":"https://vungle.com/gdpr-faq/"},
1324  {"name":"Walmart","policyUrl":"https://corporate.walmart.com/privacy-security/walmart-privacy-policy"},
1325  {"name":"WAP.CO.UK","policyUrl":"http://www.wap.co.uk/privacy.html"},
1326  {"name":"Wavenet","policyUrl":"https://www.wavenet.com.tw/privacy/"},
1327  {"name":"Waystack","policyUrl":"https://www.wayfair.com/customerservice/general_info.php#privacy"},
1328  {"name":"Webgains","policyUrl":"http://www.webgains.com/public/en/privacy/"},
1329  {"name":"Weborama","policyUrl":"https://weborama.com/e-privacy/"},
1330  {"name":"Whichit UK Ltd","policyUrl":"https://www.getwhichit.com/dataprotection"},
1331  {"name":"White Ops","policyUrl":"https://www.whiteops.com/privacy"},
1332  {"name":"Wider Planet","policyUrl":"http://info.jp.widerplanet.com/policy/privacy?lang=en"},
1333  {"name":"Widespace","policyUrl":"https://www.widespace.com/legal/privacy-policy-notice/"},
1334  {"name":"Wonderbly","policyUrl":"https://wonderbly.com/pages/privacy-policy"},
1335  {"name":"X-Social","policyUrl":"http://www.xsocialgroup.com/PrivacyPolicy.html"},
1336  {"name":"Yabbi","policyUrl":"http://dsp.yabbi.me/#popup-privacy"},
1337  {"name":"Yandex","policyUrl":"https://yandex.ru/legal/confidential/"},
1338  {"name":"YDigital Media","policyUrl":"http://ydigitalmedia.com/pt/privacy-policy"},
1339  {"name":"YieldMo","policyUrl":"https://www.yieldmo.com/privacy/"},
1340  {"name":"Yieldr","policyUrl":"https://www.yieldr.com/privacy/"},
1341  {"name":"YOOSE","policyUrl":"https://www.yoose.com/privacy-policy"},
1342  {"name":"YOptima","policyUrl":"http://www.yoptima.com/privacy-policy"},
1343  {"name":"YouGov","policyUrl":"https://yougov.co.uk/about/terms-combined/#/terms"},
1344  {"name":"Yusp","policyUrl":"http://www.yusp.com/yusp-privacy-policy/"},
1345  {"name":"Zanox","policyUrl":"https://www.awin.com/de/rechtliches/privacy-policy"},
1346  {"name":"Zebestof","policyUrl":"http://www.zebestof.com/en/about-us-2/privacy-en/"},
1347  {"name":"Zentrick","policyUrl":"http://www.zentrick.com/platform-privacy-policy"},
1348  {"name":"ZMS","policyUrl":"https://zms.zalando.com/#"},
1349  {"name":"Zucks","policyUrl":"http://zucks.co.jp/en/privacy/"},
1350  {"name":"Zuuvi","policyUrl":"http://zuuvi.com/en/privacy.php"},
1351  {"name":"ZypMedia","policyUrl":"http://www.zypmedia.com/privacy-policy"},
1352  {"name":"é¡¶æ–°","policyUrl":"http://www.360.cn/privacy/v3/bpsxy.html"},
1353]);
1354pgjs.gdpr.gvlPartners = pgjs.gdpr.gvlPartners || [];
1355
1356pgjs.addModal = function(id, contents) {
1357  var modalCss = '<style>.pg-modal-blackout {' +
1358      'position: fixed;' +
1359      'top: 0;' +
1360      'left: 0;' +
1361      'bottom: 0;' +
1362      'right: 0;' +
1363      'overflow: auto;' +
1364      'background-color: #000000;' +
1365      'background-color: rgba(0, 0, 0, 0.5);' +
1366      'z-index: 9999;' +
1367  '}' +
1368  '.pg-modal {' +
1369      'position: relative;' +
1370      'background-color: #FFFFFF;' +
1371      'width: 95% !important;' +
1372      'max-width: 440px;' +
1373      'margin: 10% auto;' +
1374      'color:#000;' +
1375      'padding: 20px 20px 10px 20px;' +
1376  '}' +
1377  '.pg-modal-close {' +
1378    'float:right;' +
1379    'background: #0077ae;' +
1380    'cursor:pointer;' +
1381    'display: block;' +
1382    'padding: 0 20px !important;' +
1383    'margin: 0;' +
1384    'border-radius: 5px;' +
1385    'color: #fff;' +
1386    'font-size: 16px !important;' +
1387    'line-height: 35px;' +
1388    'border: 2px solid #0077ae;' +
1389  '}' +
1390  '.pg-modal, .pg-modal > * {' +
1391    'font-family: Helvetica, Arial, sans-serif;' +
1392  '}' +
1393'</style>';
1394  var modalCssNode = document.getElementById('pg-modal-css');
1395  if (modalCssNode) {
1396    pgjs.log('css modal already loaded, removing', 'modal')
1397    modalCssNode.parentNode.removeChild(modalCssNode);
1398  }
1399  modalCssNode = document.createElement("div");
1400  modalCssNode.id = 'pg-modal-css';
1401  modalCssNode.innerHTML = modalCss;
1402  document.body.appendChild(modalCssNode);
1403  var modal = document.getElementById(id);
1404  if (modal) {
1405    pgjs.log('already loaded id[' + id + '], removing', 'modal')
1406    modal.parentNode.removeChild(modal);
1407  }
1408  var modal = document.createElement("div");
1409  modal.id = id;
1410  modal.classList.add("pg-modal-blackout");
1411  modal.innerHTML = '<div class="pg-modal">' + contents + '</div>';
1412  document.body.appendChild(modal);
1413  return modal;
1414};
1415
1416pgjs.gdpr.findDefaultPrivacyUrl = function() {
1417  var foundPolicy = false;
1418  var links = [];
1419  [].push.apply(links, document.getElementsByTagName("a"));
1420  for (var i = links.length; i >= 0; i--) { // start from the bottom of the page
1421    var a = links[i];
1422    if (a) {
1423      if (
1424        (a.innerHTML.toLowerCase() == 'privacy') ||
1425        (a.innerHTML.toLowerCase() == 'privacy policy') ||
1426        (a.getAttribute('href') == 'privacy')
1427      ) {
1428        foundPolicy = a.getAttribute('href');
1429        break;
1430      }
1431    }
1432  }
1433  if (foundPolicy) {
1434    pgjs.publisher.policyUrl = foundPolicy;
1435    var href = document.getElementById('pg-publisher-privacy-url');
1436    if (href) {
1437      href.setAttribute('href', foundPolicy);
1438      pgjs.log('found policy[' + foundPolicy + '] with text[' + a.innerHTML + '], replacing');
1439    } else {
1440      pgjs.log('found policy[' + foundPolicy + '] with text[' + a.innerHTML + '], but failed to find target, not replacing');
1441    }
1442  } else {
1443    pgjs.log('publisher policy not found');
1444  }
1445}
1446
1447pgjs.gdpr.requestGvl = function(force) {
1448  if (!pgjs.gdpr.gvlRequested || force) {
1449    pgjs.gdpr.gvlRequested = true;
1450    //    pgjs.gdpr.gvl = 'https://vendorlist.consensu.org/vendorlist.json';
1451//    pgjs.gdpr.gvl = 'https://cdn.pubguru.com/vendorlist.json';
1452    pgjs.gdpr.gvl = 'https://s3.amazonaws.com/cdn.pubguru.com/vendorlist.json';
1453    pgjs.log('requesting gvl[' + pgjs.gdpr.gvl + ']');
1454    pgjs.getJSON(pgjs.gdpr.gvl, function(err, data) {
1455      pgjs.log('gvl[' + pgjs.gdpr.gvl + '] retrieved');
1456      pgjs.gdpr.gvlPartners = data.vendors;
1457      pgjs.gdpr.gvlFeatures = data.features;
1458      pgjs.gdpr.gvlPurposes = data.purposes;
1459      pgjs.gdpr.tryGvlRender();
1460    });
1461  }
1462}
1463
1464pgjs.gdpr.requestConsentOnDomReady = function() {
1465  pgjs.gdpr.requestGvl();
1466  if ((document.readyState == "interactive") || (document.readyState == 'complete')) {
1467    if (pgjs.gdpr.geoIpOutsideEu) {
1468      pgjs.log('dom[' + document.readyState + '] is ready, geoIP outside EU, skipping', 'gdpr');
1469    } else {
1470      pgjs.log('dom[' + document.readyState + '] is ready, requesting consent immediately', 'gdpr');
1471      pgjs.gdpr.consentRequested = true;
1472      pgjs.gdpr.requestConsent();
1473      pgjs.gdpr.findDefaultPrivacyUrl();
1474    }
1475  } else {
1476    pgjs.log('dom[' + document.readyState + '] is not ready, requesting consent later', 'gdpr');
1477    document.addEventListener('readystatechange', function () {
1478      if ((document.readyState == "interactive") || (document.readyState == 'complete')) {
1479        if (pgjs.gdpr.consentRequested) {
1480          pgjs.log('dom[' + document.readyState + '] delayed, ready late, consent already requested', 'gdpr');
1481        } else if (pgjs.gdpr.geoIpOutsideEu) {
1482          pgjs.log('dom[' + document.readyState + '] delayed, geoIP outside EU, skipping', 'gdpr');
1483        } else {
1484          pgjs.log('dom[' + document.readyState + '] delayed, ready late, requesting consent now', 'gdpr');
1485          pgjs.gdpr.consentRequested = true;
1486          pgjs.gdpr.requestConsent();
1487          pgjs.gdpr.findDefaultPrivacyUrl();
1488        }
1489      }
1490    });
1491  }
1492}
1493
1494if (!!pgjs.gdpr.rejectCallback) { // publisher set the function, wrap it
1495  pgjs.gdpr.rejectCallbackPublisher = function() {new Function(pgjs.gdpr.rejectCallback.toString());}
1496}
1497pgjs.gdpr.rejectCallbackPublisher = pgjs.gdpr.rejectCallbackPublisher || function() {}
1498pgjs.gdpr.rejectCallback = function() {
1499  pgjs.gdprAnalytics.popup_status='popup_rejected';
1500  pgjs.gdpr.state = 'rejected';
1501  pgjs.log('user rejected gdpr consent, doing nothing with PG ads', 'gdpr');
1502  pgjs.addModal('gdpr-test', '<h1>GDPR Test</h1><p>Roadblock disabled, no ads loaded</p>');
1503  pgjs.gdpr.rejectCallbackPublisher();
1504};
1505
1506if (!!pgjs.gdpr.consentCallback) {
1507  pgjs.gdpr.consentCallbackPublisher = function() {new Function(pgjs.gdpr.consentCallback.toString());}
1508}
1509pgjs.gdpr.consentCallbackPublisher = pgjs.gdpr.consentCallbackPublisher || function() {};
1510pgjs.gdpr.consentCallback = function() {
1511  pgjs.gdpr.state = 'consented';
1512  pgjs.cookie('gdpr', 'consented', pgjs.gdpr.consentDuration);
1513  pgjs.gdpr.consentRecord = {
1514    'id' : pgjs.gdpr.getConsentId(),
1515    'consentTimestamp' : (new Date()).getTime(),
1516    'consentDomain' : window.location.hostname,
1517    'ttl' : (new Date()).getTime() + 60*60*24*1000*pgjs.gdpr.consentDuration,
1518    'features' : [],
1519    'purposes' : [],
1520    'partners' : [],
1521  };
1522  pgjs.gdpr.gvlFeatures.forEach(function(entry) {
1523    pgjs.gdpr.consentRecord.features.push(entry.id);
1524  });
1525  pgjs.gdpr.gvlPurposes.forEach(function(entry) {
1526    pgjs.gdpr.consentRecord.purposes.push(entry.id);
1527  });
1528  pgjs.gdpr.partners.forEach(function(partner) {
1529    pgjs.gdpr.consentRecord.partners.push(partner.name);
1530  });
1531  pgjs.gdpr.gvlPartners.forEach(function(partner) {
1532    pgjs.gdpr.consentRecord.partners.push(partner.name);
1533  });
1534  pgjs.log('consented with ID[' + pgjs.gdpr.getConsentId() + ']', 'gdpr');
1535  pgjs.log(pgjs.gdpr.consentRecord);
1536  try {
1537    localStorage.setItem('pg-dg-consent-id', pgjs.gdpr.consentId);
1538    localStorage.setItem('pg-dg-consent', JSON.stringify(pgjs.gdpr.consentRecord));
1539  } catch (e) {
1540    pgjs.log('localStorage not supported');
1541  };
1542  pgjs.gdprAnalytics.popup_status='popup_accepted';
1543//  pgjs.postObject('https://pcy03mwwee.execute-api.us-east-1.amazonaws.com/Beta/consent', pgjs.gdpr.consentRecord);
1544  pgjs.gdpr.consentCallbackPublisher();
1545  pgjs.publisherCookieWrapper();
1546  pgjs.postGdprConsent();
1547};
1548
1549pgjs.getPageLanguage = function() {
1550  if (pgjs.get('pg_page_language')) {
1551    return pgjs.get('pg_page_language');
1552  }
1553  if (document.documentElement.lang == 'es-ES') { return 'es'; }
1554  if (document.documentElement.lang == 'es') { return 'es'; }
1555  if (document.documentElement.lang == 'fr-FR') { return 'fr'; }
1556  if (document.documentElement.lang == 'fr') { return 'fr'; }
1557  return 'en';
1558}
1559
1560pgjs.gdpr.languageMap = {
1561  'en' : {
1562    'disclosure-learn-more' : 'Learn more.',
1563    'disclosure-continue' : 'Ok. Let\'s GO!',
1564    'disclosure-reject' : 'Reject',
1565    'disclosure-body' : 'It takes a lot of work to build, maintain, and improve a site like this and all the wonderful content you\'re about to enjoy.  We and third parties use tech like cookies to make this happen.  <br><br>By continuing, you consent to the use of these technologies, and affirm you\'re at least 16 years old or have consent from a parent or guardian.  ',
1566    'disclosure-title' : 'Trust and transparency is important to us.',
1567    'learn-more-partners' : 'Advertising and analytics that may load for you include the following companies:',
1568    'learn-more-features-purposes' : 'These technology partners intend to use analytics and behavioral data across sites and apps for the following features and purposes:',
1569    'learn-more-storage-duration' : 'Data can be stored up to ' + pgjs.gdpr.consentDuration + ' days. If you would like to have your data removed, please contact these companies. You can also modify your advertising personalization settings with <a href="https://adssettings.google.com/" target="_blank">Google</a> and <a href="http://optout.aboutads.info/?c=2#!/" target="_blank">AdChoices</a>.',
1570    'gvl-matching-offline' : 'Matching Data to Offline Sources: Combining data from offline sources that were initially collected in other contexts.',
1571    'gvl-linking-devices' : 'Linking Devices: Allow processing of a user\'s data to connect such user across multiple devices.',
1572    'gvl-geolocation' : 'Precise Geographic Location Data: Allow processing of a user\'s precise geographic location data in support of a purpose for which that certain third party has consent.',
1573    'gvl-info-storage' : 'Information storage and access: The storage of information, or access to information that is already stored, on your device such as advertising identifiers, device identifiers, cookies, and similar technologies.',
1574    'gvl-personalization' : 'Personalisation: The collection and processing of information about your use of this service to subsequently personalise advertising and/or content for you in other contexts, such as on other websites or apps, over time. Typically, the content of the site or app is used to make inferences about your interests, which inform future selection of advertising and/or content.',
1575    'gvl-ad-selection' : 'Ad selection, delivery, reporting: The collection of information, and combination with previously collected information, to select and deliver advertisements for you, and to measure the delivery and effectiveness of such advertisements. This includes using previously collected information about your interests to select ads, processing data about what advertisements were shown, how often they were shown, when and where they were shown, and whether you took any action related to the advertisement, including for example clicking an ad or making a purchase. This does not include personalisation, which is the collection and processing of information about your use of this service to subsequently personalise advertising and/or content for you in other contexts, such as websites or apps, over time.',
1576    'gvl-content-selection' : 'Content selection, delivery, reporting: The collection of information, and combination with previously collected information, to select and deliver content for you, and to measure the delivery and effectiveness of such content. This includes using previously collected information about your interests to select content, processing data about what content was shown, how often or how long it was shown, when and where it was shown, and whether the you took any action related to the content, including for example clicking on content. This does not include personalisation, which is the collection and processing of information about your use of this service to subsequently personalise content and/or advertising for you in other contexts, such as websites or apps, over time.',
1577    'gvl-measurement' : 'Measurement: The collection of information about your use of the content, and combination with previously collected information, used to measure, understand, and report on your usage of the service. This does not include personalisation, the collection of information about your use of this service to subsequently personalise content and/or advertising for you in other contexts, i.e. on other service, such as websites or apps, over time.',
1578  },
1579  'es' : {
1580    'disclosure-learn-more' : 'Más información',
1581    'disclosure-continue' : 'Acepto.',
1582    'disclosure-reject' : 'Rechazo',
1583    'disclosure-body' : 'Esta página utiliza cookies y tecnologías similares (en adelante "Cookies"). Algunas Cookies permiten analizar y medir las visitas y el tráfico de la página web, mientras otras son necesarias para acceder a la página. También se utilizan para mostrar publicidad relevante para los intereses de nuestros usuarios. Para aceptar el uso de Cookies en esta página web, pulse "Acepto".',
1584    'disclosure-title' : 'Attencion',
1585    'learn-more-partners' : 'La publicidad y analíticas que pueden aparecer en la página incluyen a las siguientes compañías.',
1586    'learn-more-features-purposes' : 'Estos terceros tratan de usar analíticas y datos de comportamiento a través de diferentes sitios y aplicaciones para los siguientes propósitos:',
1587    'learn-more-storage-duration' : 'Los datos pueden mantenerse hasta ' + pgjs.gdpr.consentDuration + ' días. Si quieres que tus datos sean eliminados, por favor, contacta con esas empresas. Puedes modificar tus opciones de publicidad con <a href="https://adssettings.google.com/" target="_blank">Google</a> y <a href="http://optout.aboutads.info/?c=2#!/" target="_blank">AdChoices</a>.',
1588    'gvl-matching-offline' : 'Comparar datos con fuentes sin conexión: Combinar datos de fuentes sin conexión que fueron recolectados inicialmente en otros contextos.',
1589    'gvl-linking-devices' : 'Conexión de dispositivos: Permitir que se procesen los datos de los usuarios para conectarlos a través de distintos dispositivos.',
1590    'gvl-geolocation' : 'Datos de localización geográfica precisos: Permitir que se procese la localización geográfica del usuario para apoyar algún propósito de terceros sobre el que tenga consentimiento previo.',
1591    'gvl-info-storage' : 'Almacenamiento de información y acceso: El almacenaje de información, o acceso a información que ya está almacenada, en tu dispositivo, como identificadores de publicidad, identificadores de dispositivos, cookies, y otras tecnologías similares.',
1592    'gvl-personalization' : 'Personalización: La recolección y procesamiento de la información de tu uso de este servicio para personalizar la publicidad y/o contenido  para el usuario en otros contextos, como otros sitios webs o aplicaciones. Típicamente el contenido del sitio o aplicación se usa para detectar tus intereses, y así ofrecer posteriormente el mejor contenido disponible.',
1593    'gvl-ad-selection' : 'Selección de anuncios, distribución, informes: La recolección de la información, y su combinación con otra previamente recogida, para seleccionar y distribuir anuncios para el usuario, y medir la efectividad de la distribución de estos anuncios publicitarios. Esto 
1593incluye el uso de información previamente recogida sobre tus intereses para seleccionar anuncios, procesar datos sobre qué anuncios ya fueron mostrados, con qué frecuencia se muestran, cuándo y dónde se mostraron, y si se realiza alguna acción sobre ese anuncio, incluyendo el hecho de hacer click o realizar una compra. Esto no incluye personalización, que es la recolección y procesamiento de la información sobre tu uso de este servicio para personalizar los anuncios o el contenido en otros contextos, como páginas web o aplicaciones.',
1594    'gvl-content-selection' : 'Selección de contenido, distribución, informes:  La recolección de la información, y su combinación con otra previamente recogida, para seleccionar y distribuir contenidos para el usuario, y medir la efectividad de la distribución de este contenido. Esto incluye el uso de información previamente recogida sobre tus intereses para seleccionar contenido, procesar datos sobre qué contenido ya fue mostrado, con qué frecuencia o tiempo se mostró, cuándo y dónde se mostraron, y si se realiza alguna acción sobre ese contenido, incluyendo el hecho de hacer click en el contenido. Esto no incluye personalización, que es la recolección y procesamiento de la información sobre tu uso de este servicio para personalizar los anuncios o el contenido en otros contextos, como páginas web o aplicaciones.',
1595    'gvl-measurement' : 'Mediciones: La recolección de información sobre tu uso del contenido, y la combinación con información previamente recogida, para medir, entender y analizar en tu uso del servicio. Esto no incluye personalización, que es la recolección y procesamiento de la información sobre tu uso de este servicio para personalizar los anuncios o el contenido en otros contextos, como páginas web o aplicaciones.',
1596  },
1597  'fr' : {
1598    'disclosure-learn-more' : 'En savoir plus.',
1599    'disclosure-continue' : 'Très bien. Allons-y!',
1600    'disclosure-reject' : 'Rejeter',
1601    'disclosure-body' : 'Concevoir, maintenir et améliorer un site comme celui-ci et tout le contenu dont vous allez profiter nécessite beaucoup de travail. Nous et des tiers utilisons des cookies technologiquement similaires pour que cela fonctionne. <br> <br> En continuant, vous acceptez l\'utilisation de ces technologies et déclarez être âgé d\'au moins 16 ans ou avoir le consentement d\'un parent ou d\'un tuteur légal.',
1602    'disclosure-title' : 'La confiance et la transparence sont très importantes pour nous.',
1603    'learn-more-partners' : 'Les annonces et analyses qui peuvent être disponibles pour vous incluent les sociétés suivantes.',
1604    'learn-more-features-purposes' : 'Ces partenaires technologiques tendent à faire usage de données analytiques et comportementales sur les sites et applications pour les fonctionnalités et aux fins suivantes :',
1605    'learn-more-storage-duration' : 'Les données peuvent être stockées jusqu’à ' + pgjs.gdpr.consentDuration + ' jours. Si vous souhaitez que vos données soient effacées, veuillez contacter ces sociétés. Vous pouvez également modifier vos paramètres de personnalisation de la publicité avec <a href="https://adssettings.google.com/" target="_blank">Google</a> et <a href="http://optout.aboutads.info/?c=2#!/" target="_blank">AdChoices</a>.',
1606    'gvl-matching-offline' : 'Comparaison des données avec des sources hors ligne : comparaison des données à des sources hors ligne collectées dans d’autres contextes.',
1607    'gvl-linking-devices' : 'Liaison des appareils : permet le traitement des données de l’utilisateur afin qu’il puisse se connecter sur plusieurs appareils.',
1608    'gvl-geolocation' : 'Données précises en matière de situation géographique : permet le traitement des données précises en matière de situation géographique d’un utilisateur afin d’appuyer une fin à laquelle un tiers donné a donné son consentement.',
1609    'gvl-info-storage' : 'Stockage et accès aux informations : le stockage des informations, ou l’accès aux informations déjà stockées, sur votre appareil comme les identificateurs publicitaires, les identificateurs d’appareil, les cookies, et les technologies similaires.',
1610    'gvl-personalization' : 'Personnalisation : la collecte et le traitement des informations sur votre utilisation de ce service pour personnaliser ensuite les publicités et/ou le contenu dans d’autres contextes, comme sur d’autres sites internet ou applications. Généralement, le contenu du site ou de l’application est utilisé pour faire des déductions sur vos centres d’intérêt, participant à la future sélection de publicités et/ou de contenu.',
1611    'gvl-ad-selection' : 'Sélection de publicités, prestation, signalement : la collecte d’informations, et l’association de celles-ci avec des informations collectées précédemment, pour sélectionner et vous fournir des publicités, et pour mesurer la prestation et l’efficacité de telles publicités. Cela inclut l’utilisation d’informations précédemment collectées sur vos centres d’intérêt pour sélectionner les publicités, le traitement des données sur les publicités qui vous ont été montrées, la fréquence, le moment et le lieu de ces affichages, et si vous avez effectué ou non une action en lien avec cette publicité, y compris par exemple le fait de cliquer sur l’annonce ou d’effectuer un achat. Cela n’inclut pas la personnalisation, qui est la collecte et le traitement des informations sur votre utilisation de ce service pour personnaliser ensuite les publicités et/ou le contenu dans d’autres contextes, comme sur des sites internet ou applications.',
1612    'gvl-content-selection' : 'Sélection du contenu, prestation, signalement : la collecte d’informations, et l’association de celles-ci avec des informations collectées précédemment, pour sélectionner et vous fournir du contenu, et pour mesurer la prestation et l’efficacité d’un tel contenu. Cela inclut l’utilisation d’informations précédemment collectées sur vos centres d’intérêt pour sélectionner le contenu, le traitement des données sur le contenu qui vous a été montré, la fréquence ou la durée, le moment et le lieu de ces affichages, et si vous avez effectué ou non une action en lien avec ce contenu, y compris par exemple le fait de cliquer sur le contenu. Cela n’inclut pas la personnalisation, qui est la collecte et le traitement des informations sur votre utilisation de ce service pour personnaliser ensuite le contenu et/ou les publicités dans d’autres contextes, comme sur des sites internet ou applications.',
1613    'gvl-measurement' : 'Évaluation : la collecte d’informations sur votre utilisation du contenu, et l’association de celles-ci à des informations précédemment collectées, utilisées pour évaluer, comprendre, et rendre compte de votre utilisation du service. Cela n’inclut pas la personnalisation, la collecte des informations sur votre utilisation de ce service pour personnaliser ensuite le contenu et/ou les publicités dans d’autres contextes, par ex. sur d’autres services, comme sur des sites internet ou applications.',
1614  },
1615}
1616
1617pgjs.gdpr.getMappedLanguage = function(key) {
1618  if (pgjs.gdpr.languageMap[pgjs.getPageLanguage()] && pgjs.gdpr.languageMap[pgjs.getPageLanguage()[key]] && (pgjs.gdpr.languageMap[pgjs.getPageLanguage()[key]] != '')) {
1619    return pgjs.gdpr.languageMap[pgjs.getPageLanguage()[key]];
1620  }
1621  if (pgjs.gdpr.languageMap[pgjs.getPageLanguage()] && pgjs.gdpr.languageMap[pgjs.getPageLanguage()][key] && (pgjs.gdpr.languageMap[pgjs.getPageLanguage()][key] != '')) {
1622    return pgjs.gdpr.languageMap[pgjs.getPageLanguage()][key];
1623  }
1624  pgjs.log('unset language map for key[' + key + '] in language[' + pgjs.getPageLanguage() + ']');
1625  return '';
1626}
1627
1628pgjs.gdpr.requestConsent = pgjs.gdpr.requestConsent || function() {
1629  pgjs.log('showing consent popup with language[' + pgjs.getPageLanguage() + ']', 'gdpr')
1630  pgjs.gdpr.requestGvl();
1631
1632  pgjs.gdpr.modal = pgjs.addModal('pg-gdpr',
1633    (pgjs.publisher.logo ? '<div style="text-align:center;"><img src="' + pgjs.publisher.logo + '" style="max-width:300px;max-height:100px;margin:0px auto 8px auto;"></div>' : '') +
1634    '<div style="font-size:14px;font-weight:bold;text-align:center;">' + (pgjs.gdpr.disclosureTitle || pgjs.gdpr.getMappedLanguage('disclosure-title')) + '</div>' +
1635    '<p style="font-size:12px;text-align: justify;">' +
1636      (pgjs.gdpr.disclosureBody || pgjs.gdpr.getMappedLanguage('disclosure-body')) +
1637      ' <span style="color:#666;font-size:12px;margin-top:5px;cursor:pointer;" id="pg-learn-more">' +
1638        (pgjs.gdpr.disclosureLearnMore || pgjs.gdpr.getMappedLanguage('disclosure-learn-more')) +
1639      '</span>' +
1640      '<div class="pg-modal-close" style="margin-left:20px;">' +
1641        (pgjs.gdpr.disclosureContinue || pgjs.gdpr.getMappedLanguage('disclosure-continue')) +
1642      '</div>' +
1643      (pgjs.gdpr.roadBlock ? '' : '<div style="float:left;color:#999;font-size:12px;margin-top:5px;cursor:pointer;" id="pg-reject">' + (pgjs.gdpr.disclosureReject || pgjs.gdpr.getMappedLanguage('disclosure-reject')) + '</div>') +
1644      '<div id="pg-partners" style="overflow:scroll;font-size:10px;display:none;"></div>' +
1645      '<div style="clear:both;"></div>' +
1646    '</p>');
1647  var learnMoreNode = document.getElementById("pg-learn-more");
1648  learnMoreNode.addEventListener("click", function() {
1649    learnMoreNode.style.display = 'none';
1650    var partnersNode = document.getElementById("pg-partners");
1651    partnersNode.style.border = '1px solid #DDD';
1652    partnersNode.style.padding = '10px';
1653    partnersNode.style.display = 'block';
1654    partnersNode.style.height = '150px';
1655    partnersNode.innerHTML = '<div style="margin-bottom:8px;">' + pgjs.gdpr.getMappedLanguage('learn-more-partners') + '</div>';
1656    pgjs.gdpr.partners.forEach(function(partner) {
1657      partnersNode.innerHTML += '<div><a href="' + (partner.policyUrl || partner.policy || partner.privacyPolicy) + '"' + (partner.isPublisher ? ' id="pg-publisher-privacy-url" ' : '') + ' target="_blank">' + partner.name + '</a></div>';
1658    });
1659    partnersNode.innerHTML += '<div id="pg-gvl-partners"></div>';
1660    partnersNode.innerHTML += '<div id="pg-gvl-features-purposes">' +
1661      '<div style="margin-top:3px;"><p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('learn-more-features-purposes') + '</p>' +
1662      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-matching-offline') + '</p>' +
1663      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-linking-devices') + '</p>' +
1664      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-geolocation') + '</p>' +
1665      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-info-storage') + '</p>' +
1666      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-personalization') + '</p>' +
1667      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-ad-selection') + '</p>' +
1668      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-content-selection') + '</p>' +
1669      '<p style="font-size:11px;">' + pgjs.gdpr.getMappedLanguage('gvl-measurement') + '</p>' +
1670    '</div>' +
1671    '<div style="margin-top:8px;font-size:11px;">' + pgjs.gdpr.getMappedLanguage('learn-more-storage-duration') + '</div>';
1672    pgjs.gdpr.tryGvlRender();
1673  });
1674  var rejectNode = document.getElementById('pg-reject');
1675  if (rejectNode) {
1676    var gdprNode = document.getElementById('pg-gdpr');
1677    rejectNode.addEventListener("click", function() {
1678      gdprNode.parentNode.removeChild(modal);
1679    });
1680  }
1681  var closeNode = document.querySelector(".pg-modal-close");
1682  closeNode.addEventListener("click", function() {
1683    pgjs.log('popup closed', 'gdpr');
1684    pgjs.gdpr.modal.parentNode.removeChild(pgjs.gdpr.modal);
1685    pgjs.gdpr.consentCallback();
1686  });
1687  if (pgjs.publisher.policyUrldefaulted) {
1688    pgjs.gdpr.findDefaultPrivacyUrl();
1689  }
1690};
1691
1692pgjs.publisherCookieWrapper = // pubs are massively messing up this override... pull any of them we can ...
1693  pgjs.gdpr.publisherCookieWrapper ||
1694  pgjs.gdpr.publisherCookieWrap ||
1695  pgjs.gdpr.publisherAnalytics ||
1696  pgjs.publisherCookieWrapper ||
1697  pgjs.publisherCookieWrap ||
1698  pgjs.publisherAnalytics ||
1699  function() { pgjs.log('publisher did not override pgjs.publisherCookieWrapper', 'gdpr'); };
1700
1701pgjs.uuid4 = function() {
1702  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
1703    var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
1704    return v.toString(16);
1705  });
1706}
1707pgjs.gdpr.tryGvlRender = function() {
1708  if (pgjs.gdpr.gvlRendered) {
1709    pgjs.log('gvl data already rendered');
1710  } else {
1711    var partnersNode = document.getElementById('pg-gvl-partners');
1712    var featuresPurposesNode = document.getElementById('pg-gvl-features-purposes');
1713    if (partnersNode && featuresPurposesNode) {
1714      pgjs.log('gvl data not already rendered, rendering');
1715      pgjs.gdpr.gvlRendered = true;
1716      pgjs.gdpr.gvlPartners.forEach(function(partner) {
1717        partnersNode.innerHTML += '<div style="margin:0px;padding:0px;"><a href="' + partner.policyUrl + '" target="_blank">' + partner.name + '</a></div>';
1718      });
1719    } else {
1720      pgjs.log('gvl data not already rendered, but divs aren\'t ready, not rendering');
1721    }
1722  }
1723}
1724
1725pgjs.gdpr.getConsentId = function() {
1726  if (pgjs.gdpr.getStatus() != 'consented') {
1727    return false;
1728  }
1729  if (pgjs.cookie('consentId'))
1730    return pgjs.cookie('consentId');
1731  pgjs.gdpr.consentId = pgjs.uuid4();
1732  pgjs.cookie('consentId', pgjs.gdpr.consentId, pgjs.gdpr.consentDuration);
1733  return pgjs.gdpr.consentId;
1734}
1735
1736pgjs.geolocate = function() {
1737  if (!pgjs.geo) {
1738    pgjs.geo = {};
1739    if (!pgjs.geoRequested) {
1740      pgjs.geoRequested = true;
1741      pgjs.getJSON('https://analytics2.m2.ai/ml?device=' + pgjs.getDeviceType() + '&publisher=' + pgjs.publisher.getDfpNetworkCode(), function(err, data) {
1742        if (err) {
1743          pgjs.log('error fetching geo data')
1744        } else {
1745          pgjs.log('geo ip endpoint returning result');
1746          pgjs.log(data);
1747          pgjs.geo = data;
1748        }
1749      });
1750    }
1751  }
1752  return pgjs.geo;
1753}
1754
1755pgjs.sendDynamoPacket = function(){
1756  try {
1757      pgjs.gdprAnalytics.id = pgjs.uuid4();
1758      pgjs.gdprAnalytics.domain_name = pgjs.getPublisherDomain2();
1759      pgjs.gdprAnalytics.timestamp = new Date().toISOString().split('T')[0]; // ISO without time
1760      pgjs.gdprAnalytics.design = pgjs.gdpr.design;
1761
1762      var gdprAnalyticsUrl = "https://irmqzlj2e9.execute-api.us-east-1.amazonaws.com/Beta/gdpranalytics";
1763      var gdprPostRequest = new XMLHttpRequest();
1764      gdprPostRequest.open('POST', gdprAnalyticsUrl, true);
1765      gdprPostRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
1766      gdprPostRequest.send(JSON.stringify(pgjs.gdprAnalytics));
1767      pgjs.log('success sending GDPR analytics data!','gdprAnalytics');
1768      } catch (e) {
1769        pgjs.log('failed to send gdpr analytics data with error[' + e.message + ']', 'gdprAnalytics');
1770    }
1771}
1772
1773pgjs.gdpr.getStatus = function(state) {
1774  if (pgjs.cookie('gdpr') && (pgjs.cookie('gdpr') != '')) { return pgjs.cookie('gdpr'); }
1775  if (!!pgjs.gdpr.state) { return pgjs.gdpr.state; }
1776  if (!pgjs.geo && !pgjs.geoRequested) {
1777    pgjs.geoRequested = true;
1778  }
1779  // Gdpr state isn't set, so use fast checks.
1780  try {
1781    var utcOffset = Number(new Date().toString().match(/([-\+][0-9]+)\s/)[1]);
1782    if ((utcOffset < 0) || (utcOffset > 400)) {
1783      pgjs.gdpr.state = 'not-eu'; // do not set the cookie
1784      return pgjs.gdpr.state;
1785    }
1786  } catch (e) {
1787    pgjs.log('failed to fast check timezone with error[' + e.message + ']', 'gdpr');
1788  }
1789  try {
1790    var euLanguages = [
1791      'de-at', // german austrian - Austria
1792      'nl-be', // dutch belgian - Belgium
1793      'fr-be', // french belgian - Belgium
1794      'bg', // Bulgaria
1795      'hr', // Croatia
1796      // Republic of Cyprus - speaks turkish/greek
1797      'cs', // Czech Republic
1798      'da', // Denmark
1799      'et', // Estonia
1800      'fi', // Finland
1801      'fr', // french standard - France
1802      'fr-fr', // french french - France
1803      'de', // Germany
1804      'de-de', // Germany
1805      'el', // Greece
1806      'hu', // Hungary
1807      'ga', // Ireland
1808      'gd-ie', // gaelic irish - Ireland
1809      'it', // Italy
1810      'lv', // Latvia
1811      'lt', // Lithuania
1812      'fr-lu', // french lux - Luxembourg
1813      'de-lu', // german lux - Luxembourg
1814      'lb', // Luxembourg
1815      'mt', // Malta
1816      'nl', // Netherlands
1817      'pl', // Poland
1818      'pt', // Portugal
1819      'rm', // rhaeto romanic - Romania
1820      'ro', // Romania
1821      'sk', // Slovakia
1822      'sl', // Slovenia
1823      'es', // Spain
1824      'es-es', // Spain
1825      'sv', // Sweden
1826      'sv-fi', // Sweden
1827      'sv-sv', // Sweden
1828      'en-ie', // english ireland - UK
1829      'en-gb', // english british - UK
1830    ];
1831    if (euLanguages.indexOf(navigator.language) >= 0) {
1832      pgjs.log('confirmed EU by timezone[' + utcOffset + '] and browser language[' + navigator.language + ']', 'gdpr');
1833      // cannot set cookie without consent
1834      pgjs.gdpr.state = 'eu-no-consent';
1835      return pgjs.gdpr.state;
1836    }
1837  } catch (e) {
1838    pgjs.log('failed to fast check language with error[' + e.message + ']');
1839  }
1840
1841  if (pgjs.geolocate().country) {
1842    var countries = [
1843      'GR', // Greece
1844      'IS', // Iceland
1845      'LI', // Liechtenstein
1846      'NO', // Norway
1847      'CY', // Cyprus
1848      'AT', // Austria
1849      'BE', // Belgium
1850      'BG', // Bulgaria
1851      'CZ', // Czechia
1852      'DE', // Germany
1853      'DK', // Denmark
1854      'EE', // Estonia
1855      'ES', // Spain
1856      'FI', // Finland
1857      'FR', // France
1858      'GB', // United Kingdom
1859      'HR', // Croatia
1860      'HU', // Hungary
1861      'IE', // Ireland
1862      'IT', // Italy
1863      'LT', // Republic of Lithuania
1864      'LU', // Luxembourg
1865      'LV', // Latvia
1866      'MT', // Malta
1867      'NL', // Netherlands
1868      'PL', // Poland
1869      'PT', // Portugal
1870      'RO', // Romania
1871      'SE', // Sweden
1872      'SI', // Slovenia
1873      'SK', // Slovakia
1874    ];
1875    if (countries.indexOf(pgjs.geolocate().country) >= 0) {
1876      pgjs.log('confirmed EU by geo[' + pgjs.geolocate().country + ']', 'gdpr');
1877      // cannot set cookie without consent
1878      pgjs.gdpr.state = 'eu-no-consent';
1879      return pgjs.gdpr.state;
1880    } else {
1881      pgjs.cookie('gdpr', 'not-eu', 7);
1882      pgjs.log('confirmed EU by geo[' + pgjs.geolocate().country + ']', 'gdpr');
1883      pgjs.gdpr.state = 'not-eu';
1884      return pgjs.gdpr.state;
1885    }
1886  }
1887
1888  return 'unset';
1889}
1890//
1891// window._cmp = function(command, parameter, callback) {
1892//   if (command == 'getVendorConsents') {
1893//     pgjs.gdpr.iabGetVendorConsents(parameter, callback);
1894//   } else if (command == 'getConsentData') {
1895//     pgjs.gdpr.iabGetConsentData(parameter, callback);
1896//   } else if (command == 'ping') {
1897//     pgjs.gdpr.iabPing(parameter, callback);
1898//   } else if (command == 'getPublisherConsents') {
1899//     pgjs.gdpr.iabGetPublisherConsents(parameter, callback);
1900//   } else if (command == 'getVendorList') {
1901//     pgjs.gdpr.iabGetVendorList(parameter, callback);
1902//   } else {
1903//     console.warn('unsupported _cmp call provided, command[' + command + '] parameter[' + ']')
1904//   }
1905// }
1906
1907var dec2hex = [];
1908for (var i = 0; i <= 15; i++) {
1909  dec2hex[i] = i.toString(16);
1910}
1911
1912pgjs.uuid = function () {
1913  var uuid = '';
1914  for (var i = 1; i <= 36; i++) {
1915    if (i === 9 || i === 14 || i === 19 || i === 24) {
1916      uuid += '-';
1917    } else if (i === 15) {
1918      uuid += 4;
1919    } else if (i === 20) {
1920      uuid += dec2hex[(Math.random() * 4 | 0 + 8)];
1921    } else {
1922      uuid += dec2hex[(Math.random() * 15 | 0)];
1923    }
1924  }
1925  return uuid;
1926};
1927
1928pgjs.getSessionId = function() {
1929  if (typeof pgjs.sessionId === 'undefined') {
1930    if (pgjs.cookie('m2session')) {
1931      pgjs.sessionId = pgjs.cookie('m2session');
1932    } else {
1933      pgjs.sessionId = pgjs.uuid();
1934      pgjs.cookie('m2session', pgjs.sessionId, 30);
1935    }
1936  }
1937  return pgjs.sessionId;
1938}
1939
1940//Domain name
1941pgjs.getPublisherDomain = function () {
1942  var host_name = window.location.hostname.split(".");
1943  var publisher = host_name.length == 2 ? host_name[0] : host_name[1];
1944  return publisher;
1945};
1946
1947//Fetch User Email if exists
1948pgjs.getUserEmail = function () {
1949  var email = 'na'
1950  if (pgjs.get('email')) {
1951    email = pgjs.get('email');
1952    pgjs.cookie('email', email, 1);
1953  } else if(pgjs.cookie('email')) {
1954    email = pgjs.cookie('email');
1955  }
1956  return email;
1957};
1958
1959//Encode packet data | array
1960pgjs.getEncodedData = function (packets) {
1961  var base64Records = [];
1962  var total_packets = packets.length;
1963  for (var i = 0; i < total_packets; i++) {
1964    var singleRecord = {};
1965    var singleRecordString = "\n" + JSON.stringify(packets[i]) + "\n";
1966    singleRecord.Data = btoa(singleRecordString) || '';
1967    base64Records.push(singleRecord);
1968  }
1969  return base64Records;
1970};
1971
1972//Send given packets | Use async = false for unload/onunload events
1973pgjs.sendPacketData = function (packets, async) {
1974  try {
1975    var finalPacket = {};
1976    finalPacket.DeliveryStreamName = "bot_detection";
1977    finalPacket.Records = pgjs.getEncodedData(packets);
1978    var url = 'https://nhue03js3i.execute-api.us-east-1.amazonaws.com/Beta/request_packets';
1979    var xhr = new XMLHttpRequest();
1980    xhr.open('POST', url, async);
1981    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
1982    var myJSON = JSON.stringify(finalPacket);
1983    xhr.send(myJSON);
1984  } catch (e) {
1985    m2hb.log("Error sending request data","TrafficCop")
1986    return;
1987  }
1988};
1989
1990pgjs.log('pgjs library loaded');
1991
1992pgjs.log('defaulting publisher settings');
1993if (typeof pgjs.publisher.trackUTMs == 'undefined') { pgjs.publisher.trackUTMs = true; }
1994if (typeof pgjs.publisher.trackURI == 'undefined') { pgjs.publisher.trackURI = true; }
1995if (typeof pgjs.publisher.utms == 'undefined') { pgjs.publisher.utms = []; }
1996if (typeof pgjs.publisher.adUnits == 'undefined') { pgjs.publisher.adUnits = []; }
1997if (typeof pgjs.publisher.adBlockToGaSampling == 'undefined') { pgjs.publisher.adBlockToGaSampling = 0; }
1998if (isNaN(pgjs.publisher.adBlockToGaSampling)) {
1999  pgjs.log('adBlockToGaSampling[' + pgjs.publisher.adBlockToGaSampling + '] is not a number, defaulting to zero');
2000  pgjs.publisher.adBlockToGaSampling = 0;
2001} else {
2002  pgjs.publisher.adBlockToGaSampling = Number(pgjs.publisher.adBlockToGaSampling);
2003}
2004
2005//Create event packets
2006pgjs.createEventPacket = function(data, event_type, timestamp) {
2007  var eventPacket = {
2008    'mm2_cookieA': pgjs.getSessionId(),
2009    'mm2_cookieB': pgjs.cookie('mm2_cookieB') || '',
2010    'packet_type': 'event_packet',
2011    'event_type': event_type,
2012    'publisher': pgjs.getPublisherDomain(),
2013    'timestamp': timestamp || ''
2014  };
2015  eventPacket.data = data;
2016  pgjs.trafficEvents.addPacket(eventPacket);
2017}
2018
2019//Modified cookie logic to store cookie only for 5 hours and send ip_packet as soon as it arrives
2020pgjs.setGeoMlcookie = function () {
2021  var ip_address = pgjs.cookie('ip_address');
2022  var country = pgjs.cookie('country');
2023  if (!ip_address && !country) {
2024    pgjs.getJSON('https://analytics2.m2.ai/ml?device=' + pgjs.getDeviceType() + '&publisher=' + pgjs.getPublisherDomain(),
2025      function (err, data) {
2026        if (err) {
2027          console.log('Error while fetching IP address');
2028        } else {
2029          pgjs.cookie('country', data.country, 0.2);
2030          pgjs.cookie('region', data.region, 0.2);
2031          pgjs.cookie('ip_address', data.ip, 0.2);
2032          var ipData = {
2033           'country': data.country || 'na',
2034           'region': data.region || 'na',
2035           'ip_address': data.ip || 'na'
2036        };
2037        pgjs.createEventPacket(ipData, 'ip_packet', pgjs.startTime);
2038      }
2039    });
2040  }
2041};
2042
2043if (pgjs.getPublisherDomain() === "famefocus" && !!window.forensiq_browser){
2044pgjs.setGeoMlcookie();
2045}
2046
2047//Adding handlers to document body + ad-unit
2048pgjs.initTrafficCopListners = function () {
2049  window.addEventListener('mousemove', pgjs.mouseMoveHandler, false);
2050  window.addEventListener('click', pgjs.mouseClickHandler, false);
2051  window.addEventListener('dblclick', pgjs.mouseDoubleClick, false);
2052  document.body.addEventListener('keypress', pgjs.keyPressHandler, false);
2053  window.addEventListener('scroll', pgjs.onScrollHandler, false);
2054  window.addEventListener('resize', pgjs.onResizeHandler);
2055  document.body.addEventListener('touchstart', pgjs.touchEvent1, false);
2056  document.body.addEventListener('touchmove', pgjs.touchEvent2, false);
2057  //Event packets sent ->  Every 2 sec for 10sec.
2058  pgjs.trafficEvents.setEventInterval(window.setInterval(pgjs.sendEventPacket, 2000));
2059  setInterval( function () { if (pgjs.scrollTracked) {
2060      pgjs.scrollTracked = false;
2061    }
2062  }, 200);
2063  setInterval( function () { if (pgjs.touchTracked) {
2064      pgjs.touchTracked = false;
2065    }
2066  }, 200);
2067  setInterval( function () { if (pgjs.mouseTracked) {
2068      pgjs.mouseTracked = false;
2069    }
2070  }, 200);
2071  window.onbeforeunload = function () { pgjs.onUnloadHandler(); };
2072  window.onunload = function () { pgjs.onUnloadHandler(); };
2073}
2074
2075//Send request data
2076pgjs.sendRequestData = function () {
2077  var mm2_cookieB = pgjs.cookie('mm2_cookieB');
2078  if (!mm2_cookieB && mm2_cookieB !== '') {
2079    mm2_cookieB = 1;
2080  } else {
2081    var parsedCount = parseInt(mm2_cookieB, 10);
2082    if (isNaN(parsedCount)) {
2083      parsedCount = 0;
2084    }
2085    mm2_cookieB = parsedCount + 1;
2086  }
2087  pgjs.cookie('mm2_cookieB', mm2_cookieB, 1);
2088
2089  //fetching gpu details
2090  var debugInfo = '';
2091  var gl=null;
2092  try{
2093    var canvas = document.createElement('canvas');
2094    gl = canvas.getContext('webgl');
2095    if (gl) {
2096      debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
2097    }
2098  } catch(error){
2099   debugInfo =  'na'
2100  }
2101
2102  //Browser Performance data
2103  var performance = window.performance || window.mozPerformance || window.msPerformance || window.webkitPerformance || {};
2104  var bom_performance_count = '';
2105  if (!!performance) {
2106    bom_performance_count = performance.length;
2107  }
2108
2109  var total_mime_types = navigator.mimeTypes.length || 0;
2110  var mime_type_set = [];
2111  for (var i = 0; i < total_mime_types; i++) {
2112    mime_type_set.push(navigator.mimeTypes[i].type);
2113  }
2114
2115  var plugin_count = navigator.plugins.length || 0;
2116  var installed_plugins = [];
2117  for (var z = 0; z < plugin_count; z++) {
2118    installed_plugins.push(navigator.plugins[z].name);
2119  }
2120
2121  // Fetching forensiq params and adding to request packet
2122  var fqa = (typeof fqa === 'undefined') ? 'na' : fqa;
2123  var fqp = (typeof fqp === 'undefined') ? 'na' : fqp;
2124  var fqcmp = (typeof fqcmp === 'undefined') ? 'na' : fqcmp;
2125
2126  var requestPacket = {
2127    'mm2_cookieA': pgjs.getSessionId(),
2128    'mm2_cookieB': mm2_cookieB || '',
2129    'packet_type': 'request_packet',
2130    'event_type': 'request',
2131    'publisher': pgjs.getPublisherDomain() || 'na',
2132    'timestamp': pgjs.startTime || ''
2133  };
2134  var data = {
2135    'mtq' : window.mtq ? window.mtq :'na',  //forensiq data
2136    'ftq' : window.forensiq_browser ? window.forensiq_browser :'na',
2137    'fqa' : fqa,
2138    'fqp' : fqp,
2139    'fqcmp' : fqcmp,
2140    'email': pgjs.getUserEmail(),
2141    'ip_address': pgjs.cookie('ip_address') || '',
2142    'country': pgjs.cookie('country') || '',
2143    'region': pgjs.cookie('region') || '',
2144    'width': window.screen.width || '',
2145    'height': window.screen.height || '',
2146    'available_width': window.screen.availWidth || '',
2147    'available_height': window.screen.availHeight || '',
2148    'current_url': window.location.href || '',
2149    'referrer': document.referrer || '',
2150    'web_port': window.location.port || '',
2151    'language': window.navigator.language || '',
2152    'color_depth': screen.colorDepth || '',
2153    'cpu_cores': window.navigator.hardwareConcurrency || '',
2154    'ram_size': window.navigator.deviceMemory || '',
2155    'history_count': window.history.length || '',
2156    'cookies_enabled': window.navigator.cookieEnabled ? true : false,
2157    'platform': window.navigator.platform || '',
2158    'gd_vendor': (debugInfo && gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)) || '',
2159    'gd_renderer': (debugInfo && gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)) || '',
2160    'gl_renderer': (gl && gl.getParameter(gl.RENDERER)) || '',
2161    'gl_vendor': (gl && gl.getParameter(gl.VENDOR)) || '',
2162    'user_agent': navigator.userAgent || navigator.vendor || window.opera || '',
2163    'bom_performance_count': bom_performance_count,
2164    'all_mime_types': mime_type_set.join() || '',
2165    'installed_plugins': installed_plugins.join() || '',
2166  };
2167  requestPacket.data = data;
2168  pgjs.trafficEvents.addPacket(requestPacket);
2169  pgjs.sendPacketData(pgjs.trafficEvents.getPackets(), true);
2170  pgjs.trafficEvents.cleanEventData();
2171};
2172
2173pgjs.postGdprConsent = function() {
2174  pgjs.log('checking whether to run adblock detection');
2175  if ((pgjs.getPublisher().adBlockToGaSampling > Math.floor(Math.random() * 100)) && pgjs.getGoogleAnalyticsVersion()) {
2176    if (pgjs.visitorHasAdBlock()) {
2177      pgjs.log('adblock is enabled');
2178      var action = 'adblocked';
2179    } else {
2180      pgjs.log('adblock is disabled');
2181      var action = 'not adblocked';
2182    }
2183    if (pgjs.getGoogleAnalyticsVersion == 'ga') {
2184      ga('send', 'event', CONST_ADBLOCK_CATEGORY, action, window.location.pathname);
2185    } else if (pgjs.getGoogleAnalyticsVersion == 'trackEvent') {
2186      trackEvent(CONST_ADBLOCK_CATEGORY, action, window.location.pathname);
2187    } else if (pgjs.getGoogleAnalyticsVersion == 'gaq') {
2188      _gaq.push(['_trackEvent', CONST_ADBLOCK_CATEGORY, action, window.location.pathname]);
2189    }
2190  }
2191  if (pgjs.hb) {
2192    pgjs.loadJS(pgjs.hb);
2193  }
2194  if(typeof pgjs.gdprAnalytics.postGdprData === 'undefined') {
2195    pgjs.gdprAnalytics.postGdprData = (Math.floor(Math.random() * 1000) == 1);
2196  };
2197  if(pgjs.gdprAnalytics.postGdprData) {
2198    pgjs.gdprAnalytics.ttl = pgjs.gdprAnalytics.ttl || Math.floor((Date.now() / 1000 + 60 * 60 * 24 * 3));
2199    pgjs.sendDynamoPacket();
2200  };
2201   //Send request data and add listners only for famefocus
2202  if (pgjs.getPublisherDomain() === "famefocus" && !!window.forensiq_browser){
2203    window.pgjs.sendRequestData();
2204    window.addEventListener("load", pgjs.initTrafficCopListners);
2205    pgjs.log("Request data sent and listners added","TraffiCop")
2206  }
2207}
2208
2209pgjs.log('checking gdpr status[' + pgjs.gdpr.getStatus() + ']');
2210if (typeof ezConsentCategories == 'object' && typeof __ezconsent == 'object') {
2211  pgjs.log('ignoring gpdr and pghb because we found the ezoic CMP', 'gdpr');
2212} else if (pgjs.get('pg_gdpr') == 'reset-cookies') {
2213  pgjs.log('resetting cookies', 'gdpr');
2214  pgjs.deleteCookie('gdpr');
2215  pgjs.deleteCookie('consentId');
2216  pgjs.log('redirecting');
2217  window.location.assign(window.location.href.replace('?pg_gdpr=reset-cookie
2217s', '?').replace('&pg_gdpr=reset-cookies', '&'));
2218} else if (pgjs.get('pg_gdpr') == 'popup') {
2219  pgjs.log('forcing popup', 'gdpr');
2220  pgjs.gdpr.requestConsentOnDomReady();
2221} else if ((pgjs.gdpr.getStatus() == 'not-eu') && (pgjs.get('pg_gdpr') != 'emulate-eu')) {
2222  pgjs.log('user is outside europe, skipping popup', 'gdpr');
2223  pgjs.gdprAnalytics.popup_status ='suppressed_not_eu';
2224  pgjs.publisherCookieWrapper();
2225  pgjs.postGdprConsent();
2226} else if (pgjs.gdpr.getStatus() == 'consented') {
2227  pgjs.log('user has consented, skipping popup', 'gdpr');
2228  pgjs.gdprAnalytics.popup_status ='suppressed_consented';
2229  pgjs.publisherCookieWrapper();
2230  pgjs.postGdprConsent();
2231} else {
2232  // Posting GDPR data on every 1k pageviews
2233  pgjs.gdprAnalytics.postGdprData = (Math.floor(Math.random() * 1000) == 1);
2234  if(pgjs.gdprAnalytics.postGdprData) {
2235    pgjs.gdprAnalytics.popup_status ='popup_shown';
2236    pgjs.gdprAnalytics.ttl = Math.floor((Date.now() / 1000 + 60 * 60 * 24 * 3));
2237    pgjs.sendDynamoPacket();
2238  };
2239  pgjs.gdpr.requestConsentOnDomReady();
2240};
2241
2242//Handle mouse move event
2243pgjs.mouseMoveHandler = function(event) {
2244  if (!pgjs.mouseTracked) {
2245    return;
2246  }
2247  pgjs.mouseTracked = false;
2248  pgjs.trafficEvents.incrementMouseCounter();
2249  pgjs.trafficEvents.setMouseX(event.clientX || event.offsetX || '');
2250  pgjs.trafficEvents.setMouseY(event.clientY || event.offsetY || '');
2251
2252  // if (pgjs.trafficEvents.getMouseCounter() > pgjs.trafficEvents.getMaxAllowedPackets()) {
2253  //   return;
2254  // }
2255
2256  if (Math.abs(pgjs.trafficEvents.getMouseX() - pgjs.trafficEvents.getPrevMouseX()) > 25 || Math.abs(pgjs.trafficEvents.getMouseY() -
2257    pgjs.trafficEvents.getPrevMouseY()) > 25) {
2258    var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2259    var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2260    var timestamp = new Date().getTime();
2261    var data = {
2262      'mouseX': pgjs.trafficEvents.getMouseX() || '',
2263      'mouseY': pgjs.trafficEvents.getMouseY() || '',
2264      'scrollX': scrollX,
2265      'scrollY': scrollY
2266    };
2267    pgjs.createEventPacket(data, 'mouse_move', timestamp);
2268  }
2269  pgjs.trafficEvents.setPrevMouseY(pgjs.trafficEvents.getMouseY());
2270  pgjs.trafficEvents.setPrevMouseX(pgjs.trafficEvents.getMouseX());
2271}
2272
2273//handle mouse click event
2274pgjs.mouseClickHandler = function (event) {
2275  // if (pgjs.trafficEvents.getMouseCounter2() > pgjs.trafficEvents.getMaxAllowedPackets2()) {
2276  //   return;
2277  // }
2278  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2279  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2280  pgjs.trafficEvents.setMouseX(event.clientX || event.offsetX || '');
2281  pgjs.trafficEvents.setMouseY(event.clientY || event.offsetY || '');
2282  var timestamp = new Date().getTime();
2283  var data = {
2284    'node_clicked': event.target.nodeName || '',
2285    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2286    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2287    'scrollX': scrollX,
2288    'scrollY': scrollY
2289  };
2290  pgjs.createEventPacket(data, 'mouse_click', timestamp);
2291}
2292
2293//handle mouse double click event
2294pgjs.mouseDoubleClick = function (event) {
2295  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2296  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2297  pgjs.trafficEvents.setMouseX(event.clientX || event.offsetX || '');
2298  pgjs.trafficEvents.setMouseY(event.clientY || event.offsetY || '');
2299  var timestamp = new Date().getTime();
2300  var data = {
2301    'node_clicked': event.target.nodeName || '',
2302    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2303    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2304    'scrollX': scrollX,
2305    'scrollY': scrollY
2306  };
2307  pgjs.createEventPacket(data, 'mouse_dbl_click', timestamp);
2308}
2309
2310//Keypress event handler
2311pgjs.keyPressHandler = function (event) {
2312  //Limit down total resize packets
2313  // if (pgjs.trafficEvents.getKeypressCounter() > (pgjs.trafficEvents.getMaxAllowedPackets2())) {
2314  //   return;
2315  // }
2316  pgjs.trafficEvents.incrementKeypressCounter();
2317
2318  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2319  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2320  var timestamp = new Date().getTime();
2321  var data = {
2322    'keypressed': event.key || '',
2323    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2324    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2325    'scrollX': scrollX,
2326    'scrollY': scrollY
2327  };
2328  pgjs.createEventPacket(data, 'keypress', timestamp);
2329}
2330
2331//Scroll event on page
2332pgjs.onScrollHandler = function (event) {
2333  // if (pgjs.trafficEvents.getScrollCounter() > pgjs.trafficEvents.getMaxAllowedPackets2()) {
2334  //   return;
2335  // }
2336  pgjs.trafficEvents.incrementScrollCounter();
2337  if (!pgjs.scrollTracked) {
2338    pgjs.scrollTracked = true;
2339    var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2340    var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2341    var timestamp = new Date().getTime();
2342    var data = {
2343      'mouseX': pgjs.trafficEvents.getMouseX() || '',
2344      'mouseY': pgjs.trafficEvents.getMouseY() || '',
2345      'scrollX': scrollX,
2346      'scrollY': scrollY
2347    };
2348    pgjs.createEventPacket(data, 'scroll', timestamp);
2349  }
2350}
2351
2352pgjs.onResizeHandler = function (event) {
2353  // if (pgjs.trafficEvents.getResizeCounter() > pgjs.trafficEvents.getMaxAllowedPackets2()) {
2354  //   return;
2355  // }
2356  pgjs.trafficEvents.incrementResizeCounter();
2357
2358  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2359  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2360  var timestamp = new Date().getTime();
2361  var data = {
2362    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2363    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2364    'scrollX': scrollX,
2365    'scrollY': scrollY
2366  };
2367  pgjs.createEventPacket(data, 'screen_resize', timestamp);
2368}
2369
2370pgjs.touchEvent1 = function (event) {
2371  // if (pgjs.trafficEvents.getTouchCounter1() > pgjs.trafficEvents.getMaxAllowedPackets2()) {
2372  //   return;
2373  // }
2374  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2375  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2376  var timestamp = new Date().getTime();
2377  var data = {
2378    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2379    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2380    'scrollX': scrollX,
2381    'scrollY': scrollY
2382  };
2383  pgjs.createEventPacket(data, 'touch_event', timestamp);
2384}
2385
2386pgjs.touchEvent2  = function (event) {
2387  if (!pgjs.touchTracked) {
2388    return;
2389  }
2390  pgjs.touchTracked = false;
2391  // if (pgjs.trafficEvents.getTouchCounter2() > pgjs.trafficEvents.getMaxAllowedPackets()) {
2392  //   return;
2393  // }
2394  var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2395  var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2396  var timestamp = new Date().getTime();
2397  var data = {
2398    'mouseX': pgjs.trafficEvents.getMouseX() || '',
2399    'mouseY': pgjs.trafficEvents.getMouseY() || '',
2400    'scrollX': scrollX,
2401    'scrollY': scrollY
2402  };
2403  pgjs.createEventPacket(data, 'touch_move', timestamp);
2404}
2405
2406//OnUnload handler using sync call to send packet data
2407pgjs.onUnloadHandler = function (event) {
2408  if (pgjs.onUnloadCheck === false) {
2409    pgjs.onUnloadCheck=true;
2410    var scrollY = window.pageYOffset >= 0 ? window.pageYOffset : '0';
2411    var scrollX = window.pageXOffset >= 0 ? window.pageXOffset : '0';
2412    var timestamp = new Date().getTime();
2413    var data = {
2414      'startTime': pgjs.startTime,
2415      'mouseX': pgjs.trafficEvents.getMouseX() || '',
2416      'mouseY': pgjs.trafficEvents.getMouseY() || '',
2417      'scrollX': scrollX,
2418      'scrollY': scrollY
2419    };
2420    pgjs.createEventPacket(data, 'window_onunload', timestamp);
2421    pgjs.sendPacketData(pgjs.trafficEvents.getPackets(), false);
2422  }
2423}
2424
2425//Send event packet data | quickfix
2426pgjs.sendEventPacket = function() {
2427  pgjs.trafficEvents.incrementEventCounter();
2428  if (pgjs.trafficEvents.getEventCounter() == pgjs.trafficEvents.getMaxEvents()) {
2429    clearInterval(pgjs.trafficEvents.getEventInterval());
2430    pgjs.trafficEvents.setEventInterval(window.setInterval(pgjs.sendEventPacket, 5000));
2431  }
2432  if(pgjs.trafficEvents.getEventCounter() > 10) {
2433    clearInterval(pgjs.trafficEvents.getEventInterval());
2434    pgjs.removeEventListeners();
2435    return;
2436  } else if (pgjs.trafficEvents.getPackets().length > 0) {
2437    pgjs.sendPacketData(pgjs.trafficEvents.getPackets(), true);
2438  }
2439  pgjs.trafficEvents.cleanEventData();
2440}
2441
2442//Remove all event handlers
2443pgjs.removeEventListeners = function() {
2444  window.removeEventListener('mousemove', pgjs.mouseMoveHandler, false);
2445  window.removeEventListener('click', pgjs.mouseClickHandler, false);
2446  window.removeEventListener('dblclick', pgjs.mouseDoubleClick, false);
2447  window.removeEventListener('scroll', pgjs.onScrollHandler, false);
2448  window.removeEventListener('resize', pgjs.onResizeHandler, false);
2449  document.body.removeEventListener('keypress', pgjs.keyPressHandler, false);
2450  document.body.removeEventListener('touchstart', pgjs.touchEvent1, false);
2451  document.body.removeEventListener('touchmove', pgjs.touchEvent2, false);
2452}

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.