Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/vendor
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-04-20 14:43:17 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-04-20 14:43:17 +0300
commitdfc94207fec2d84314b1a5410cface22e8b369bd (patch)
treec54022f61ced104305889a64de080998a0dc773b /vendor
parentb874efeff674f6bf0355d5d242ecf81c6f7155df (diff)
Add latest changes from gitlab-org/gitlab@15-11-stable-eev15.11.0-rc42
Diffstat (limited to 'vendor')
-rw-r--r--vendor/assets/javascripts/snowplow/sp.js166
-rw-r--r--vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/agent.rb5
-rw-r--r--vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/looper.rb14
-rw-r--r--vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/pprof_builder.rb9
-rw-r--r--vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/looper_spec.rb19
-rw-r--r--vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/pprof_builder_spec.rb19
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/.gitignore3
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml77
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/.rspec1
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/CONTRIBUTING.md41
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/Gemfile14
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/Gemfile.lock58
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/LICENSE165
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/README.md57
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/gitlab-sidekiq-fetcher.gemspec15
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq-reliable-fetch.rb6
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/base_reliable_fetch.rb269
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/interrupted_set.rb51
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb38
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb48
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/spec/base_reliable_fetch_spec.rb97
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/spec/fetch_shared_examples.rb195
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/spec/reliable_fetch_spec.rb8
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb43
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/spec/spec_helper.rb116
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/README.md37
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/interruption/config.rb19
-rwxr-xr-xvendor/gems/sidekiq-reliable-fetch/tests/interruption/test_kill_signal.rb25
-rwxr-xr-xvendor/gems/sidekiq-reliable-fetch/tests/interruption/test_term_signal.rb25
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/interruption/worker.rb15
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/reliability/config.rb29
-rwxr-xr-xvendor/gems/sidekiq-reliable-fetch/tests/reliability/reliability_test.rb115
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/reliability/worker.rb14
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/tests/support/utils.rb26
-rw-r--r--vendor/project_templates/android.tar.gzbin133429 -> 131955 bytes
-rw-r--r--vendor/project_templates/gitbook.tar.gzbin13068 -> 12129 bytes
-rw-r--r--vendor/project_templates/gomicro.tar.gzbin5388 -> 4495 bytes
-rw-r--r--vendor/project_templates/hexo.tar.gzbin547436 -> 546434 bytes
-rw-r--r--vendor/project_templates/hipaa_audit_protocol.tar.gzbin114488 -> 1523 bytes
-rw-r--r--vendor/project_templates/iosswift.tar.gzbin2422200 -> 2421857 bytes
-rw-r--r--vendor/project_templates/jekyll.tar.gzbin60465 -> 59551 bytes
-rw-r--r--vendor/project_templates/laravel.tar.gzbin0 -> 74342 bytes
-rw-r--r--vendor/project_templates/nfgitbook.tar.gzbin122562 -> 121618 bytes
-rw-r--r--vendor/project_templates/nfhexo.tar.gzbin655028 -> 654150 bytes
-rw-r--r--vendor/project_templates/nfhugo.tar.gzbin1159251 -> 1158440 bytes
-rw-r--r--vendor/project_templates/nfjekyll.tar.gzbin132262 -> 131307 bytes
-rw-r--r--vendor/project_templates/nfplainhtml.tar.gzbin122392 -> 121444 bytes
-rw-r--r--vendor/project_templates/pelican.tar.gzbin43159 -> 42448 bytes
-rw-r--r--vendor/project_templates/plainhtml.tar.gzbin11389 -> 10445 bytes
-rw-r--r--vendor/project_templates/salesforcedx.tar.gzbin432083 -> 431023 bytes
-rw-r--r--vendor/project_templates/serverless_framework.tar.gzbin92193 -> 91058 bytes
-rw-r--r--vendor/project_templates/spring.tar.gzbin49518 -> 48912 bytes
52 files changed, 1652 insertions, 187 deletions
diff --git a/vendor/assets/javascripts/snowplow/sp.js b/vendor/assets/javascripts/snowplow/sp.js
index 88e7304c8ac..574fa56839e 100644
--- a/vendor/assets/javascripts/snowplow/sp.js
+++ b/vendor/assets/javascripts/snowplow/sp.js
@@ -1,162 +1,8 @@
-/**
- * @description JavaScript tracker for Snowplow
- * @version 2.17.3
- * @copyright Anthon Pang, Snowplow Analytics Ltd
- * @license Simplified BSD
- *
- * Documentation: http://bit.ly/sp-js
+/*!
+ * Web analytics for Snowplow v3.8.0 (http://bit.ly/sp-js)
+ * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang
+ * Licensed under BSD-3-Clause
*/
-'use strict';(function(){function D(a){"@babel/helpers - typeof";D="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"===typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};return D(a)}function Sb(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(a);b&&(e=e.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable}));c.push.apply(c,e)}return c}
-function nd(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?Sb(Object(c),!0).forEach(function(b){var d=c[b];b in a?Object.defineProperty(a,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):a[b]=d}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):Sb(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function qa(a){var b=Array.isArray(a)?jb(a):void 0;b||(b=
-"undefined"!==typeof Symbol&&Symbol.iterator in Object(a)?Array.from(a):void 0);if(!(a=b||fc(a)))throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");return a}function fc(a,b){if(a){if("string"===typeof a)return jb(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);"Object"===c&&a.constructor&&(c=a.constructor.name);if("Map"===c||"Set"===c)return Array.from(a);if("Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c))return jb(a,
-b)}}function jb(a,b){if(null==b||b>a.length)b=a.length;for(var c=0,e=Array(b);c<b;c++)e[c]=a[c];return e}function kb(a,b){var c;if("undefined"===typeof Symbol||null==a[Symbol.iterator]){if(Array.isArray(a)||(c=fc(a))||b&&a&&"number"===typeof a.length){c&&(a=c);var e=0;b=function(){};return{s:b,n:function(){return e>=a.length?{done:!0}:{done:!1,value:a[e++]}},e:function(a){throw a;},f:b}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
-}var d=!0,f=!1,h;return{s:function(){c=a[Symbol.iterator]()},n:function(){var a=c.next();d=a.done;return a},e:function(a){f=!0;h=a},f:function(){try{d||null==c.return||c.return()}finally{if(f)throw h;}}}}function ra(a){var b={exports:{}};return a(b,b.exports),b.exports}function sa(a){var b=-1,c=null==a?0:a.length;for(this.clear();++b<c;){var e=a[b];this.set(e[0],e[1])}}function ba(a){var b=-1,c=null==a?0:a.length;for(this.clear();++b<c;){var e=a[b];this.set(e[0],e[1])}}function ta(a){var b=-1,c=null==
-a?0:a.length;for(this.clear();++b<c;){var e=a[b];this.set(e[0],e[1])}}function ua(a){this.size=(this.__data__=new lb(a)).size}function Ha(a){var b=-1,c=null==a?0:a.length;for(this.__data__=new va;++b<c;)this.add(a[b])}function Ia(a,b,c,e,d){if(a===b)b=!0;else if(null==a||null==b||!Q(a)&&!Q(b))b=a!==a&&b!==b;else a:{var f=u(a),h=u(b),g=f?"[object Array]":gc(a),k=h?"[object Array]":gc(b);g="[object Arguments]"==g?"[object Object]":g;k="[object Arguments]"==k?"[object Object]":k;var p="[object Object]"==
-g;h="[object Object]"==k;if((k=g==k)&&Ja(a)){if(!Ja(b)){b=!1;break a}f=!0;p=!1}if(k&&!p)d||(d=new Ka),b=f||hc(a)?ic(a,b,c,e,Ia,d):od(a,b,g,c,e,Ia,d);else{if(!(c&1)&&(f=p&&jc.call(a,"__wrapped__"),g=h&&jc.call(b,"__wrapped__"),f||g)){a=f?a.value():a;b=g?b.value():b;d||(d=new Ka);b=Ia(a,b,c,e,d);break a}if(k)b:if(d||(d=new Ka),f=c&1,g=kc(a,La,lc),h=g.length,k=kc(b,La,lc).length,h==k||f){for(k=h;k--;){var v=g[k];if(!(f?v in b:pd.call(b,v))){b=!1;break b}}p=d.get(a);v=d.get(b);if(p&&v)b=p==b&&v==a;else{p=
-!0;d.set(a,b);d.set(b,a);for(var M=f;++k<h;){v=g[k];var m=a[v],r=b[v];if(e)var N=f?e(r,m,v,b,a,d):e(m,r,v,a,b,d);if(void 0===N?m!==r&&!Ia(m,r,c,e,d):!N){p=!1;break}M||(M="constructor"==v)}p&&!M&&(c=a.constructor,e=b.constructor,c!=e&&"constructor"in a&&"constructor"in b&&!("function"==typeof c&&c instanceof c&&"function"==typeof e&&e instanceof e)&&(p=!1));d["delete"](a);d["delete"](b);b=p}}else b=!1;else b=!1}}return b}function Fb(a,b){if("function"!=typeof a||null!=b&&"function"!=typeof b)throw new TypeError("Expected a function");
-var c=function d(){var c=arguments,h=b?b.apply(this,c):c[0],g=d.cache;if(g.has(h))return g.get(h);c=a.apply(this,c);d.cache=g.set(h,c)||g;return c};c.cache=new (Fb.Cache||va);return c}function mc(a){if("string"==typeof a)return a;if(u(a))return nc(a,mc)+"";if(Ma(a))return oc?oc.call(a):"";var b=a+"";return"0"==b&&1/a==-qd?"-0":b}function pc(a){if(!qc(a)){a=a.text||"";var b=wa.getElementsByTagName("title");b&&void 0!==b[0]&&(a=b[0].text)}return a}function Tb(a){var b=/^(?:(?:https?|ftp):)\/*(?:[^@]+@)?([^:/#]+)/.exec(a);
-return b?b[1]:a}function cc(a){var b=a.length;"."===a.charAt(--b)&&(a=a.slice(0,b));"*."===a.slice(0,2)&&(a=a.slice(1));return a}function dc(a){var b="",c=Gb("referrer",Z.location.href)||Gb("referer",Z.location.href);if(c)return c;if(a)return a;try{b=Z.top.document.referrer}catch(e){if(Z.parent)try{b=Z.parent.document.referrer}catch(d){b=""}}""===b&&(b=wa.referrer);return b}function q(a,b,c,e){if(a.addEventListener)return a.addEventListener(b,c,e),!0;if(a.attachEvent)return a.attachEvent("on"+b,c);
-a["on"+b]=c}function Gb(a,b){return(a=(new RegExp("^[^#]*[?&]"+a+"=([^&#]*)")).exec(b))?decodeURIComponent(a[1].replace(/\+/g," ")):null}function mb(a){var b=Array.prototype.slice.call(arguments,1);return rd(ca(a,function(a){if("function"===typeof a)try{return a.apply(null,b)}catch(e){}else return a}))}function y(a){"undefined"!==typeof console&&console.warn("Snowplow: "+a)}function da(a){return a.className.match(/\S+/g)||[]}function Hb(a,b){if(Array.isArray(a)||!I(a))return function(){return!0};
-if(a.hasOwnProperty("filter"))return a.filter;var c=a.hasOwnProperty("whitelist");a=a.whitelist||a.blacklist;Array.isArray(a)||(a=[a]);for(var e={},d=0;d<a.length;d++)e[a[d]]=!0;return b?function(a){a:{a=da(a);var b;for(b=0;b<a.length;b++)if(e[a[b]]){a=!0;break a}a=!1}return a===c}:function(a){return a.name in e===c}}function sd(a){return I(a)?a.hasOwnProperty("transform")?a.transform:function(a){return a}:function(a){return a}}function Ub(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:
-63072E3;try{var e=Date.now()+1E3*c;xa.setItem("".concat(a,".expires"),e);xa.setItem(a,b);return!0}catch(d){return!1}}function rc(a){try{return xa.removeItem(a),xa.removeItem(a+".expires"),!0}catch(b){return!1}}function td(a,b){for(var c="_sp_root_domain_test_"+(new Date).getTime(),e="_test_value_"+(new Date).getTime(),d=Z.location.hostname.split("."),f=d.length-1;0<=f;){var h=d.slice(f,d.length).join(".");J(c,e,0,"/",h,a,b);if(J(c)===e){J(c,"",-1,"/",h,a,b);c=wa.cookie.split("; ");e=[];for(d=0;d<
-c.length;d++)"_sp_root_domain_test_"===c[d].substring(0,21)&&e.push(c[d]);c=e;for(e=0;e<c.length;e++)J(c[e],"",-1,"/",h,a,b);return h}--f}return Z.location.hostname}function sc(a,b){for(var c=0;c<b.length;c++)if(b[c]===a)return!0;return!1}function J(a,b,c,e,d,f,h){return 1<arguments.length?wa.cookie=a+"="+encodeURIComponent(b)+(c?"; Expires="+(new Date(+new Date+1E3*c)).toUTCString():"")+(e?"; Path="+e:"")+(d?"; Domain="+d:"")+(f?"; SameSite="+f:"")+(h?"; Secure":""):decodeURIComponent((("; "+wa.cookie).split("; "+
-a+"=")[1]||"").split(";")[0])}function nb(a){a=parseInt(a);return isNaN(a)?void 0:a}function Ib(a){a=parseFloat(a);return isNaN(a)?void 0:a}function ob(a){return a&&"function"===typeof a?!0:!1}function ud(a,b,c,e,d){function f(e,f,h){h=h||{};g.hasOwnProperty(e)?y("Tracker namespace "+e+" already exists."):(g[e]=new a(d,e,b,c,h),g[e].setCollectorUrl(f))}function h(){var a;for(a=0;a<arguments.length;a+=1){var b=arguments[a];var c=Array.prototype.shift.call(b);if(ob(c))try{c.apply(g,b)}catch(C){y("Custom callback error - ".concat(C))}finally{continue}var d=
-c.split(":");c=d[0];d=1<d.length?d[1].split(";"):[];d=[c,d];c=d[0];d=d[1];if("newTracker"===c)f(b[0],b[1],b[2]);else if("setCollectorCf"!==c&&"setCollectorUrl"!==c||d&&0!==d.length){var e=[];if(d&&0!==d.length)for(var h=0;h<d.length;h++)g.hasOwnProperty(d[h])?e.push(g[d[h]]):y('Warning: Tracker namespace "'+d[h]+'" not configured');else e=ca(g);0===e.length&&y("Warning: No tracker configured");for(d=0;d<e.length;d++)e[d][c].apply(e[d],b)}else d=b[0],b=b[1],y(c+" is deprecated. Set the collector when a new tracker instance using newTracker."),
-b=void 0===b?"sp":b,f(b),g[b][c](d)}}for(var g={},k=0;k<e.length;k++)h(e[k]);return{push:h}}function tc(a,b,c){if("translate.googleusercontent.com"===a)""===c&&(c=b),a=/^(?:https?|ftp)(?::\/*(?:[^?]+))([?][^#]+)/.exec(b),b=Gb("u",a[1]),a=Tb(b);else{var e;if(!(e="cc.bingj.com"===a||"webcache.googleusercontent.com"===a))a:{if(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(a))try{var d=
-document.body.children[0].children[0].children[0].children[0].children[0].children[0].innerHTML;e="You have reached the cached page for"===d.slice(0,36);break a}catch(f){e=!1;break a}e=void 0}e&&(b=document.links[0].href,a=Tb(b))}return[a,b,c]}function vd(){try{var a=!!ya.localStorage}catch(b){a=!0}if(!a)return!1;try{return ya.localStorage.setItem("modernizr","modernizr"),ya.localStorage.removeItem("modernizr"),!0}catch(b){return!1}}function wd(){var a=ya,b="inner";"innerWidth"in ya||(b="client",
-a=pb.documentElement||pb.body);var c=a[b+"Width"];a=a[b+"Height"];return 0<=c&&0<=a?c+"x"+a:null}function xd(){var a=pb.documentElement,b=pb.body,c=Math.max(a.clientWidth,a.offsetWidth,a.scrollWidth);a=Math.max(a.clientHeight,a.offsetHeight,a.scrollHeight,b?Math.max(b.offsetHeight,b.scrollHeight):0);return isNaN(c)||isNaN(a)?"":c+"x"+a}function yd(){var a,b={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",
-java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"},c={};if(R.mimeTypes&&R.mimeTypes.length)for(a in b)if(Object.prototype.hasOwnProperty.call(b,a)){var e=R.mimeTypes[b[a]];c[a]=e&&e.enabledPlugin?"1":"0"}R.constructor===window.Navigator&&"unknown"!==typeof R.javaEnabled&&void 0!==R.javaEnabled&&R.javaEnabled()&&(c.java="1");ob(ya.GearsFactory)&&(c.gears="1");c.res=qb.width+"x"+qb.height;c.cd=qb.colorDepth;c.cookie=R.cookieEnabled?"1":"0";return c}function zd(a,
-b,c){function e(b,d){for(var e,f,h,k;null!==(e=b.parentNode)&&void 0!==e&&"A"!==(f=b.tagName.toUpperCase())&&"AREA"!==f;)b=e;if(void 0!==b.href){e=b.hostname||Tb(b.href);f=e.toLowerCase();var p=b.href.replace(e,f);/^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):/i.test(p)||(e=b.id,f=da(b),h=b.target,k=g?b.innerHTML:null,p=unescape(p),a.trackLinkClick(p,e,f,h,k,c(mb(d,b))))}}function d(a){return function(b){b=b||window.event;var c=b.which||b.button;var d=b.target||b.srcElement;"click"===
-b.type?d&&e(d,a):"mousedown"===b.type?1!==c&&2!==c||!d?p=v=null:(p=c,v=d):"mouseup"===b.type&&(c===p&&d===v&&e(d,a),p=v=null)}}var f,h,g,k,p,v;return{configureLinkClickTracking:function(a,b,c,d){g=c;k=d;h=b;f=Hb(a,!0)},addClickListeners:function(){var a=document.links,c;for(c=0;c<a.length;c++)if(f(a[c])&&!a[c][b]){var e=a[c];h?(q(e,"mouseup",d(k),!1),q(e,"mousedown",d(k),!1)):q(e,"click",d(k),!1);a[c][b]=!0}}}}function Ad(a,b,c){function e(a){return a[Bd(["name","id","type","nodeName"],function(b){return a[b]&&
-"string"===typeof a[b]})]}function d(a){for(;a&&a.nodeName&&"HTML"!==a.nodeName.toUpperCase()&&"FORM"!==a.nodeName.toUpperCase();)a=a.parentNode;if(a&&a.nodeName&&"FORM"===a.nodeName.toUpperCase())return e(a)}function f(a){var b=[];O(k,function(c){c=Array.prototype.filter.call(a.getElementsByTagName(c),function(a){return a.hasOwnProperty(p)});O(c,function(a){if("submit"!==a.type){var c={name:e(a),value:a.value,nodeName:a.nodeName};a.type&&"INPUT"===a.nodeName.toUpperCase()&&(c.type=a.type);"checkbox"!==
-a.type&&"radio"!==a.type||a.checked||(c.value=null);b.push(c)}})});return b}function h(b,f){return function(g){g=g.target;var h=g.nodeName&&"INPUT"===g.nodeName.toUpperCase()?g.type:null,k="checkbox"!==g.type||g.checked?m(g.value,g):null;("change_form"===b||"checkbox"!==h&&"radio"!==h)&&a.trackFormFocusOrChange(b,d(g),e(g),g.nodeName,h,da(g),k,c(mb(f,g,h,k)))}}function g(b){return function(d){d=d.target;var g=f(d);O(g,function(a){a.value=m(a.value,a)});a.trackFormSubmission(e(d),da(d),g,c(mb(b,d,
-g)))}}var k=["textarea","input","select"],p=b+"form",v=function(){return!0},M=function(){return!0},m=function(a){return a};return{configureFormTracking:function(a){a&&(v=Hb(a.forms,!0),M=Hb(a.fields,!1),m=sd(a.fields))},addFormListeners:function(a){O(document.getElementsByTagName("form"),function(b){v(b)&&!b[p]&&(O(k,function(c){O(b.getElementsByTagName(c),function(b){M(b)&&!b[p]&&"password"!==b.type.toLowerCase()&&(q(b,"focus",h("focus_form",a),!1),q(b,"change",h("change_form",a),!1),b[p]=!0)})}),
-q(b,"submit",g(a)),b[p]=!0)})}}}function Cd(a){function b(b,e,d,f,h,g){a.trackSelfDescribingEvent({schema:"iglu:com.snowplowanalytics.snowplow/application_error/jsonschema/1-0-1",data:{programmingLanguage:"JAVASCRIPT",message:b||"JS Exception. Browser doesn't support ErrorEvent API",stackTrace:h&&h.stack?h.stack:null,lineNumber:d,lineColumn:f,fileName:e}},g)}return{trackError:b,enableErrorTracking:function(a,e,d){q(Dd,"error",function(c){if(ob(a)&&a(c)||null==a){var f=ob(e)?d.concat(e(c)):d;b(c.message,
-c.filename,c.lineno,c.colno,c.error,f)}},!0)}}}function Ed(a,b,c,e,d,f,h,g,k,p,v,M){function m(a){var b="?",c={co:!0,cx:!0},d=!0,e;for(e in a)a.hasOwnProperty(e)&&!c.hasOwnProperty(e)&&(d?d=!1:b+="&",b+=encodeURIComponent(e)+"="+encodeURIComponent(a[e]));for(var g in c)a.hasOwnProperty(g)&&c.hasOwnProperty(g)&&(b+="&"+g+"="+encodeURIComponent(a[g]));return b}function r(a){a=Fd(a,function(a){return a.toString()});return{evt:a,bytes:N(JSON.stringify(a))}}function N(a){for(var b=0,c=0;c<a.length;c++){var d=
-a.charCodeAt(c);127>=d?b+=1:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,c++):b=65535>d?b+3:b+4}return b}function C(){for(;E.length&&"string"!==typeof E[0]&&"object"!==D(E[0]);)E.shift();if(1>E.length)q=!1;else{if(!qc(u))throw"No collector configured";q=!0;var a=E[0];if(P){var b=function(a){for(var b=0,c=0;b<a.length&&!(c+=a[b].bytes,c>=g);)b+=1;return b},c=function(a){for(var b=0;b<a;b++)E.shift();e&&Ub(L,JSON.stringify(E.slice(0,p)));C()};if(F){a=vc(a);var d=n(a,!1);var f=1}else a=u,d=n(a,!0),f=b(E);var h=
-setTimeout(function(){d.abort();q=!1},v);d.onreadystatechange=function(){if(4===d.readyState&&200<=d.status&&400>d.status){clearTimeout(h);if(x&&!J)try{wc.setItem(Q,!0)}catch(uc){}c(f)}else 4===d.readyState&&400<=d.status&&(clearTimeout(h),q=!1)};if(F)d.send();else if(b=E.slice(0,f),0<b.length){var k;if(!(k=J)&&(k=x))try{k=wc.getItem(Q)}catch(uc){k=void 0}J=k;b=ca(b,function(a){return a.evt});if(J){k=new Blob([Jb(w(b))],{type:"application/json"});try{var m=navigator.sendBeacon(a,k)}catch(uc){m=!1}}!0===
-m&&c(f);x&&m||d.send(Jb(w(b)))}}else if(M)q=!1;else{m=new Image(1,1);var r=!0;m.onload=function(){r&&(r=!1,E.shift(),e&&Ub(L,JSON.stringify(E.slice(0,p))),C())};m.onerror=function(){r&&(q=r=!1)};m.src=vc(a);setTimeout(function(){r&&q&&(r=!1,C())},v)}}}function n(a,b){var c=new XMLHttpRequest;b?(c.open("POST",a,!0),c.setRequestHeader("Content-Type","application/json; charset=UTF-8")):c.open("GET",a,!0);c.withCredentials=!0;M&&c.setRequestHeader("SP-Anonymous","*");return c}function Jb(a){return JSON.stringify({schema:"iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",
-data:a})}function w(a){for(var b=(new Date).getTime().toString(),c=0;c<a.length;c++)a[c].stm=b;return a}function vc(a){return k?u+a.replace("?","?stm="+(new Date).getTime()+"&"):u+a}var B=window.localStorage,q=!1,u,J;d=d.toLowerCase?d.toLowerCase():d;var O=null===d||!0===d||"beacon"===d||"true"===d,x=!!(O&&navigator&&navigator.sendBeacon)&&O,F="get"===d,P=!!(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),I=!F&&P&&("post"===d||O),U=I?f:"/i";h=vd()&&e&&I&&h||1;var L="snowplowOutQueue_".concat(a,
-"_").concat(b,"_").concat(I?"post2":"get");var Q="spBeaconPreflight_".concat(a,"_").concat(b);if(e)try{var E=JSON.parse(B.getItem(L))}catch(df){}Array.isArray(E)||(E=[]);c.outQueues.push(E);P&&1<h&&c.bufferFlushers.push(function(){q||C()});return{enqueueRequest:function(a,b){u=b+U;if(I){a=r(a);if(a.bytes>=g){y("Event ("+a.bytes+"B) too big, max is "+g);n(u,!0).send(Jb(w([a.evt])));return}E.push(a)}else E.push(m(a));a=!1;e&&(a=Ub(L,JSON.stringify(E.slice(0,p))));q||a&&!(E.length>=h)||C()},executeQueue:function(){q||
-C()},setUseLocalStorage:function(a){e=a},setAnonymousTracking:function(a){M=a},setCollectorUrl:function(a){u=a+U}}}function Gd(a){var b={};"object"===D(a)&&null!==a&&Object.getOwnPropertyNames(a).forEach(function(c,e,d){"function"===typeof a[c]&&(b[c]=Hd(a[c]))});return b}function Id(a){if(!a)return a;switch(4-a.length%4){case 2:a+="==";break;case 3:a+="="}a=a.replace(/-/g,"+").replace(/_/g,"/");return Jd(a)}function Jd(a){var b=0,c=0;var e="";var d=[];if(!a)return a;a+="";do{var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(b++));
-var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(b++));e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(b++));var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(b++));var k=f<<18|h<<12|e<<6|g;f=k>>16&255;h=k>>8&255;k&=255;64===e?d[c++]=String.fromCharCode(f):64===g?d[c++]=String.fromCharCode(f,h):d[c++]=String.fromCharCode(f,h,k)}while(b<a.length);e=d.join("");return function(a){return decodeURIComponent(a.split("").map(function(a){return"%"+
-("00"+a.charCodeAt(0).toString(16)).slice(-2)}).join(""))}(e.replace(/\0+$/,""))}function Na(a){if(!xc(a))return!1;for(var b in a)if(Object.prototype.hasOwnProperty.call(a,b))return!0;return!1}function xc(a){return"undefined"!==typeof a&&null!==a&&(a.constructor==={}.constructor||a.constructor===[].constructor)}function za(a){var b={},c=function(a,c){null!=c&&""!==c&&(b[a]=c)};return{add:c,addDict:function(a){for(var b in a)Object.prototype.hasOwnProperty.call(a,b)&&c(b,a[b])},addJson:function(b,
-d,f){if(f&&Na(f))if(f=JSON.stringify(f),a){if(f){d=f;var e=f=0,g=[];if(d){d=unescape(encodeURIComponent(d));do{var k=d.charCodeAt(f++);var p=d.charCodeAt(f++);var v=d.charCodeAt(f++);var M=k<<16|p<<8|v;k=M>>18&63;p=M>>12&63;v=M>>6&63;M&=63;g[e++]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(k)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(p)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(v)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(M)}while(f<
-d.length);f=g.join("");d=d.length%3;d=(d?f.slice(0,d-3):f)+"===".slice(d||3)}d=d.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}else d=f;c(b,d)}else c(d,f)},build:function(){return b}}}function Kd(){var a=[],b=[];return{getGlobalPrimitives:function(){return a},getConditionalProviders:function(){return b},addGlobalContexts:function(c){var e=[],d=[];c=kb(c);var f;try{for(c.s();!(f=c.n()).done;){var h=f.value;yc(h)?e.push(h):ea(h)&&d.push(h)}}catch(g){c.e(g)}finally{c.f()}a=a.concat(d);b=b.concat(e)},
-clearGlobalContexts:function(){b=[];a=[]},removeGlobalContexts:function(c){c=kb(c);var e;try{var d=function(){var c=e.value;yc(c)?b=b.filter(function(a){return!rb(a,c)}):ea(c)&&(a=a.filter(function(a){return!rb(a,c)}))};for(c.s();!(e=c.n()).done;)d()}catch(f){c.e(f)}finally{c.f()}},getApplicableContexts:function(c){c=c.build();var e=Na(c)&&"e"in c?"string"===typeof c.e:!1;if(e){c=nd({},c);try{null!=c&&sb(c,"ue_px",Kb)&&(c.ue_px=JSON.parse(Id(F(c,["ue_px"]))));var d=c}catch(g){d=c}c=d;e="string"===
-typeof F(c,"ue_px.data.schema")?F(c,"ue_px.data.schema"):"string"===typeof F(c,"ue_pr.data.schema")?F(c,"ue_pr.data.schema"):"string"===typeof F(c,"schema")?F(c,"schema"):"";var f=F(c,"e","");d=[];var h=tb(a,c,f,e);d.push.apply(d,qa(h));c=Ld(b,c,f,e);d.push.apply(d,qa(c));return d}return[]}}}function Md(a){if("*"===a[0]||"*"===a[1])return!1;if(0<a.slice(2).length){var b=!1;a=kb(a.slice(2));var c;try{for(a.s();!(c=a.n()).done;)if("*"===c.value)b=!0;else if(b)return!1}catch(e){a.e(e)}finally{a.f()}return!0}return 2==
-a.length?!0:!1}function zc(a){return(a=a.split("."))&&1<a.length?Md(a):!1}function Ac(a){a=/^iglu:((?:(?:[a-zA-Z0-9-_]+|\*).)+(?:[a-zA-Z0-9-_]+|\*))\/([a-zA-Z0-9-_.]+|\*)\/jsonschema\/([1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)$/.exec(a);if(null!==a&&zc(a[1]))return a.slice(1,6)}function Oa(a){if(a=Ac(a)){var b=a[0];return 5===a.length&&zc(b)}return!1}function Nd(a){return Array.isArray(a)&&a.every(function(a){return"string"===typeof a})}function Bc(a){return Nd(a)?a.every(function(a){return Oa(a)}):
-"string"===typeof a?Oa(a):!1}function Pa(a){return Na(a)&&"schema"in a&&"data"in a?"string"===typeof a.schema&&"object"===D(a.data):!1}function Od(a){var b=0;if(Q(a)&&"[object Object]"==W(a)){var c=Pd(a);null===c?c=!0:(c=Qd.call(c,"constructor")&&c.constructor,c="function"==typeof c&&c instanceof c&&Cc.call(c)==Rd)}else c=!1;if(c){if(null!=a&&sb(a,"accept",Kb))if(Bc(a.accept))b+=1;else return!1;if(null!=a&&sb(a,"reject",Kb))if(Bc(a.reject))b+=1;else return!1;return 0<b&&2>=b}return!1}function Dc(a){return"function"===
-typeof a&&1>=a.length}function ea(a){return"function"===typeof a&&1>=a.length||Pa(a)}function Ec(a){return Array.isArray(a)&&2===a.length?Array.isArray(a[1])?Dc(a[0])&&Lb(a[1],ea):Dc(a[0])&&ea(a[1]):!1}function Fc(a){return Array.isArray(a)&&2===a.length?Od(a[0])?Array.isArray(a[1])?Lb(a[1],ea):ea(a[1]):!1:!1}function yc(a){return Ec(a)||Fc(a)}function Sd(a,b){var c=0,e=0,d=F(a,"accept");Array.isArray(d)?a.accept.some(function(a){return ub(a,b)})&&e++:"string"===typeof d&&ub(d,b)&&e++;d=F(a,"reject");
-Array.isArray(d)?a.reject.some(function(a){return ub(a,b)})&&c++:"string"===typeof d&&ub(d,b)&&c++;return 0<e&&0===c?!0:!1}function ub(a,b){if(!Oa(a))return!1;a=Ac(a);b=/^iglu:([a-zA-Z0-9-_.]+)\/([a-zA-Z0-9-_]+)\/jsonschema\/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$/.exec(b);b=null!==b?b.slice(1,6):void 0;if(a&&b){if(!Td(a[0],b[0]))return!1;for(var c=1;5>c;c++)if(!Gc(a[c],b[c]))return!1;return!0}return!1}function Td(a,b){b=b.split(".");a=a.split(".");if(b&&a){if(b.length!==a.length)return!1;
-for(var c=0;c<a.length;c++)if(!Gc(b[c],a[c]))return!1;return!0}return!1}function Gc(a,b){return a&&b&&"*"===a||a===b}function Hc(a){return Array.isArray(a)?a:[a]}function tb(a,b,c,e){var d;a=Hc(a);a=ca(a,function(a){a:if(Pa(a))a=[a];else{if("function"===typeof a&&1>=a.length){b:{var d=void 0;try{d=a({event:b,eventType:c,eventSchema:e});if(Pa(d)||Array.isArray(d)&&Lb(d,Pa)){var g=d;break b}g=void 0;break b}catch(k){}g=void 0}if(Pa(g)){a=[g];break a}else if(Array.isArray(g)){a=g;break a}}a=void 0}if(a&&
-0!==a.length)return a});return(d=[]).concat.apply(d,qa(Ic(a)))}function Ld(a,b,c,e){var d;a=Hc(a);a=ca(a,function(a){a:{if(Ec(a)){var d=a[0],g=!1;try{g=d({event:b,eventType:c,eventSchema:e})}catch(k){g=!1}if(!0===g){a=tb(a[1],b,c,e);break a}}else if(Fc(a)&&Sd(a[0],e)){a=tb(a[1],b,c,e);break a}a=[]}if(a&&0!==a.length)return a});return(d=[]).concat.apply(d,qa(Ic(a)))}function Ud(a,b){var c=Kd(),e={};"undefined"===typeof a&&(a=!0);var d=function(a,b){var c={};b=b||{};for(var d in a)if(b[d]||null!==a[d]&&
-"undefined"!==typeof a[d])c[d]=a[d];return c},f=function(a,d,f,h){a.addDict(e);a.add("eid",Vd.v4());f=null==f?{type:"dtm",value:(new Date).getTime()}:"number"===typeof f?{type:"dtm",value:f}:"ttm"===f.type?{type:"ttm",value:f.value}:{type:"dtm",value:f.value||(new Date).getTime()};a.add(f.type,f.value.toString());f=c.getApplicableContexts(a);var g=[];d&&d.length&&g.push.apply(g,qa(d));f&&f.length&&g.push.apply(g,qa(f));d=g&&g.length?{schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",
-data:g}:void 0;void 0!==d&&a.addJson("cx","co",d);"function"===typeof b&&b(a);try{h&&h(a.build())}catch(m){console.warn("Snowplow: error running custom callback")}return a},h=function(b,c,d,e){var g=za(a);b={schema:"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",data:b};g.add("e","ue");g.addJson("ue_px","ue_pr",b);return f(g,c,d,e)};return{addPayloadPair:function(a,b){e[a]=b},setBase64Encoding:function(b){a=b},addPayloadDict:function(a){for(var b in a)Object.prototype.hasOwnProperty.call(a,
-b)&&(e[b]=a[b])},resetPayloadPairs:function(a){e=xc(a)?a:{}},setTrackerVersion:function(a){e.tv=a},setTrackerNamespace:function(a){e.tna=a},setAppId:function(a){e.aid=a},setPlatform:function(a){e.p=a},setUserId:function(a){e.uid=a},setScreenResolution:function(a,b){e.res=a+"x"+b},setViewport:function(a,b){e.vp=a+"x"+b},setColorDepth:function(a){e.cd=a},setTimezone:function(a){e.tz=a},setLang:function(a){e.lang=a},setIpAddress:function(a){e.ip=a},setUseragent:function(a){e.ua=a},trackUnstructEvent:h,
-trackSelfDescribingEvent:h,trackPageView:function(b,c,d,e,h,m){var g=za(a);g.add("e","pv");g.add("url",b);g.add("page",c);g.add("refr",d);return f(g,e,h,m)},trackPagePing:function(b,c,d,e,h,m,r,N,C,n){var g=za(a);g.add("e","pp");g.add("url",b);g.add("page",c);g.add("refr",d);g.add("pp_mix",e.toString());g.add("pp_max",h.toString());g.add("pp_miy",m.toString());g.add("pp_may",r.toString());return f(g,N,C,n)},trackStructEvent:function(b,c,d,e,h,m,r,N){var g=za(a);g.add("e","se");g.add("se_ca",b);g.add("se_ac",
-c);g.add("se_la",d);g.add("se_pr",e);g.add("se_va",null==h?void 0:h.toString());return f(g,m,r,N)},trackEcommerceTransaction:function(b,c,d,e,h,m,r,N,C,n,Jb,w){var g=za(a);g.add("e","tr");g.add("tr_id",b);g.add("tr_af",c);g.add("tr_tt",d);g.add("tr_tx",e);g.add("tr_sh",h);g.add("tr_ci",m);g.add("tr_st",r);g.add("tr_co",N);g.add("tr_cu",C);return f(g,n,Jb,w)},trackEcommerceTransactionItem:function(b,c,d,e,h,m,r,N,C,n){var g=za(a);g.add("e","ti");g.add("ti_id",b);g.add("ti_sk",c);g.add("ti_nm",d);g.add("ti_ca",
-e);g.add("ti_pr",h);g.add("ti_qu",m);g.add("ti_cu",r);return f(g,N,C,n)},trackScreenView:function(a,b,c,e,f){return h({schema:"iglu:com.snowplowanalytics.snowplow/screen_view/jsonschema/1-0-0",data:d({name:a,id:b})},c,e,f)},trackLinkClick:function(a,b,c,e,f,m,r,N){a={schema:"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1",data:d({targetUrl:a,elementId:b,elementClasses:c,elementTarget:e,elementContent:f})};return h(a,m,r,N)},trackAdImpression:function(a,b,c,e,f,m,r,N,n,q,u){a={schema:"iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0",
-data:d({impressionId:a,costModel:b,cost:c,targetUrl:e,bannerId:f,zoneId:m,advertiserId:r,campaignId:N})};return h(a,n,q,u)},trackAdClick:function(a,b,c,e,f,m,r,n,C,q,u,w){a={schema:"iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0",data:d({targetUrl:a,clickId:b,costModel:c,cost:e,bannerId:f,zoneId:m,impressionId:r,advertiserId:n,campaignId:C})};return h(a,q,u,w)},trackAdConversion:function(a,b,c,e,f,m,r,n,C,q,u,w){a={schema:"iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0",
-data:d({conversionId:a,costModel:b,cost:c,category:e,action:f,property:m,initialValue:r,advertiserId:n,campaignId:C})};return h(a,q,u,w)},trackSocialInteraction:function(a,b,c,e,f,m){a={schema:"iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0",data:d({action:a,network:b,target:c})};return h(a,e,f,m)},trackAddToCart:function(a,b,c,e,f,m,r,n,q){return h({schema:"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0",data:d({sku:a,name:b,category:c,unitPrice:e,quantity:f,
-currency:m})},r,n,q)},trackRemoveFromCart:function(a,b,c,e,f,m,r,n,q){return h({schema:"iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0",data:d({sku:a,name:b,category:c,unitPrice:e,quantity:f,currency:m})},r,n,q)},trackFormFocusOrChange:function(a,b,c,e,f,m,r,n,q,u){var g="";b={formId:b,elementId:c,nodeName:e,elementClasses:m,value:r};"change_form"===a?(g="iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0",b.type=f):"focus_form"===a&&(g="iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0",
-b.elementType=f);return h({schema:g,data:d(b,{value:!0})},n,q,u)},trackFormSubmission:function(a,b,c,e,f,m){return h({schema:"iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0",data:d({formId:a,formClasses:b,elements:c})},e,f,m)},trackSiteSearch:function(a,b,c,e,f,m,r){return h({schema:"iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0",data:d({terms:a,filters:b,totalResults:c,pageResults:e})},f,m,r)},trackConsentWithdrawn:function(a,b,c,e,f,m,r,n){b={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",
-data:d({id:b,version:c,name:e,description:f})};return h({schema:"iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0",data:d({all:a})},b.data&&m?m.concat([b]):m,r,n)},trackConsentGranted:function(a,b,c,e,f,m,r,n){a={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:d({id:a,version:b,name:c,description:e})};return h({schema:"iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0",data:d({expiry:f})},m?m.concat([a]):[a],r,n)},addGlobalContexts:function(a){c.addGlobalContexts(a)},
-clearGlobalContexts:function(){c.clearGlobalContexts()},removeGlobalContexts:function(a){c.removeGlobalContexts(a)}}}function Qa(a,b,c,e,d){function f(a){return-1<Sb.map(function(a){return a.toLowerCase()}).indexOf(a.toLowerCase())}function h(){Ra=tc(z.domain,A.location.href,dc());Ra[1]!==Aa&&(Mb=dc(Aa));Ma=cc(Ra[0]);Aa=Ra[1]}function g(){var a=(new Date).getTime();if(this.href){a="_sp="+(Nb+"."+a);var b=this.href.split("#"),c=b[0].split("?"),d=c.shift();if(c=c.join("?")){for(var e=!0,f=c.split("&"),
-g=0;g<f.length;g++)if("_sp="===f[g].substr(0,4)){e=!1;f[g]=a;c=f.join("&");break}e&&(c=a+"&"+c)}else c=a;b[0]=d+"?"+c;this.href=b.join("#")}}function k(a){for(var b=0;b<z.links.length;b++){var c=z.links[b];!c.spDecorationEnabled&&a(c)&&(q(c,"click",g,!0),q(c,"mousedown",g,!0),c.spDecorationEnabled=!0)}}function p(a){if(Qa){var b=/#.*/;a=a.replace(b,"")}Wa&&(b=/[{}]/g,a=a.replace(b,""));return a}function v(a){return(a=/^([a-z]+):/.exec(a))?a[1]:null}function n(a){a=Sa+a+"."+Ta;if("localStorage"==G){a:{try{var b=
-xa.getItem(a+".expires");if(null===b||+b>Date.now()){var c=xa.getItem(a);break a}else xa.removeItem(a),xa.removeItem(a+".expires");c=void 0;break a}catch(ef){}c=void 0}return c}if("cookie"==G||"cookieAndLocalStorage"==G)return J(a)}function m(){h();Ta=Lb((vb||Ma)+(Ea||"/")).slice(0,4)}function r(){Vb=(new Date).getTime()}function u(){var a=C(),b=a[0];b<Wb?Wb=b:b>Xb&&(Xb=b);a=a[1];a<Yb?Yb=a:a>Zb&&(Zb=a);r()}function C(){var a=z.compatMode&&"BackCompat"!==z.compatMode?z.documentElement:z.body;return[a.scrollLeft||
-A.pageXOffset,a.scrollTop||A.pageYOffset]}function B(){var a=C(),b=a[0];Xb=Wb=b;Zb=Yb=a=a[1]}function D(a){a=Math.round(a);if(!isNaN(a))return a}function w(){I(Sa+"ses."+Ta,"*",Ja)}function F(a,b,c,d,e,f){I(Sa+"id."+Ta,a+"."+b+"."+c+"."+d+"."+e+"."+f,kb)}function I(a,b,c){if(!fa||Ua)"localStorage"==G?Ub(a,b,c):("cookie"==G||"cookieAndLocalStorage"==G)&&J(a,b,c,Ea,vb,ja,oa)}function L(){var a=Sa+"id."+Ta,b=Sa+"ses."+Ta;rc(a);rc(b);J(a,"",-1,"/",vb,ja,oa);J(b,"",-1,"/",vb,ja,oa)}function Q(){if(!fa||
-Ua){var a="none"!=G&&!!n("ses"),b=R();b[1]?Nb=b[1]:(Nb=fa?"":P(),b[1]=Nb);T=b[6];a||(b[3]++,T=P(),b[6]=T,b[5]=b[4]);"none"!=G&&(w(),b[4]=Math.round((new Date).getTime()/1E3),b.shift(),F.apply(null,b))}}function R(){if("none"==G)return[];var a=Math.round((new Date).getTime()/1E3),b=n("id");b?(a=b.split("."),a.unshift("0")):a=["1",Nb,a,0,a,""];a[6]||(a[6]=P());return a}function W(a){return mb?"https://"+a:Hb?"http://"+a:("https:"===z.location.protocol?"https":"http")+"://"+a}function x(a){var b=ib.concat(a||
-[]);H.webPage&&b.push({schema:"iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0",data:{id:V()}});H.performanceTiming&&(a=ba())&&b.push(a);if(A.optimizely){H.optimizelySummary&&(a=ua(),O(a,function(a){b.push(a)}));H.optimizelyXSummary&&(a=ya(),O(a,function(a){b.push(a)}));if(H.optimizelyExperiments){var c=la();for(a=0;a<c.length;a++)b.push(c[a])}if(H.optimizelyStates)for(c=pa(),a=0;a<c.length;a++)b.push(c[a]);if(H.optimizelyVariations)for(c=qa(),a=0;a<c.length;a++)b.push(c[a]);H.optimizelyVisitor&&
-(a=ra())&&b.push(a);if(H.optimizelyAudiences)for(c=sa(),a=0;a<c.length;a++)b.push(c[a]);if(H.optimizelyDimensions)for(c=ta(),a=0;a<c.length;a++)b.push(c[a])}H.parrable&&(a=za())&&b.push(a);H.gdprBasis&&Va.gdprBasis&&(a=Va.gdprBasis?{schema:"iglu:com.snowplowanalytics.snowplow/gdpr/jsonschema/1-0-0",data:{basisForProcessing:Va.gdprBasis,documentId:Va.gdprDocId||null,documentVersion:Va.gdprDocVer||null,documentDescription:Va.gdprDocDesc||null}}:void 0,a&&b.push(a));H.clientHints&&Ba&&b.push({schema:"iglu:org.ietf/http_client_hints/jsonschema/1-0-0",
-data:Ba});return b}function Y(){Db&&null!=e.pageViewId||(e.pageViewId=P())}function V(){null==e.pageViewId&&(e.pageViewId=P());return e.pageViewId}function ba(){var a="navigationStart redirectStart redirectEnd fetchStart domainLookupStart domainLookupEnd connectStart secureConnectionStart connectEnd requestStart responseStart responseEnd unloadEventStart unloadEventEnd domLoading domInteractive domContentLoadedEventStart domContentLoadedEventEnd domComplete loadEventStart loadEventEnd msFirstPaint chromeFirstPaint requestEnd proxyStart proxyEnd".split(" "),
-b=A.performance||A.mozPerformance||A.msPerformance||A.webkitPerformance;if(b){var c={},d;for(d in b.timing)sc(d,a)&&null!==b.timing[d]&&(c[d]=b.timing[d]);delete c.requestEnd;return{schema:"iglu:org.w3/PerformanceTiming/jsonschema/1-0-0",data:c}}}function U(a,b){if(A.optimizely&&A.optimizely.data){var c=A.optimizely.data[a];"undefined"!==typeof b&&void 0!==c&&(c=c[b])}return c}function Z(a,b){if(A.optimizely&&"function"===typeof A.optimizely.get){var c=A.optimizely.get(a);"undefined"!==typeof b&&
-void 0!==c&&(c=c[b])}return c}function ka(){var a=U("state"),b=U("experiments");return ca(a&&b&&a.activeExperiments,function(c){var d=b[c];return{activeExperimentId:c.toString(),variation:a.variationIdsMap[c][0].toString(),conditional:d&&d.conditional,manual:d&&d.manual,name:d&&d.name}})}function E(){var a=Z("state"),b=a&&a.getActiveExperimentIds(),c=a&&a.getVariationMap(),d=Z("visitor");return ca(b,function(a){var b=c[a],e=b&&b.name&&b.name.toString()||null;b=b&&b.id;var f=d&&d.visitorId&&d.visitorId.toString()||
-null;return{experimentId:nb(a)||null,variationName:e,variation:nb(b)||null,visitorId:f}})}function la(){var a=U("experiments");if(a){var b=[],c;for(c in a)if(a.hasOwnProperty(c)){var d={};d.id=c;var e=a[c];d.code=e.code;d.manual=e.manual;d.conditional=e.conditional;d.name=e.name;d.variationIds=e.variation_ids;b.push({schema:"iglu:com.optimizely/experiment/jsonschema/1-0-0",data:d})}return b}return[]}function pa(){var a=[],b=U("experiments");if(b)for(var c in b)b.hasOwnProperty(c)&&a.push(c);if(b=
-U("state")){c=[];for(var d=b.activeExperiments||[],e=0;e<a.length;e++){var f=a[e],g={};g.experimentId=f;g.isActive=sc(a[e],d);g.variationIndex=(b.variationMap||{})[f];g.variationName=(b.variationNamesMap||{})[f];var h=b.variationIdsMap||{};h[f]&&1===h[f].length&&(g.variationId=h[f][0]);c.push({schema:"iglu:com.optimizely/state/jsonschema/1-0-0",data:g})}return c}return[]}function qa(){var a=U("variations");if(a){var b=[],c;for(c in a)if(a.hasOwnProperty(c)){var d={};d.id=c;var e=a[c];d.name=e.name;
-d.code=e.code;b.push({schema:"iglu:com.optimizely/variation/jsonschema/1-0-0",data:d})}return b}return[]}function ra(){var a=U("visitor");if(a){var b={};b.browser=a.browser;b.browserVersion=a.browserVersion;b.device=a.device;b.deviceType=a.deviceType;b.ip=a.ip;var c=a.platform||{};b.platformId=c.id;b.platformVersion=c.version;c=a.location||{};b.locationCity=c.city;b.locationRegion=c.region;b.locationCountry=c.country;b.mobile=a.mobile;b.mobileId=a.mobileId;b.referrer=a.referrer;b.os=a.os;return{schema:"iglu:com.optimizely/visitor/jsonschema/1-0-0",
-data:b}}}function sa(){var a=U("visitor","audiences");if(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push({schema:"iglu:com.optimizely/visitor_audience/jsonschema/1-0-0",data:{id:c,isMember:a[c]}});return b}return[]}function ta(){var a=U("visitor","dimensions");if(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push({schema:"iglu:com.optimizely/visitor_dimension/jsonschema/1-0-0",data:{id:c,value:a[c]}});return b}return[]}function ua(){return ca(ka(),function(a){return{schema:"iglu:com.optimizely.snowplow/optimizely_summary/jsonschema/1-0-0",
-data:a}})}function ya(){return ca(E(),function(a){return{schema:"iglu:com.optimizely.optimizelyx/summary/jsonschema/1-0-0",data:a}})}function za(){var a=window._hawk;if(a){var b={encryptedId:null,optout:null};b.encryptedId=a.browserid;a=new RegExp("(?:^|;)\\s?"+"_parrable_hawk_optout".replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")+"=(.*?)(?:;|$)","i");a=document.cookie.match(a);b.optout=a&&decodeURIComponent(a[1])?a&&decodeURIComponent(a[1]):"false";return{schema:"iglu:com.parrable/encrypted_payload/jsonschema/1-0-0",
-data:b}}}function ea(){!Cb&&S.geolocation&&S.geolocation.getCurrentPosition&&(Cb=!0,S.geolocation.getCurrentPosition(function(a){var b=a.coords;ib.push({schema:"iglu:com.snowplowanalytics.snowplow/geolocation_context/jsonschema/1-1-0",data:{latitude:b.latitude,longitude:b.longitude,latitudeLongitudeAccuracy:b.accuracy,altitude:b.altitude,altitudeAccuracy:b.altitudeAccuracy,bearing:b.heading,speed:b.speed,timestamp:Math.round(a.timestamp)}})}))}function Fa(){var a={};O("__utma __utmb __utmc __utmv __utmz _ga".split(" "),
-function(b){var c=J(b);c&&(a[b]=c)});return{schema:"iglu:com.google.analytics/cookies/jsonschema/1-0-0",data:a}}function Ia(a,b,c,d,e){h();Eb&&Y();Eb=!0;wb=z.title;Ob=a;a=pc(Ob||wb);t.trackPageView(p(xb||Aa),a,p(da||Mb),x((b||[]).concat(c?c():[])),d,e);d=new Date;e=!1;if(X.enabled&&!X.installed){e=X.installed=!0;var f={update:function(){if("undefined"!==typeof window&&"function"===typeof window.addEventListener){var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}}),c=function(){};
-window.addEventListener("testPassiveEventSupport",c,b);window.removeEventListener("testPassiveEventSupport",c,b);f.hasSupport=a}}};f.update();a="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll";Object.prototype.hasOwnProperty.call(f,"hasSupport")?q(z,a,r,{passive:!0}):q(z,a,r);B();a=function(a){var b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:r;return function(a){return q(z,a,b)}};O("click mouseup mousedown mousemove keypress keydown keyup".split(" "),
-a(z));O(["resize","focus","blur"],a(A));a(A,u)("scroll")}if(X.enabled&&(ub||e)){Vb=d.getTime();for(var g in X.configurations)X.configurations.hasOwnProperty(g)&&(d=X.configurations[g],clearInterval(d.activityInterval),La(d,b,c))}}function La(a,b,c){var d=function(a,b){h();a({context:b,pageViewId:V(),minXOffset:Wb,minYOffset:Yb,maxXOffset:Xb,maxYOffset:Zb});B()},e=function(){Vb+a.configHeartBeatTimer>(new Date).getTime()&&d(a.callback,(b||[]).concat(c?c():[]))};a.activityInterval=0!=a.configMinimumVisitLength?
-setTimeout(function(){Vb+a.configMinimumVisitLength>(new Date).getTime()&&d(a.callback,(b||[]).concat(c?c():[]));a.activityInterval=setInterval(e,a.configHeartBeatTimer)},a.configMinimumVisitLength):setInterval(e,a.configHeartBeatTimer)}function wa(a,b,c){if("number"==typeof a&&a==ec(a)&&"number"==typeof b&&b==ec(b))return{configMinimumVisitLength:1E3*a,configHeartBeatTimer:1E3*b,activityInterval:null,callback:c};y("Activity tracking not enabled, please provide integer values for minimumVisitLength and heartBeatDelay.");
-return{}}function Pa(a){var b=a.context,c=a.minXOffset,d=a.minYOffset,e=a.maxXOffset;a=a.maxYOffset;var f=z.title;f!==wb&&(wb=f,Ob=null);t.trackPagePing(p(xb||Aa),pc(Ob||wb),p(da||Mb),D(c),D(e),D(d),D(a),x(b))}function ia(a,b){return""!==a?a+b.charAt(0).toUpperCase()+b.slice(1):b}function K(a){var b,c,d=["","webkit","ms","moz"];if(!jb)for(c=0;c<d.length;c++){var e=d[c];if(z[ia(e,"hidden")]){"prerender"===z[ia(e,"visibilityState")]&&(b=!0);break}else if(!1===z[ia(e,"hidden")])break}b?q(z,e+"visibilitychange",
-function Xd(){z.removeEventListener(e+"visibilitychange",Xd,!1);a()}):a()}d=d||{};d.hasOwnProperty("post")?d.eventMethod=!0===d.post?"post":"get":d.eventMethod=d.eventMethod||"post";d.hasOwnProperty("useStm")||(d.useStm=!0);var Da=function(a){return a.hasOwnProperty("stateStorageStrategy")?a.stateStorageStrategy:Na||qb?Na&&qb?"cookieAndLocalStorage":Na?"cookie":"localStorage":"none"},ma=function(a){return a.hasOwnProperty("anonymousTracking")?!0===a.anonymousTracking.withSessionTracking:!1},na=function(a){return a.hasOwnProperty("anonymousTracking")?
-!0===a.anonymousTracking.withServerAnonymisation:!1},lb=Object.freeze({consent:"consent",contract:"contract",legalObligation:"legal_obligation",vitalInterests:"vital_interests",publicTask:"public_task",legitimateInterests:"legitimate_interests"}),t=Ud(!0,function(a){var b=Math.round((new Date).getTime()/1E3),c=n("ses"),d=R(),f=d[0],g=d[1],Wd=d[2],k=d[3],l=d[4],m=d[5];d=d[6];var v=Pb?!!J(Pb):!1;Ga||v?L():("0"===f?(T=d,c||"none"==G||(k++,m=l,T=P()),ha=k):(new Date).getTime()-Oa>1E3*Ja&&(T=P(),ha++),
-a.add("vp",wd()),a.add("ds",xd()),a.add("vid",Ua?ha:fa?null:ha),a.add("sid",Ua?T:fa?null:T),a.add("duid",fa?null:g),a.add("uid",fa?null:yb),h(),a.add("refr",p(da||Mb)),a.add("url",p(xb||Aa)),"none"!=G&&(F(g,Wd,ha,b,m,T),w()),Oa=(new Date).getTime());b=sb;c=new Date;f=Pb?!!J(Pb):!1;Ga||f||(Ca.enqueueRequest(a.build(),Qb),e.expireDateTime=c.getTime()+b)}),Ha=!1,l={},va={},Ka={},z=document,A=window,S=navigator,Ra=tc(z.domain,A.location.href,dc()),Ma=cc(Ra[0]),Aa=Ra[1],Mb=Ra[2],da,ob=d.hasOwnProperty("platform")?
-d.platform:"web",Qb,pb=d.hasOwnProperty("postPath")?d.postPath:"/com.snowplowanalytics.snowplow/tp2",rb=d.hasOwnProperty("appId")?d.appId:"",xb,wb=z.title,Ob,sb=d.hasOwnProperty("pageUnloadTimer")?d.pageUnloadTimer:500,ub=d.hasOwnProperty("resetActivityTrackingOnPageView")?d.resetActivityTrackingOnPageView:!0,Qa,Wa,Sa=d.hasOwnProperty("cookieName")?d.cookieName:"_sp_",vb=d.hasOwnProperty("cookieDomain")?d.cookieDomain:null,Ea="/",ja=d.hasOwnProperty("cookieSameSite")?d.cookieSameSite:"None",oa=d.hasOwnProperty("cookieSecure")?
-d.cookieSecure:!0,gb=S.doNotTrack||S.msDoNotTrack||A.doNotTrack,Ga=d.hasOwnProperty("respectDoNotTrack")?d.respectDoNotTrack&&("yes"===gb||"1"===gb):!1,Pb,jb,kb=d.hasOwnProperty("cookieLifetime")?d.cookieLifetime:63072E3,Ja=d.hasOwnProperty("sessionCookieTimeout")?d.sessionCookieTimeout:1800,Fb=z.characterSet||z.charset,mb=d.hasOwnProperty("forceSecureTracker")?!0===d.forceSecureTracker:!1,Hb=!mb&&d.hasOwnProperty("forceUnsecureTracker")?!0===d.forceUnsecureTracker:!1,Ua=ma(d),Rb=na(d),fa=!!d.anonymousTracking,
-qb=d.hasOwnProperty("useLocalStorage")?(y("argmap.useLocalStorage is deprecated. Use argmap.stateStorageStrategy instead."),d.useLocalStorage):!0,Na=d.hasOwnProperty("useCookies")?(y("argmap.useCookies is deprecated. Use argmap.stateStorageStrategy instead."),d.useCookies):!0,G=Da(d),Kb=S.userLanguage||S.language,$b=yd(),tb=a+"_"+b,Vb,Oa=(new Date).getTime(),Wb,Xb,Yb,Zb,Lb=Yd,Ta,Nb,T,ha=1,yb,Xa,Ya,Za,$a,ab,bb,cb,db,eb,fb,hb,ac=[],zb=new zd(t,tb,x),bc=new Ad(t,tb,x),Bb=new Cd(t),Ca=new Ed(a,b,e,"localStorage"==
-G||"cookieAndLocalStorage"==G,d.eventMethod,pb,d.bufferSize,d.maxPostBytes||4E4,d.useStm,d.maxLocalStorageQueueSize||1E3,d.connectionTimeout||5E3,Rb),Cb=!1,H=d.contexts||{},ib=[],Ab=[],Db=!1,Eb=!1,X={enabled:!1,installed:!1,configurations:{}},Ba=null;H.clientHints&&S.userAgentData&&(Ba={isMobile:S.userAgentData.mobile,brands:S.userAgentData.brands},H.clientHints.includeHighEntropy&&S.userAgentData.getHighEntropyValues&&S.userAgentData.getHighEntropyValues(["platform","platformVersion","architecture",
-"model","uaFullVersion"]).then(function(a){Ba.architecture=a.architecture;Ba.model=a.model;Ba.platform=a.platform;Ba.uaFullVersion=a.uaFullVersion;Ba.platformVersion=a.platformVersion}));var Sb=d.skippedBrowserFeatures||[],Va={};d.hasOwnProperty("discoverRootDomain")&&d.discoverRootDomain&&(vb=td(ja,oa));H.gaCookies&&ib.push(Fa());H.geolocation&&ea();t.setBase64Encoding(d.hasOwnProperty("encodeBase64")?d.encodeBase64:!0);t.setTrackerVersion(c);t.setTrackerNamespace(b);t.setAppId(rb);t.setPlatform(ob);
-t.setTimezone(Zd.jstz.determine().name());t.addPayloadPair("lang",Kb);t.addPayloadPair("cs",Fb);for(var aa in $b)Object.prototype.hasOwnProperty.call($b,aa)&&("res"!==aa&&"cd"!==aa&&"cookie"!==aa||f(aa)?f(aa)||t.addPayloadPair("f_"+aa,$b[aa]):t.addPayloadPair(aa,$b[aa]));m();Q();d.crossDomainLinker&&k(d.crossDomainLinker);l.getDomainSessionIndex=function(){return ha};l.getPageViewId=function(){return V()};l.newSession=function(){var a=Math.round((new Date).getTime()/1E3),b=R(),c=b[1],d=b[2],e=b[3],
-f=b[4],g=b[5],h=b[6];"0"===b[0]?(T=h,"none"!=G&&(e++,g=f,T=P()),ha=e,w()):(T=P(),ha++);"none"!=G&&(F(c,d,ha,a,g,T),w());Oa=(new Date).getTime()};l.getCookieName=function(a){return Sa+a+"."+Ta};l.getUserId=function(){return yb};l.getDomainUserId=function(){return R()[1]};l.getDomainUserInfo=function(){return R()};l.getUserFingerprint=function(){y("User Fingerprinting is no longer supported. This function will be removed in a future release.");return 0};l.setAppId=function(a){y("setAppId is deprecated. Instead use the argmap argument on tracker initialisation: appId");
-t.setAppId(a)};l.setReferrerUrl=function(a){da=a};l.setCustomUrl=function(a){h();var b=Aa,c;v(a)?xb=a:"/"===a.slice(0,1)?xb=v(b)+"://"+Tb(b)+a:(b=p(b),0<=(c=b.indexOf("?"))&&(b=b.slice(0,c)),(c=b.lastIndexOf("/"))!==b.length-1&&(b=b.slice(0,c+1)),xb=b+a)};l.setDocumentTitle=function(a){wb=z.title;Ob=a};l.discardHashTag=function(a){Qa=a};l.discardBrace=function(a){Wa=a};l.setCookieNamePrefix=function(a){y("setCookieNamePrefix is deprecated. Instead use the argmap argument on tracker initialisation: cookieName");
-Sa=a};l.setCookieDomain=function(a){y("setCookieDomain is deprecated. Instead use the argmap argument on tracker initialisation: cookieDomain");vb=cc(a);m()};l.setCookiePath=function(a){Ea=a;m()};l.setVisitorCookieTimeout=function(a){kb=a};l.setSessionCookieTimeout=function(a){y("setSessionCookieTimeout is deprecated. Instead use the argmap argument on tracker initialisation: sessionCookieTimeout");Ja=a};l.setUserFingerprintSeed=function(){y("User Fingerprinting is no longer supported. This function will be removed in a future release.")};
-l.enableUserFingerprint=function(){y("User Fingerprinting is no longer supported. This function will be removed in a future release.")};l.respectDoNotTrack=function(a){y("respectDoNotTrack is deprecated. Instead use the argmap argument on tracker initialisation: respectDoNotTrack");var b=S.doNotTrack||S.msDoNotTrack;Ga=a&&("yes"===b||"1"===b)};l.crossDomainLinker=function(a){k(a)};l.enableLinkClickTracking=function(a,b,c,d){e.hasLoaded?(zb.configureLinkClickTracking(a,b,c,d),zb.addClickListeners()):
-e.registeredOnLoadHandlers.push(function(){zb.configureLinkClickTracking(a,b,c,d);zb.addClickListeners()})};l.refreshLinkClickTracking=function(){e.hasLoaded?zb.addClickListeners():e.registeredOnLoadHandlers.push(function(){zb.addClickListeners()})};l.enableActivityTracking=function(a,b){X.enabled=!0;X.configurations.pagePing=wa(a,b,Pa)};l.enableActivityTrackingCallback=function(a,b,c){X.enabled=!0;X.configurations.callback=wa(a,b,c)};l.updatePageActivity=function(){r()};l.enableFormTracking=function(a,
-b){e.hasLoaded?(bc.configureFormTracking(a),bc.addFormListeners(b)):e.registeredOnLoadHandlers.push(function(){bc.configureFormTracking(a);bc.addFormListeners(b)})};l.killFrame=function(){A.location!==A.top.location&&(A.top.location=A.location)};l.redirectFile=function(a){"file:"===A.location.protocol&&(A.location=a)};l.setOptOutCookie=function(a){Pb=a};l.setCountPreRendered=function(a){jb=a};l.setUserId=function(a){yb=a};l.identifyUser=function(a){l.setUserId(a)};l.setUserIdFromLocation=function(a){h();
-yb=Gb(a,Aa)};l.setUserIdFromReferrer=function(a){h();yb=Gb(a,Mb)};l.setUserIdFromCookie=function(a){yb=J(a)};l.setCollectorCf=function(a){Qb=W(a+".cloudfront.net");Ca.setCollectorUrl(Qb)};l.setCollectorUrl=function(a){Qb=W(a);Ca.setCollectorUrl(Qb)};l.setPlatform=function(a){y("setPlatform is deprecated. Instead use the argmap argument on tracker initialisation: platform");t.setPlatform(a)};l.encodeBase64=function(a){y("encodeBase64 is deprecated. Instead use the argmap argument on tracker initialisation: encodeBase64");
-t.setBase64Encoding(a)};l.flushBuffer=function(){Ca.executeQueue()};l.enableGeolocationContext=ea;l.trackPageView=function(a,b,c,d,e){K(function(){Ia(a,b,c,d,e)})};l.trackStructEvent=function(a,b,c,d,e,f,g,h){K(function(){t.trackStructEvent(a,b,c,d,e,x(f),g,h)})};l.trackSelfDescribingEvent=function(a,b,c,d){K(function(){t.trackSelfDescribingEvent(a,x(b),c,d)})};l.trackUnstructEvent=function(a,b,c){K(function(){t.trackSelfDescribingEvent(a,x(b),c)})};l.addTrans=function(a,b,c,d,e,f,g,h,k,l,p){Xa=a;
-Ya=b;Za=c;$a=d;ab=e;bb=f;cb=g;db=h;eb=k;fb=l;hb=p};l.addItem=function(a,b,c,d,e,f,g,h,k){ac.push({orderId:a,sku:b,name:c,category:d,price:e,quantity:f,currency:g,context:h,tstamp:k})};l.trackTrans=function(){K(function(){var a=hb;t.trackEcommerceTransaction(Xa,Ya,Za,$a,ab,bb,cb,db,eb,x(fb),a);for(a=0;a<ac.length;a++){var b=ac[a],c=b.tstamp;t.trackEcommerceTransactionItem(b.orderId,b.sku,b.name,b.category,b.price,b.quantity,b.currency,x(b.context),c)}hb=fb=eb=db=cb=bb=ab=$a=Za=Ya=Xa=void 0;ac=[]})};
-l.trackLinkClick=function(a,b,c,d,e,f,g){K(function(){t.trackLinkClick(a,b,c,d,e,x(f),g)})};l.trackAdImpression=function(a,b,c,d,e,f,g,h,k,l){K(function(){t.trackAdImpression(a,b,c,d,e,f,g,h,x(k),l)})};l.trackAdClick=function(a,b,c,d,e,f,g,h,k,l,p){K(function(){t.trackAdClick(a,b,c,d,e,f,g,h,k,x(l),p)})};l.trackAdConversion=function(a,b,c,d,e,f,g,h,k,l,p){K(function(){t.trackAdConversion(a,b,c,d,e,f,g,h,k,x(l),p)})};l.trackSocialInteraction=function(a,b,c,d,e){K(function(){t.trackSocialInteraction(a,
-b,c,x(d),e)})};l.trackAddToCart=function(a,b,c,d,e,f,g,h){K(function(){t.trackAddToCart(a,b,c,d,e,f,x(g),h)})};l.trackRemoveFromCart=function(a,b,c,d,e,f,g,h){K(function(){t.trackRemoveFromCart(a,b,c,d,e,f,x(g),h)})};l.trackSiteSearch=function(a,b,c,d,e,f){K(function(){t.trackSiteSearch(a,b,c,d,x(e),f)})};l.trackTiming=function(a,b,c,d,e,f){K(function(){t.trackSelfDescribingEvent({schema:"iglu:com.snowplowanalytics.snowplow/timing/jsonschema/1-0-0",data:{category:a,variable:b,timing:c,label:d}},x(e),
-f)})};l.trackConsentWithdrawn=function(a,b,c,d,e,f,g){K(function(){t.trackConsentWithdrawn(a,b,c,d,e,x(f),g)})};l.trackConsentGranted=function(a,b,c,d,e,f,g){K(function(){t.trackConsentGranted(a,b,c,d,e,x(f),g)})};l.trackEnhancedEcommerceAction=function(a,b,c){var d=Ab.concat(b||[]);Ab.length=0;K(function(){t.trackSelfDescribingEvent({schema:"iglu:com.google.analytics.enhanced-ecommerce/action/jsonschema/1-0-0",data:{action:a}},x(d),c)})};l.addEnhancedEcommerceActionContext=function(a,b,c,d,e,f,g,
-h,k,l){Ab.push({schema:"iglu:com.google.analytics.enhanced-ecommerce/actionFieldObject/jsonschema/1-0-0",data:{id:a,affiliation:b,revenue:Ib(c),tax:Ib(d),shipping:Ib(e),coupon:f,list:g,step:nb(h),option:k,currency:l}})};l.addEnhancedEcommerceImpressionContext=function(a,b,c,d,e,f,g,h,k){Ab.push({schema:"iglu:com.google.analytics.enhanced-ecommerce/impressionFieldObject/jsonschema/1-0-0",data:{id:a,name:b,list:c,brand:d,category:e,variant:f,position:nb(g),price:Ib(h),currency:k}})};l.addEnhancedEcommerceProductContext=
-function(a,b,c,d,e,f,g,h,k,l,p){Ab.push({schema:"iglu:com.google.analytics.enhanced-ecommerce/productFieldObject/jsonschema/1-0-0",data:{id:a,name:b,list:c,brand:d,category:e,variant:f,price:Ib(g),quantity:nb(h),coupon:k,position:nb(l),currency:p}})};l.addEnhancedEcommercePromoContext=function(a,b,c,d,e){Ab.push({schema:"iglu:com.google.analytics.enhanced-ecommerce/promoFieldObject/jsonschema/1-0-0",data:{id:a,name:b,creative:c,position:d,currency:e}})};l.enableGdprContext=function(a){var b=1<arguments.length&&
-void 0!==arguments[1]?arguments[1]:null,c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,e=lb[a];e?(H.gdprBasis=!0,Va={gdprBasis:e,gdprDocId:b,gdprDocVer:c,gdprDocDesc:d}):y("enableGdprContext failed. basisForProcessing must be set to one of: consent, legalObligation, vitalInterests publicTask, legitimateInterests")};l.addGlobalContexts=function(a){t.addGlobalContexts(a)};l.removeGlobalContexts=function(a){t.removeGlobalContexts(a)};
-l.clearGlobalContexts=function(){t.clearGlobalContexts()};l.enableErrorTracking=function(a,b){Bb.enableErrorTracking(a,b,x())};l.trackError=function(a,b,c,d,e,f){f=x(f);Bb.trackError(a,b,c,d,e,f)};l.preservePageViewId=function(){Db=!0};l.disableAnonymousTracking=function(a){a?(d.stateStorageStrategy=a,d.anonymousTracking=!1,G=Da(d)):d.anonymousTracking=!1;fa=!!d.anonymousTracking;Ua=ma(d);Rb=na(d);Ca.setUseLocalStorage("localStorage"==G||"cookieAndLocalStorage"==G);Ca.setAnonymousTracking(Rb);Q();
-Ca.executeQueue()};l.enableAnonymousTracking=function(a){d.anonymousTracking=a||!0;fa=!!d.anonymousTracking;Ua=ma(d);Rb=na(d);Ua||Y();Ca.setAnonymousTracking(Rb)};l.clearUserData=L;l.setDebug=function(a){Ka=(Ha=(!!a).valueOf())?l:va};va=Gd(l);return Ka=Ha?l:va}function Jc(a,b){function c(){var a;if(!f.hasLoaded)for(f.hasLoaded=!0,a=0;a<f.registeredOnLoadHandlers.length;a++)f.registeredOnLoadHandlers[a]();return!0}var e=document,d=window,f={outQueues:[],bufferFlushers:[],expireDateTime:null,hasLoaded:!1,
-registeredOnLoadHandlers:[],pageViewId:null};d.Snowplow={getTrackerCf:function(a){var c=new Qa(b,"","js-2.17.3",f,{});c.setCollectorCf(a);return c},getTrackerUrl:function(a){var c=new Qa(b,"","js-2.17.3",f,{});c.setCollectorUrl(a);return c},getAsyncTracker:function(){return new Qa(b,"","js-2.17.3",f,{})}};q(d,"beforeunload",function(){O(f.bufferFlushers,function(a){a()});if(f.expireDateTime){do{var a=new Date;if(0===Array.prototype.filter.call(f.outQueues,function(a){return 0<a.length}).length)break}while(a.getTime()<
-f.expireDateTime)}},!1);(function(){var a;e.addEventListener?q(e,"DOMContentLoaded",function k(){e.removeEventListener("DOMContentLoaded",k,!1);c()}):e.attachEvent&&(e.attachEvent("onreadystatechange",function k(){"complete"===e.readyState&&(e.detachEvent("onreadystatechange",k),c())}),e.documentElement.doScroll&&d===d.top&&function p(){if(!f.hasLoaded){try{e.documentElement.doScroll("left")}catch(v){setTimeout(p,0);return}c()}}());/WebKit/.test(navigator.userAgent)&&(a=setInterval(function(){if(f.hasLoaded||
-/loaded|complete/.test(e.readyState))clearInterval(a),c()},10));q(d,"load",c,!1)})();return new ud(Qa,"js-2.17.3",f,a,b)}var $d=function(a,b){for(var c=-1,e=null==a?0:a.length;++c<e&&!1!==b(a[c],c,a););return a},ae=function(a){return function(b,c,e){var d=-1,f=Object(b);e=e(b);for(var h=e.length;h--;){var g=e[a?h:++d];if(!1===c(f[g],g,f))break}return b}}(),Wa="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?
-self:{},Kc="object"==D(Wa)&&Wa&&Wa.Object===Object&&Wa,be="object"==("undefined"===typeof self?"undefined":D(self))&&self&&self.Object===Object&&self,L=Kc||be||Function("return this")(),Y=L.Symbol,Lc=Object.prototype,ce=Lc.hasOwnProperty,de=Lc.toString,ia=Y?Y.toStringTag:void 0,ee=Object.prototype.toString,Mc=Y?Y.toStringTag:void 0,W=function(a){if(null==a)a=void 0===a?"[object Undefined]":"[object Null]";else if(Mc&&Mc in Object(a)){var b=ce.call(a,ia),c=a[ia];try{a[ia]=void 0;var e=!0}catch(f){}var d=
-de.call(a);e&&(b?a[ia]=c:delete a[ia]);a=d}else a=ee.call(a);return a},Q=function(a){return null!=a&&"object"==D(a)},Nc=function(a){return Q(a)&&"[object Arguments]"==W(a)},Oc=Object.prototype,fe=Oc.hasOwnProperty,ge=Oc.propertyIsEnumerable,Pc=Nc(function(){return arguments}())?Nc:function(a){return Q(a)&&fe.call(a,"callee")&&!ge.call(a,"callee")},u=Array.isArray,he=function(){return!1},Ja=ra(function(a,b){var c=(b=b&&!b.nodeType&&b)&&a&&!a.nodeType&&a;b=c&&c.exports===b?L.Buffer:void 0;a.exports=
-(b?b.isBuffer:void 0)||he}),ie=/^(?:0|[1-9]\d*)$/,Xa=function(a,b){var c=D(a);b=null==b?9007199254740991:b;return!!b&&("number"==c||"symbol"!=c&&ie.test(a))&&-1<a&&0==a%1&&a<b},Ya=function(a){return"number"==typeof a&&-1<a&&0==a%1&&9007199254740991>=a},n={};n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0;n["[object Arguments]"]=
-n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1;var je=function(a){return Q(a)&&Ya(a.length)&&!!n[W(a)]},ke=function(a){return function(b){return a(b)}},Qc=ra(function(a,b){var c=b&&!b.nodeType&&b;c=(b=c&&a&&!a.nodeType&&a)&&b.exports===c&&Kc.process;
-a:{try{var e=b&&b.require&&b.require("util").types;if(e){var d=e;break a}d=c&&c.binding&&c.binding("util");break a}catch(f){}d=void 0}a.exports=d}),Rc=Qc&&Qc.isTypedArray,hc=Rc?ke(Rc):je,le=Object.prototype.hasOwnProperty,me=Object.prototype,Sc=function(a,b){return function(c){return a(b(c))}},ne=Sc(Object.keys,Object),oe=Object.prototype.hasOwnProperty,I=function(a){var b=D(a);return null!=a&&("object"==b||"function"==b)},Tc=function(a){if(!I(a))return!1;a=W(a);return"[object Function]"==a||"[object GeneratorFunction]"==
-a||"[object AsyncFunction]"==a||"[object Proxy]"==a},Da=function(a){return null!=a&&Ya(a.length)&&!Tc(a)},La=function(a){if(Da(a)){var b=u(a),c=!b&&Pc(a),e=!b&&!c&&Ja(a),d=!b&&!c&&!e&&hc(a);if(b=b||c||e||d){c=a.length;for(var f=String,h=-1,g=Array(c);++h<c;)g[h]=f(h);c=g}else c=[];f=c.length;for(var k in a)!le.call(a,k)||b&&("length"==k||e&&("offset"==k||"parent"==k)||d&&("buffer"==k||"byteLength"==k||"byteOffset"==k)||Xa(k,f))||c.push(k);a=c}else if(k=a&&a.constructor,a===("function"==typeof k&&
-k.prototype||me)){k=[];for(e in Object(a))oe.call(a,e)&&"constructor"!=e&&k.push(e);a=k}else a=ne(a);return a},Uc=function(a,b){return a&&ae(a,b,La)},Ea=function(a,b){return function(c,e){if(null==c)return c;if(!Da(c))return a(c,e);for(var d=c.length,f=b?d:-1,h=Object(c);(b?f--:++f<d)&&!1!==e(h[f],f,h););return c}}(Uc),Vc=function(a){return a},O=function(a,b){return(u(a)?$d:Ea)(a,"function"==typeof b?b:Vc)},Wc=function(a,b){for(var c=-1,e=null==a?0:a.length,d=0,f=[];++c<e;){var h=a[c];b(h,c,a)&&(f[d++]=
-h)}return f},pe=function(a,b){var c=[];Ea(a,function(a,d,f){b(a,d,f)&&c.push(a)});return c},Za=function(a,b){return a===b||a!==a&&b!==b},ja=function(a,b){for(var c=a.length;c--;)if(Za(a[c][0],b))return c;return-1},qe=Array.prototype.splice;sa.prototype.clear=function(){this.__data__=[];this.size=0};sa.prototype["delete"]=function(a){var b=this.__data__;a=ja(b,a);if(0>a)return!1;a==b.length-1?b.pop():qe.call(b,a,1);--this.size;return!0};sa.prototype.get=function(a){var b=this.__data__;a=ja(b,a);return 0>
-a?void 0:b[a][1]};sa.prototype.has=function(a){return-1<ja(this.__data__,a)};sa.prototype.set=function(a,b){var c=this.__data__,e=ja(c,a);0>e?(++this.size,c.push([a,b])):c[e][1]=b;return this};var lb=sa,$a=L["__core-js_shared__"],Xc=function(){var a=/[^.]+$/.exec($a&&$a.keys&&$a.keys.IE_PROTO||"");return a?"Symbol(src)_1."+a:""}(),re=Function.prototype.toString,ka=function(a){if(null!=a){try{return re.call(a)}catch(b){}return a+""}return""},se=/^\[object .+?Constructor\]$/,te=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,
-"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),la=function(a,b){a=null==a?void 0:a[b];return(!I(a)||Xc&&Xc in a?0:(Tc(a)?te:se).test(ka(a)))?a:void 0},ma=la(L,"Map"),na=la(Object,"create"),ue=Object.prototype.hasOwnProperty,ve=Object.prototype.hasOwnProperty;ba.prototype.clear=function(){this.__data__=na?na(null):{};this.size=0};ba.prototype["delete"]=function(a){a=this.has(a)&&delete this.__data__[a];this.size-=a?1:0;return a};ba.prototype.get=function(a){var b=
-this.__data__;return na?(a=b[a],"__lodash_hash_undefined__"===a?void 0:a):ue.call(b,a)?b[a]:void 0};ba.prototype.has=function(a){var b=this.__data__;return na?void 0!==b[a]:ve.call(b,a)};ba.prototype.set=function(a,b){var c=this.__data__;this.size+=this.has(a)?0:1;c[a]=na&&void 0===b?"__lodash_hash_undefined__":b;return this};var oa=function(a,b){a=a.__data__;var c=D(b);return("string"==c||"number"==c||"symbol"==c||"boolean"==c?"__proto__"!==b:null===b)?a["string"==typeof b?"string":"hash"]:a.map};
-ta.prototype.clear=function(){this.size=0;this.__data__={hash:new ba,map:new (ma||lb),string:new ba}};ta.prototype["delete"]=function(a){a=oa(this,a)["delete"](a);this.size-=a?1:0;return a};ta.prototype.get=function(a){return oa(this,a).get(a)};ta.prototype.has=function(a){return oa(this,a).has(a)};ta.prototype.set=function(a,b){var c=oa(this,a),e=c.size;c.set(a,b);this.size+=c.size==e?0:1;return this};var va=ta;ua.prototype.clear=function(){this.__data__=new lb;this.size=0};ua.prototype["delete"]=
-function(a){var b=this.__data__;a=b["delete"](a);this.size=b.size;return a};ua.prototype.get=function(a){return this.__data__.get(a)};ua.prototype.has=function(a){return this.__data__.has(a)};ua.prototype.set=function(a,b){var c=this.__data__;if(c instanceof lb){var e=c.__data__;if(!ma||199>e.length)return e.push([a,b]),this.size=++c.size,this;c=this.__data__=new va(e)}c.set(a,b);this.size=c.size;return this};var Ka=ua;Ha.prototype.add=Ha.prototype.push=function(a){this.__data__.set(a,"__lodash_hash_undefined__");
-return this};Ha.prototype.has=function(a){return this.__data__.has(a)};var we=function(a,b){for(var c=-1,e=null==a?0:a.length;++c<e;)if(b(a[c],c,a))return!0;return!1},ic=function(a,b,c,e,d,f){var h=c&1,g=a.length,k=b.length;if(g!=k&&!(h&&k>g))return!1;k=f.get(a);var p=f.get(b);if(k&&p)return k==b&&p==a;k=-1;p=!0;var n=c&2?new Ha:void 0;f.set(a,b);for(f.set(b,a);++k<g;){var q=a[k],m=b[k];if(e)var r=h?e(m,q,k,b,a,f):e(q,m,k,a,b,f);if(void 0!==r){if(r)continue;p=!1;break}if(n){if(!we(b,function(a,b){if(!n.has(b)&&
-(q===a||d(q,a,c,e,f)))return n.push(b)})){p=!1;break}}else if(q!==m&&!d(q,m,c,e,f)){p=!1;break}}f["delete"](a);f["delete"](b);return p},Yc=L.Uint8Array,xe=function(a){var b=-1,c=Array(a.size);a.forEach(function(a,d){c[++b]=[d,a]});return c},ye=function(a){var b=-1,c=Array(a.size);a.forEach(function(a){c[++b]=a});return c},Zc=Y?Y.prototype:void 0,ab=Zc?Zc.valueOf:void 0,od=function(a,b,c,e,d,f,h){switch(c){case "[object DataView]":if(a.byteLength!=b.byteLength||a.byteOffset!=b.byteOffset)break;a=a.buffer;
-b=b.buffer;case "[object ArrayBuffer]":if(a.byteLength!=b.byteLength||!f(new Yc(a),new Yc(b)))break;return!0;case "[object Boolean]":case "[object Date]":case "[object Number]":return Za(+a,+b);case "[object Error]":return a.name==b.name&&a.message==b.message;case "[object RegExp]":case "[object String]":return a==b+"";case "[object Map]":var g=xe;case "[object Set]":g||(g=ye);if(a.size!=b.size&&!(e&1))break;if(c=h.get(a))return c==b;e|=2;h.set(a,b);b=ic(g(a),g(b),e,d,f,h);h["delete"](a);return b;
-case "[object Symbol]":if(ab)return ab.call(a)==ab.call(b)}return!1},kc=function(a,b,c){b=b(a);if(!u(a)){a=c(a);c=-1;for(var e=a.length,d=b.length;++c<e;)b[d+c]=a[c]}return b},ze=function(){return[]},Ae=Object.prototype.propertyIsEnumerable,$c=Object.getOwnPropertySymbols,lc=$c?function(a){if(null==a)return[];a=Object(a);return Wc($c(a),function(b){return Ae.call(a,b)})}:ze,pd=Object.prototype.hasOwnProperty,bb=la(L,"DataView"),cb=la(L,"Promise"),db=la(L,"Set"),eb=la(L,"WeakMap"),Be=ka(bb),Ce=ka(ma),
-De=ka(cb),Ee=ka(db),Fe=ka(eb),pa=W;if(bb&&"[object DataView]"!=pa(new bb(new ArrayBuffer(1)))||ma&&"[object Map]"!=pa(new ma)||cb&&"[object Promise]"!=pa(cb.resolve())||db&&"[object Set]"!=pa(new db)||eb&&"[object WeakMap]"!=pa(new eb))pa=function(a){var b=W(a);if(a=(a="[object Object]"==b?a.constructor:void 0)?ka(a):"")switch(a){case Be:return"[object DataView]";case Ce:return"[object Map]";case De:return"[object Promise]";case Ee:return"[object Set]";case Fe:return"[object WeakMap]"}return b};var gc=
-pa,jc=Object.prototype.hasOwnProperty,rb=Ia,Ge=function(a,b,c,e){var d=c.length,f=d,h=!e;if(null==a)return!f;for(a=Object(a);d--;){var g=c[d];if(h&&g[2]?g[1]!==a[g[0]]:!(g[0]in a))return!1}for(;++d<f;){g=c[d];var k=g[0],p=a[k],n=g[1];if(h&&g[2]){if(void 0===p&&!(k in a))return!1}else{g=new Ka;if(e)var q=e(p,n,k,a,b,g);if(void 0===q?!rb(n,p,3,e,g):!q)return!1}}return!0},He=function(a){for(var b=La(a),c=b.length;c--;){var e=b[c],d=a[e];b[c]=[e,d,d===d&&!I(d)]}return b},ad=function(a,b){return function(c){return null==
-c?!1:c[a]===b&&(void 0!==b||a in Object(c))}},Ie=function(a){var b=He(a);return 1==b.length&&b[0][2]?ad(b[0][0],b[0][1]):function(c){return c===a||Ge(c,a,b)}},Ma=function(a){return"symbol"==D(a)||Q(a)&&"[object Symbol]"==W(a)},Je=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ke=/^\w*$/,fb=function(a,b){if(u(a))return!1;var c=D(a);return"number"==c||"symbol"==c||"boolean"==c||null==a||Ma(a)?!0:Ke.test(a)||!Je.test(a)||null!=b&&a in Object(b)};Fb.Cache=va;var Le=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,
-Me=/\\(\\)?/g,Ne=function(a){a=Fb(a,function(a){500===b.size&&b.clear();return a});var b=a.cache;return a}(function(a){var b=[];46===a.charCodeAt(0)&&b.push("");a.replace(Le,function(a,e,d,f){b.push(d?f.replace(Me,"$1"):e||a)});return b}),nc=function(a,b){for(var c=-1,e=null==a?0:a.length,d=Array(e);++c<e;)d[c]=b(a[c],c,a);return d},qd=1/0,bd=Y?Y.prototype:void 0,oc=bd?bd.toString:void 0,cd=function(a,b){return u(a)?a:fb(a,b)?[a]:Ne(null==a?"":mc(a))},Oe=1/0,gb=function(a){if("string"==typeof a||
-Ma(a))return a;var b=a+"";return"0"==b&&1/a==-Oe?"-0":b},dd=function(a,b){b=cd(b,a);for(var c=0,e=b.length;null!=a&&c<e;)a=a[gb(b[c++])];return c&&c==e?a:void 0},F=function(a,b,c){a=null==a?void 0:dd(a,b);return void 0===a?c:a},Pe=function(a,b){return null!=a&&b in Object(a)},sb=function(a,b,c){b=cd(b,a);for(var e=-1,d=b.length,f=!1;++e<d;){var h=gb(b[e]);if(!(f=null!=a&&c(a,h)))break;a=a[h]}if(f||++e!=d)return f;d=null==a?0:a.length;return!!d&&Ya(d)&&Xa(h,d)&&(u(a)||Pc(a))},Qe=function(a,b){return fb(a)&&
-b===b&&!I(b)?ad(gb(a),b):function(c){var e=F(c,a);return void 0===e&&e===b?null!=c&&sb(c,a,Pe):rb(b,e,3)}},Re=function(a){return function(b){return null==b?void 0:b[a]}},Se=function(a){return function(b){return dd(b,a)}},Fa=function(a){return"function"==typeof a?a:null==a?Vc:"object"==D(a)?u(a)?Qe(a[0],a[1]):Ie(a):fb(a)?Re(gb(a)):Se(a)},rd=function(a,b){return(u(a)?Wc:pe)(a,Fa(b))},qc=function(a){return"string"==typeof a||!u(a)&&Q(a)&&"[object String]"==W(a)},Te=function(a,b){var c=-1,e=Da(a)?Array(a.length):
-[];Ea(a,function(a,f,h){e[++c]=b(a,f,h)});return e},ca=function(a,b){return(u(a)?nc:Te)(a,Fa(b))},Z=window,wa=document,xa=window.localStorage,wc=window.sessionStorage,ed=0/0,Ue=/^\s+|\s+$/g,Ve=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,Xe=/^0o[0-7]+$/i,Ye=parseInt,Ze=function(a){if("number"==typeof a)return a;if(Ma(a))return ed;I(a)&&(a="function"==typeof a.valueOf?a.valueOf():a,a=I(a)?a+"":a);if("string"!=typeof a)return 0===a?a:+a;a=a.replace(Ue,"");var b=We.test(a);return b||Xe.test(a)?Ye(a.slice(2),
-b?2:8):Ve.test(a)?ed:+a},fd=1/0,ec=function(a){a?(a=Ze(a),a=a===fd||a===-fd?1.7976931348623157E308*(0>a?-1:1):a===a?a:0):a=0===a?a:0;var b=a%1;return a===a?b?a-b:a:0},Zd=ra(function(a,b){(function(a){var c=function(){var a=function(a){a=-a.getTimezoneOffset();return null!==a?a:0},b=function(a,b,c){var d=new Date;void 0!==a&&d.setFullYear(a);d.setMonth(b);d.setDate(c);return d};return{determine:function(){var d=a(b(void 0,0,2)),e=a(b(void 0,5,2)),f=d-e;return new c.TimeZone(c.olson.timezones[0>f?d+
-",1":0<f?e+",1,s":d+",0"])},date_is_dst:function(c){var d=7<c.getMonth(),e=d?a(b(c.getFullYear(),5,2)):a(b(c.getFullYear(),0,2));c=a(c);c=e-c;return 0>e||d?0!==c:0>c},dst_start_for:function(a){var b=new Date(2010,6,15,1,0,0,0);return{"America/Denver":new Date(2011,2,13,3,0,0,0),"America/Mazatlan":new Date(2011,3,3,3,0,0,0),"America/Chicago":new Date(2011,2,13,3,0,0,0),"America/Mexico_City":new Date(2011,3,3,3,0,0,0),"America/Asuncion":new Date(2012,9,7,3,0,0,0),"America/Santiago":new Date(2012,9,
-3,3,0,0,0),"America/Campo_Grande":new Date(2012,9,21,5,0,0,0),"America/Montevideo":new Date(2011,9,2,3,0,0,0),"America/Sao_Paulo":new Date(2011,9,16,5,0,0,0),"America/Los_Angeles":new Date(2011,2,13,8,0,0,0),"America/Santa_Isabel":new Date(2011,3,5,8,0,0,0),"America/Havana":new Date(2012,2,10,2,0,0,0),"America/New_York":new Date(2012,2,10,7,0,0,0),"Europe/Helsinki":new Date(2013,2,31,5,0,0,0),"Pacific/Auckland":new Date(2011,8,26,7,0,0,0),"America/Halifax":new Date(2011,2,13,6,0,0,0),"America/Goose_Bay":new Date(2011,
-2,13,2,1,0,0),"America/Miquelon":new Date(2011,2,13,5,0,0,0),"America/Godthab":new Date(2011,2,27,1,0,0,0),"Europe/Moscow":b,"Asia/Amman":new Date(2013,2,29,1,0,0,0),"Asia/Beirut":new Date(2013,2,31,2,0,0,0),"Asia/Damascus":new Date(2013,3,6,2,0,0,0),"Asia/Jerusalem":new Date(2013,2,29,5,0,0,0),"Asia/Yekaterinburg":b,"Asia/Omsk":b,"Asia/Krasnoyarsk":b,"Asia/Irkutsk":b,"Asia/Yakutsk":b,"Asia/Vladivostok":b,"Asia/Baku":new Date(2013,2,31,4,0,0),"Asia/Yerevan":new Date(2013,2,31,3,0,0),"Asia/Kamchatka":b,
-"Asia/Gaza":new Date(2010,2,27,4,0,0),"Africa/Cairo":new Date(2010,4,1,3,0,0),"Europe/Minsk":b,"Pacific/Apia":new Date(2010,10,1,1,0,0,0),"Pacific/Fiji":new Date(2010,11,1,0,0,0),"Australia/Perth":new Date(2008,10,1,1,0,0,0)}[a]}}}();c.TimeZone=function(a){var b={"America/Denver":["America/Denver","America/Mazatlan"],"America/Chicago":["America/Chicago","America/Mexico_City"],"America/Santiago":["America/Santiago","America/Asuncion","America/Campo_Grande"],"America/Montevideo":["America/Montevideo",
-"America/Sao_Paulo"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Asia/Beirut","Europe/Helsinki","Asia/Damascus"],"Pacific/Auckland":["Pacific/Auckland","Pacific/Fiji"],"America/Los_Angeles":["America/Los_Angeles","America/Santa_Isabel"],"America/New_York":["America/Havana","America/New_York"],"America/Halifax":["America/Goose_Bay","America/Halifax"],"America/Godthab":["America/Miquelon","America/Godthab"],"Asia/Dubai":["Europe/Moscow"],"Asia/Dhaka":["Asia/Yekaterinburg"],"Asia/Jakarta":["Asia/Omsk"],
-"Asia/Shanghai":["Asia/Krasnoyarsk","Australia/Perth"],"Asia/Tokyo":["Asia/Irkutsk"],"Australia/Brisbane":["Asia/Yakutsk"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Tarawa":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk"],"Asia/Baku":["Asia/Yerevan","Asia/Baku"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]},d=a;a=function(){for(var a=b[d],e=a.length,f=0,h;f<e;f+=1)if(h=a[f],c.date_is_dst(c.dst_start_for(h))){d=h;break}};"undefined"!==
-typeof b[d]&&a();return{name:function(){return d}}};c.olson={};c.olson.timezones={"-720,0":"Pacific/Majuro","-660,0":"Pacific/Pago_Pago","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York",
-"-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Santiago","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Argentina/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,s":"Africa/Windhoek","120,1":"Asia/Beirut","120,0":"Africa/Johannesburg",
-"180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Kolkata","345,0":"Asia/Kathmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin",
-"570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Tarawa","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"};b.jstz=c})()}),ya=window,R=navigator,qb=screen,pb=document,hb=ra(function(a){(function(){var b={rotl:function(a,
-b){return a<<b|a>>>32-b},rotr:function(a,b){return a<<32-b|a>>>b},endian:function(a){if(a.constructor==Number)return b.rotl(a,8)&16711935|b.rotl(a,24)&4278255360;for(var c=0;c<a.length;c++)a[c]=b.endian(a[c]);return a},randomBytes:function(a){for(var b=[];0<a;a--)b.push(Math.floor(256*Math.random()));return b},bytesToWords:function(a){for(var b=[],c=0,f=0;c<a.length;c++,f+=8)b[f>>>5]|=a[c]<<24-f%32;return b},wordsToBytes:function(a){for(var b=[],c=0;c<32*a.length;c+=8)b.push(a[c>>>5]>>>24-c%32&255);
-return b},bytesToHex:function(a){for(var b=[],c=0;c<a.length;c++)b.push((a[c]>>>4).toString(16)),b.push((a[c]&15).toString(16));return b.join("")},hexToBytes:function(a){for(var b=[],c=0;c<a.length;c+=2)b.push(parseInt(a.substr(c,2),16));return b},bytesToBase64:function(a){for(var b=[],c=0;c<a.length;c+=3)for(var f=a[c]<<16|a[c+1]<<8|a[c+2],h=0;4>h;h++)8*c+6*h<=8*a.length?b.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(f>>>6*(3-h)&63)):b.push("=");return b.join("")},
-base64ToBytes:function(a){a=a.replace(/[^A-Z0-9+\/]/ig,"");for(var b=[],c=0,f=0;c<a.length;f=++c%4)0!=f&&b.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c-1))&Math.pow(2,-2*f+8)-1)<<2*f|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c))>>>6-2*f);return b}};a.exports=b})()}),Bb={utf8:{stringToBytes:function(a){return Bb.bin.stringToBytes(unescape(encodeURIComponent(a)))},bytesToString:function(a){return decodeURIComponent(escape(Bb.bin.bytesToString(a)))}},
-bin:{stringToBytes:function(a){for(var b=[],c=0;c<a.length;c++)b.push(a.charCodeAt(c)&255);return b},bytesToString:function(a){for(var b=[],c=0;c<a.length;c++)b.push(String.fromCharCode(a[c]));return b.join("")}}},gd=Bb,Yd=ra(function(a){(function(){var b=gd.utf8,c=gd.bin,e=function(a){a.constructor==String&&(a=b.stringToBytes(a));var c=hb.bytesToWords(a),d=8*a.length;a=[];var e=1732584193,f=-271733879,n=-1732584194,q=271733878,m=-1009589776;c[d>>5]|=128<<24-d%32;c[(d+64>>>9<<4)+15]=d;for(d=0;d<c.length;d+=
-16){for(var r=e,u=f,C=n,B=q,D=m,w=0;80>w;w++){if(16>w)a[w]=c[d+w];else{var y=a[w-3]^a[w-8]^a[w-14]^a[w-16];a[w]=y<<1|y>>>31}y=(e<<5|e>>>27)+m+(a[w]>>>0)+(20>w?(f&n|~f&q)+1518500249:40>w?(f^n^q)+1859775393:60>w?(f&n|f&q|n&q)-1894007588:(f^n^q)-899497514);m=q;q=n;n=f<<30|f>>>2;f=e;e=y}e+=r;f+=u;n+=C;q+=B;m+=D}return[e,f,n,q,m]},d=function(a,b){a=hb.wordsToBytes(e(a));return b&&b.asBytes?a:b&&b.asString?c.bytesToString(a):hb.bytesToHex(a)};d._blocksize=16;d._digestsize=20;a.exports=d})()}),$e=Math.max,
-Bd=function(a){return function(b,c,e){var d=Object(b);if(!Da(b)){var f=Fa(c);b=La(b);c=function(a){return f(d[a],a,d)}}c=a(b,c,e);return-1<c?d[f?b[c]:c]:void 0}}(function(a,b,c){var e=null==a?0:a.length;if(!e)return-1;c=null==c?0:ec(c);0>c&&(c=$e(e+c,0));a:{b=Fa(b);e=a.length;for(c+=-1;++c<e;)if(b(a[c],c,a)){a=c;break a}a=-1}return a}),Dd=window,hd=function(){try{var a=la(Object,"defineProperty");a({},"",{});return a}catch(b){}}(),Fd=function(a,b){var c={};b=Fa(b);Uc(a,function(a,d,f){a=b(a,d,f);
-"__proto__"==d&&hd?hd(c,d,{configurable:!0,enumerable:!0,value:a,writable:!0}):c[d]=a});return c},Hd=function(a){return function(){try{return a.apply(this,arguments)}catch(b){}}},id=ra(function(a){var b="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(b){var c=new Uint8Array(16);a.exports=function(){b(c);return c}}else{var e=Array(16);
-a.exports=function(){for(var a=0,b;16>a;a++)0===(a&3)&&(b=4294967296*Math.random()),e[a]=b>>>((a&3)<<3)&255;return e}}}),B=[],Ga=0;for(;256>Ga;++Ga)B[Ga]=(Ga+256).toString(16).substr(1);var jd=function(a,b){b=b||0;return[B[a[b++]],B[a[b++]],B[a[b++]],B[a[b++]],"-",B[a[b++]],B[a[b++]],"-",B[a[b++]],B[a[b++]],"-",B[a[b++]],B[a[b++]],"-",B[a[b++]],B[a[b++]],B[a[b++]],B[a[b++]],B[a[b++]],B[a[b++]]].join("")},kd,Cb,ib=0,Db=0,P=function(a,b,c){c=b&&c||0;"string"==typeof a&&(b="binary"===a?Array(16):null,
-a=null);a=a||{};a=a.random||(a.rng||id)();a[6]=a[6]&15|64;a[8]=a[8]&63|128;if(b)for(var e=0;16>e;++e)b[c+e]=a[e];return b||jd(a)},Eb=P;Eb.v1=function(a,b,c){c=b&&c||0;var e=b||[];a=a||{};var d=a.node||kd,f=void 0!==a.clockseq?a.clockseq:Cb;if(null==d||null==f){var h=id();null==d&&(d=kd=[h[0]|1,h[1],h[2],h[3],h[4],h[5]]);null==f&&(f=Cb=(h[6]<<8|h[7])&16383)}h=void 0!==a.msecs?a.msecs:(new Date).getTime();var g=void 0!==a.nsecs?a.nsecs:Db+1,k=h-ib+(g-Db)/1E4;0>k&&void 0===a.clockseq&&(f=f+1&16383);
-(0>k||h>ib)&&void 0===a.nsecs&&(g=0);if(1E4<=g)throw Error("uuid.v1(): Can't create more than 10M uuids/sec");ib=h;Db=g;Cb=f;h+=122192928E5;a=(1E4*(h&268435455)+g)%4294967296;e[c++]=a>>>24&255;e[c++]=a>>>16&255;e[c++]=a>>>8&255;e[c++]=a&255;a=h/4294967296*1E4&268435455;e[c++]=a>>>8&255;e[c++]=a&255;e[c++]=a>>>24&15|16;e[c++]=a>>>16&255;e[c++]=f>>>8|128;e[c++]=f&255;for(f=0;6>f;++f)e[c+f]=d[f];return b?b:jd(e)};Eb.v4=P;var Vd=Eb,af=Object.prototype.hasOwnProperty,Kb=function(a,b){return null!=a&&af.call(a,
-b)},bf=function(a,b){for(var c=-1,e=null==a?0:a.length;++c<e;)if(!b(a[c],c,a))return!1;return!0},cf=function(a,b){var c=!0;Ea(a,function(a,d,f){return c=!!b(a,d,f)});return c},Lb=function(a,b,c){var e=u(a)?bf:cf,d;if(d=c)if(d=b,I(c)){var f=D(d);d=("number"==f?Da(c)&&Xa(d,c.length):"string"==f&&d in c)?Za(c[d],a):!1}else d=!1;d&&(b=void 0);return e(a,Fa(b))},Ic=function(a){for(var b=-1,c=null==a?0:a.length,e=0,d=[];++b<c;){var f=a[b];f&&(d[e++]=f)}return d},Pd=Sc(Object.getPrototypeOf,Object),Cc=Function.prototype.toString,
-Qd=Object.prototype.hasOwnProperty,Rd=Cc.call(Object),V=window;if(V.GlobalSnowplowNamespace&&0<V.GlobalSnowplowNamespace.length){var ld=V.GlobalSnowplowNamespace.shift();var md=V[ld];md.q=new Jc(md.q,ld)}else V._snaq=V._snaq||[],V._snaq=new Jc(V._snaq,"_snaq")})()
+"use strict";!function(){function e(e,n){var t,o={};for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&0>n.indexOf(t)&&(o[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(t=Object.getOwnPropertySymbols(e);r<t.length;r++)0>n.indexOf(t[r])&&Object.prototype.propertyIsEnumerable.call(e,t[r])&&(o[t[r]]=e[t[r]])}return o}function n(e,n,t){if(t||2===arguments.length)for(var o,r=0,a=n.length;r<a;r++)!o&&r in n||(o||(o=Array.prototype.slice.call(n,0,r)),o[r]=n[r]);return e.concat(o||Array.prototype.slice.call(n))}function t(){var e,n={},t=[],o=[],a=[],i=function(e,t){null!=t&&""!==t&&(n[e]=t)};return{add:i,addDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&i(n,e[n])},addJson:function(e,n,a){a&&r(a)&&(e={keyIfEncoded:e,keyIfNotEncoded:n,json:a},o.push(e),t.push(e))},addContextEntity:function(e){a.push(e)},getPayload:function(){return n},getJson:function(){return t},withJsonProcessor:function(n){e=n},build:function(){return null==e||e(this,o,a),n}}}function o(e){return function(t,o,r){for(var a=function(n,o,r){if(n=JSON.stringify(n),e){if(r=t.add,n){var a=0,i=0,c=[];if(n){n=unescape(encodeURIComponent(n));do{var s=n.charCodeAt(a++),u=n.charCodeAt(a++),l=n.charCodeAt(a++),f=s<<16|u<<8|l;s=f>>18&63,u=f>>12&63,l=f>>6&63,f&=63,c[i++]=He.charAt(s)+He.charAt(u)+He.charAt(l)+He.charAt(f)}while(a<n.length);a=c.join(""),n=((n=n.length%3)?a.slice(0,n-3):a)+"===".slice(n||3)}n=n.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}r.call(t,o,n)}else t.add(r,n)},i=function(n,o){if(!n){var r=t.getPayload();if(e?r.cx:r.co){var a=(n=JSON).parse;if(e){if(r=r.cx){switch(4-r.length%4){case 2:r+="==";break;case 3:r+="="}r=function(e){var n,t=0,o=0,r="",a=[];if(!e)return e;e+="";do{var i=He.indexOf(e.charAt(t++)),c=He.indexOf(e.charAt(t++));r=He.indexOf(e.charAt(t++));var s=He.indexOf(e.charAt(t++)),u=i<<18|c<<12|r<<6|s;i=u>>16&255,c=u>>8&255,u&=255,a[o++]=64===r?String.fromCharCode(i):64===s?String.fromCharCode(i,c):String.fromCharCode(i,c,u)}while(t<e.length);return r=a.join(""),n=r.replace(/\0+$/,""),decodeURIComponent(n.split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))}(r=r.replace(/-/g,"+").replace(/_/g,"/"))}}else r=r.co;n=a.call(n,r)}else n=void 0}return n?n.data=n.data.concat(o.data):n=o,n},c=void 0,s=0;s<o.length;s++){var u=o[s];"cx"===u.keyIfEncoded?c=i(c,u.json):a(u.json,u.keyIfEncoded,u.keyIfNotEncoded)}o.length=0,r.length&&(c=i(c,o={schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n([],r,!0)}),r.length=0),c&&a(c,"cx","co")}}function r(e){if(!a(e))return!1;for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n))return!0;return!1}function a(e){return null!=e&&(e.constructor==={}.constructor||e.constructor===[].constructor)}function i(){var e=[],n=[];return{getGlobalPrimitives:function(){return e},getConditionalProviders:function(){return n},addGlobalContexts:function(t){for(var o=[],r=[],a=0;a<t.length;a++){var i=t[a];y(i)?o.push(i):g(i)&&r.push(i)}e=e.concat(r),n=n.concat(o)},clearGlobalContexts:function(){n=[],e=[]},removeGlobalContexts:function(t){for(var o=function(t){y(t)?n=n.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})):g(t)&&(e=e.filter((function(e){return JSON.stringify(e)!==JSON.stringify(t)})))},r=0;r<t.length;r++)o(t[r])},getApplicableContexts:function(t){e:{for(var o=0,r=t.getJson();o<r.length;o++){var a=r[o];if("ue_px"===a.keyIfEncoded&&"object"==typeof a.json.data&&"string"==typeof(a=a.json.data.schema)){o=a;break e}}o=""}a="string"==typeof(r=t.getPayload().e)?r:"",r=[];var i=b(e,t,a,o);return r.push.apply(r,i),t=function(e,n,t,o){var r;return e=A(e).map((function(e){e:{if(v(e)){var r=e[0],a=!1;try{a=r({event:n.getPayload(),eventType:t,eventSchema:o})}catch(e){a=!1}if(!0===a){e=b(e[1],n,t,o);break e}}else if(h(e)&&function(e,n){var t=0,o=0,r=e.accept;return Array.isArray(r)?e.accept.some((function(e){return w(e,n)}))&&o++:"string"==typeof r&&w(r,n)&&o++,r=e.reject,Array.isArray(r)?e.reject.some((function(e){return w(e,n)}))&&t++:"string"==typeof r&&w(r,n)&&t++,0<o&&0===t}(e[0],o)){e=b(e[1],n,t,o);break e}e=[]}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}(n,t,a,o),r.push.apply(r,t),r}}}function c(e){for(var n,t=[],o=1;o<arguments.length;o++)t[o-1]=arguments[o];return null!==(n=null==e?void 0:e.map((function(e){if("function"!=typeof e)return e;try{return e.apply(void 0,t)}catch(e){}})).filter(Boolean))&&void 0!==n?n:[]}function s(e){return!!((e=e.split("."))&&1<e.length)&&function(e){if("*"===e[0]||"*"===e[1])return!1;if(0<e.slice(2).length){var n=!1,t=0;for(e=e.slice(2);t<e.length;t++)if("*"===e[t])n=!0;else if(n)return!1;return!0}return 2==e.length}(e)}function u(e){if(null!==(e=/^iglu:((?:(?:[a-zA-Z0-9-_]+|\*).)+(?:[a-zA-Z0-9-_]+|\*))\/([a-zA-Z0-9-_.]+|\*)\/jsonschema\/([1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)-(0|[1-9][0-9]*|\*)$/.exec(e))&&s(e[1]))return e.slice(1,6)}function l(e){if(e=u(e)){var n=e[0];return 5===e.length&&s(n)}return!1}function f(e){return Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))}function d(e){return f(e)?e.every((function(e){return l(e)})):"string"==typeof e&&l(e)}function m(e){return!!(r(e)&&"schema"in e&&"data"in e)&&("string"==typeof e.schema&&"object"==typeof e.data)}function p(e){return"function"==typeof e&&1>=e.length}function g(e){return p(e)||m(e)}function v(e){return!(!Array.isArray(e)||2!==e.length)&&(Array.isArray(e[1])?p(e[0])&&e[1].every(g):p(e[0])&&g(e[1]))}function h(e){return!(!Array.isArray(e)||2!==e.length)&&(!!function(e){var n=0;if(null!=e&&"object"==typeof e&&!Array.isArray(e)){if(Object.prototype.hasOwnProperty.call(e,"accept")){if(!d(e.accept))return!1;n+=1}if(Object.prototype.hasOwnProperty.call(e,"reject")){if(!d(e.reject))return!1;n+=1}return 0<n&&2>=n}return!1}(e[0])&&(Array.isArray(e[1])?e[1].every(g):g(e[1])))}function y(e){return v(e)||h(e)}function w(e,n){if(!l(e))return!1;if(e=u(e),n=null!==(n=/^iglu:([a-zA-Z0-9-_.]+)\/([a-zA-Z0-9-_]+)\/jsonschema\/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$/.exec(n))?n.slice(1,6):void 0,e&&n){if(!function(e,n){if(n=n.split("."),e=e.split("."),n&&e){if(n.length!==e.length)return!1;for(var t=0;t<e.length;t++)if(!k(n[t],e[t]))return!1;return!0}return!1}(e[0],n[0]))return!1;for(var t=1;5>t;t++)if(!k(e[t],n[t]))return!1;return!0}return!1}function k(e,n){return e&&n&&"*"===e||e===n}function A(e){return Array.isArray(e)?e:[e]}function b(e,n,t,o){var r;return e=A(e).map((function(e){e:if(m(e))e=[e];else{if(p(e)){n:{var r=void 0;try{if(r=e({event:n.getPayload(),eventType:t,eventSchema:o}),Array.isArray(r)&&r.every(m)||m(r)){var a=r;break n}a=void 0;break n}catch(e){}a=void 0}if(m(a)){e=[a];break e}if(Array.isArray(a)){e=a;break e}}e=void 0}if(e&&0!==e.length)return e})),(r=[]).concat.apply(r,e.filter((function(e){return null!=e&&e.filter(Boolean)})))}function _(e){void 0===e&&(e={});var t,r,c,s,u,l,f,d=e.base64,m=e.corePlugins,p=null!=m?m:[];t=null==d||d,r=p,c=e.callback,s=function(e){return{addPluginContexts:function(t){var o=t?n([],t,!0):[];return e.forEach((function(e){try{e.contexts&&o.push.apply(o,e.contexts())}catch(e){Ge.error("Error adding plugin contexts",e)}})),o}}}(r),u=i(),l=t,f={};var g=Te(Te({},e={track:function(e,n,t){e.withJsonProcessor(o(l)),e.add("eid",Ve.v4()),e.addDict(f),t=function(e){return null==e?{type:"dtm",value:(new Date).getTime()}:"number"==typeof e?{type:"dtm",value:e}:"ttm"===e.type?{type:"ttm",value:e.value}:{type:"dtm",value:e.value||(new Date).getTime()}}(t),e.add(t.type,t.value.toString()),n=function(e,n){e=u.getApplicableContexts(e);var t=[];return n&&n.length&&t.push.apply(t,n),e&&e.length&&t.push.apply(t,e),t}(e,s.addPluginContexts(n)),void 0!==(n=n&&n.length?{schema:"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",data:n}:void 0)&&e.addJson("cx","co",n),r.forEach((function(n){try{n.beforeTrack&&n.beforeTrack(e)}catch(e){Ge.error("Plugin beforeTrack",e)}})),"function"==typeof c&&c(e);var a=e.build();return r.forEach((function(e){try{e.afterTrack&&e.afterTrack(a)}catch(e){Ge.error("Plugin afterTrack",e)}})),a},addPayloadPair:function(e,n){f[e]=n},getBase64Encoding:function(){return l},setBase64Encoding:function(e){l=e},addPayloadDict:function(e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(f[n]=e[n])},resetPayloadPairs:function(e){f=a(e)?e:{}},setTrackerVersion:function(e){f.tv=e},setTrackerNamespace:function(e){f.tna=e},setAppId:function(e){f.aid=e},setPlatform:function(e){f.p=e},setUserId:function(e){f.uid=e},setScreenResolution:function(e,n){f.res=e+"x"+n},setViewport:function(e,n){f.vp=e+"x"+n},setColorDepth:function(e){f.cd=e},setTimezone:function(e){f.tz=e},setLang:function(e){f.lang=e},setIpAddress:function(e){f.ip=e},setUseragent:function(e){f.ua=e},addGlobalContexts:function(e){u.addGlobalContexts(e)},clearGlobalContexts:function(){u.clearGlobalContexts()},removeGlobalContexts:function(e){u.removeGlobalContexts(e)}}),{addPlugin:function(e){var n,t;e=e.plugin,p.push(e),null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)}});return null==p||p.forEach((function(e){var n,t;null===(n=e.logger)||void 0===n||n.call(e,Ge),null===(t=e.activateCorePlugin)||void 0===t||t.call(e,g)})),g}function P(e){var n=e.event;return e={schema:"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0",data:{schema:e=n.schema,data:n.data}},(n=t()).add("e","ue"),n.addJson("ue_px","ue_pr",e),n}function T(e){return P({event:e={schema:"iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1",data:S({targetUrl:e.targetUrl,elementId:e.elementId,elementClasses:e.elementClasses,elementTarget:e.elementTarget,elementContent:e.elementContent})}})}function S(e,n){void 0===n&&(n={});var t,o={};for(t in e)(n[t]||null!==e[t]&&void 0!==e[t])&&(o[t]=e[t]);return o}function C(e){return Number.isInteger&&Number.isInteger(e)||"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function O(e){return!(!e||"function"!=typeof e)}function x(e){if(!e||"string"!=typeof e.valueOf()){e=e.text||"";var n=document.getElementsByTagName("title");n&&null!=n[0]&&(e=n[0].text)}return e}function E(e){var n=/^(?:(?:https?|ftp):)\/*(?:[^@]+@)?([^:/#]+)/.exec(e);return n?n[1]:e}function I(e){var n=e.length;return"."===e.charAt(--n)&&(e=e.slice(0,n)),"*."===e.slice(0,2)&&(e=e.slice(1)),e}function j(e){var n=window,t=B("referrer",n.location.href)||B("referer",n.location.href);if(t)return t;if(e)return e;try{if(n.top)return n.top.document.referrer;if(n.parent)return n.parent.document.referrer}catch(e){}return document.referrer}function N(e,n,t,o){return e.addEventListener?(e.addEventListener(n,t,o),!0):e.attachEvent?e.attachEvent("on"+n,t):void(e["on"+n]=t)}function B(e,n){return(e=new RegExp("^[^#]*[?&]"+e+"=([^&#]*)").exec(n))?decodeURIComponent(e[1].replace(/\+/g," ")):null}function D(e,n,t){void 0===t&&(t=63072e3);try{var o=window.localStorage,r=Date.now()+1e3*t;return o.setItem("".concat(e,".expires"),r.toString()),o.setItem(e,n),!0}catch(e){return!1}}function L(e){try{var n=window.localStorage;return n.removeItem(e),n.removeItem(e+".expires"),!0}catch(e){return!1}}function M(e,n,t,o,r,a,i){return 1<arguments.length?document.cookie=e+"="+encodeURIComponent(null!=n?n:"")+(t?"; Expires="+new Date(+new Date+1e3*t).toUTCString():"")+(o?"; Path="+o:"")+(r?"; Domain="+r:"")+(a?"; SameSite="+a:"")+(i?"; Secure":""):decodeURIComponent((("; "+document.cookie).split("; "+e+"=")[1]||"").split(";")[0])}function z(e){return e=parseInt(e),isNaN(e)?void 0:e}function U(e){return e=parseFloat(e),isNaN(e)?void 0:e}function F(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=Object.prototype.hasOwnProperty.call(e,"allowlist"),t=G(e);return H(e,(function(e){e:{var o=0;for(e=V(e);o<e.length;o++)if(t[e[o]]){o=!0;break e}o=!1}return o===n}))}function R(e){if(null==e||"object"!=typeof e||Array.isArray(e))return function(){return!0};var n=e.hasOwnProperty("allowlist"),t=G(e);return H(e,(function(e){return e.name in t===n}))}function V(e){return e.className.match(/\S+/g)||[]}function H(e,n){return e.hasOwnProperty("filter")&&e.filter?e.filter:n}function G(e){var n={};if(e=e.allowlist||e.denylist){Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++)n[e[t]]=!0}return n}function q(e,n,t,o,r,a,i,c,s,u,l,f,d,m,p,g){function v(e){var n=Object.keys(e).map((function(n){return[n,e[n]]})).reduce((function(e,n){return e[n[0]]=n[1].toString(),e}),{});return{evt:n,bytes:h(JSON.stringify(n))}}function h(e){for(var n=0,t=0;t<e.length;t++){var o=e.charCodeAt(t);127>=o?n+=1:2047>=o?n+=2:55296<=o&&57343>=o?(n+=4,t++):n=65535>o?n+3:n+4}return n}function y(e){for(void 0===e&&(e=!1);O.length&&"string"!=typeof O[0]&&"object"!=typeof O[0];)O.shift();if(1>O.length)C=!1;else{if(!_||"string"!=typeof _.valueOf())throw"No collector configured";if(C=!0,I){var n=function(e){for(var n=0,t=0;n<e.length&&!((t+=e[n].bytes)>=i);)n+=1;return n},o=void 0;if(M(O))var r=w(o=_,!0,e),a=n(O);else o=b(O[0]),r=w(o,!1,e),a=1;var c=setTimeout((function(){r.abort(),C=!1}),l),s=function(e){for(var n=0;n<e;n++)O.shift();t&&D(B,JSON.stringify(O.slice(0,u)))};if(r.onreadystatechange=function(){if(4===r.readyState&&200<=r.status)if(clearTimeout(c),300>r.status)s(a),y();else{var e=r.status;(e=!(200<=e&&300>e)&&(!!p.includes(e)||!g.includes(e)))||(Ge.error("Status ".concat(r.status,", will not retry.")),s(a)),C=!1}},M(O)){if(0<(n=O.slice(0,a)).length){if(e=!1,n=n.map((function(e){return e.evt})),E){var d=new Blob([k(A(n))],{type:"application/json"});try{e=navigator.sendBeacon(o,d)}catch(n){e=!1}}!0===e?(s(a),y()):r.send(k(A(n)))}}else r.send()}else if(f||M(O))C=!1;else{o=new Image(1,1);var m=!0;o.onload=function(){m&&(m=!1,O.shift(),t&&D(B,JSON.stringify(O.slice(0,u))),y())},o.onerror=function(){m&&(C=m=!1)},o.src=b(O[0]),setTimeout((function(){m&&C&&(m=!1,y())}),l)}}}function w(e,n,t){var o=new XMLHttpRequest;for(var r in n?(o.open("POST",e,!t),o.setRequestHeader("Content-Type","application/json; charset=UTF-8")):o.open("GET",e,!t),o.withCredentials=m,f&&o.setRequestHeader("SP-Anonymous","*"),d)Object.prototype.hasOwnProperty.call(d,r)&&o.setRequestHeader(r,d[r]);return o}function k(e){return JSON.stringify({schema:"iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4",data:e})}function A(e){for(var n=(new Date).getTime().toString(),t=0;t<e.length;t++)e[t].stm=n;return e}function b(e){return s?_+e.replace("?","?stm="+(new Date).getTime()+"&"):_+e}var _,P,T,S,C=!1,O=[],x=!0===(o="string"==typeof o?o.toLowerCase():o)||"beacon"===o||"true"===o,E=!(!(x&&window.navigator&&window.navigator.sendBeacon)||(P=window.navigator.userAgent,(S=(S=P).match("(iP.+; CPU .*OS (d+)[_d]*.*) AppleWebKit/"))&&S.length&&parseInt(S[0])<=13||function(e,n,t){return!(!(t=t.match("(Macintosh;.*Mac OS X (d+)_(d+)[_d]*.*) AppleWebKit/"))||!t.length)&&(parseInt(t[0])<=e||parseInt(t[0])===e&&parseInt(t[1])<=n)}(10,15,P)&&(T=P).match("Version/.* Safari/")&&!T.match("Chrom(e|ium)")))&&x,I=!(!window.XMLHttpRequest||!("withCredentials"in new XMLHttpRequest)),j="get"!==o&&I&&("post"===o||x),N=j?r:"/i",B="snowplowOutQueue_".concat(e,"_").concat(j?"post2":"get");if(x&&(d={}),a=t&&function(){try{var e=!!window.localStorage}catch(n){e=!0}if(!e)return!1;try{var n=window.localStorage;return n.setItem("modernizr","modernizr"),n.removeItem("modernizr"),!0}catch(e){return!1}}()&&j&&a||1,t)try{var L=window.localStorage.getItem(B);O=L?JSON.parse(L):[]}catch(P){}Array.isArray(O)||(O=[]),n.outQueues.push(O),I&&1<a&&n.bufferFlushers.push((function(e){C||y(e)}));var M=function(e){return"object"==typeof e[0]};return{enqueueRequest:function(e,n){if(_=n+N,j){if((e=v(e)).bytes>=i)return Ge.warn("Event ("+e.bytes+"B) too big, max is "+i),n=e,void w(_,!0,!1).send(k(A([n.evt])));O.push(e)}else{var o,s="?",l={co:!0,cx:!0},f=!0;for(o in e)e.hasOwnProperty(o)&&!l.hasOwnProperty(o)&&(f?f=!1:s+="&",s+=encodeURIComponent(o)+"="+encodeURIComponent(e[o]));for(var d in l)e.hasOwnProperty(d)&&l.hasOwnProperty(d)&&(s+="&"+d+"="+encodeURIComponent(e[d]));if(0<c&&(l=h(l=b(s)))>=c)return Ge.warn("Event ("+l+"B) too big, max is "+c),void(I&&(e=v(e),w(n+r,!0,!1).send(k(A([e.evt])))));O.push(s)}n=!1,t&&(n=D(B,JSON.stringify(O.slice(0,u)))),C||n&&!(O.length>=a)||y()},executeQueue:function(){C||y()},setUseLocalStorage:function(e){t=e},setAnonymousTracking:function(e){f=e},setCollectorUrl:function(e){_=e+N},setBufferSize:function(e){a=e}}}function J(e,n,t){return"translate.googleusercontent.com"===e?(""===t&&(t=n),e=E(n=null!=(e=(e=/^(?:https?|ftp)(?::\/*(?:[^?]+))([?][^#]+)/.exec(n))&&1<(null==e?void 0:e.length)?B("u",e[1]):null)?e:"")):"cc.bingj.com"!==e&&"webcache.googleusercontent.com"!==e||(e=E(n=document.links[0].href)),[e,n,t]}function Y(e,n){return void 0===n&&(n=1),"0"===e[0]?(e[7]=e[6],e[5]=e[4],e[3]++):e[3]=n,n=Ve.v4(),e[6]=n,e[10]=0,e[8]="",e[9]=void 0,n}function K(e){e[4]=Math.round((new Date).getTime()/1e3)}function W(e,n,o,r,a,i){void 0===i&&(i={});var c=[];e=function(e,n,o,r,a,i){function s(){(qe=J(window.location.hostname,window.location.href,j()))[1]!==Ye&&(Ke=j(Ye)),Je=I(qe[0]),Ye=qe[1]}function u(e){var n=(new Date).getTime();if(null!=(e=e.currentTarget)&&e.href){n="_sp="+Le+"."+n;var t=e.href.split("#"),o=t[0].split("?"),r=o.shift();if(o=o.join("?")){for(var a=!0,i=o.split("&"),c=0;c<i.length;c++)if("_sp="===i[c].substr(0,4)){a=!1,i[c]=n,o=i.join("&");break}a&&(o=n+"&"+o)}else o=n;t[0]=r+"?"+o,n=t.join("#"),e.href=n}}function l(e){for(var n=0;n<document.links.length;n++){var t=document.links[n];!t.spDecorationEnabled&&e(t)&&(N(t,"click",u,!0),N(t,"mousedown",u,!0),t.spDecorationEnabled=!0)}}function f(e){if(Ce){var n=/#.*/;e=e.replace(n,"")}return Oe&&(n=/[{}]/g,e=e.replace(n,"")),e}function d(e){return(e=/^([a-z]+):/.exec(e))?e[1]:null}function m(e){if(e=tn+e+"."+De,"localStorage"==gn){try{var n=window.localStorage,t=n.getItem(e+".expires");if(null===t||+t>Date.now())var o=n.getItem(e);else n.removeItem(e),n.removeItem(e+".expires"),o=void 0}catch(e){o=void 0}return o}if("cookie"==gn||"cookieAndLocalStorage"==gn)return M(e)}function p(){s(),De=Qe((on||Je)+(rn||"/")).slice(0,4)}function g(){Ee=(new Date).getTime()}function v(){var e=h(),n=e[0];n<Ie?Ie=n:n>je&&(je=n),(e=e[1])<Ne?Ne=e:e>Be&&(Be=e),g()}function h(){var e=document.documentElement;return e?[e.scrollLeft||window.pageXOffset,e.scrollTop||window.pageYOffset]:[0,0]}function y(){var e=h(),n=e[0];je=Ie=n,Be=Ne=e=e[1]}function w(){A(tn+"ses."+De,"*",fn)}function k(e){var n=tn+"id."+De;e.shift(),A(n,e=e.join("."),ln)}function A(e,n,t){pn&&!dn||("localStorage"==gn?D(e,n,t):("cookie"==gn||"cookieAndLocalStorage"==gn)&&M(e,n,t,rn,on,an,cn))}function b(e){var n=tn+"id."+De,t=tn+"ses."+De;L(n),L(t),M(n,"",-1,"/",on,an,cn),M(t,"",-1,"/",on,an,cn),null!=e&&e.preserveSession||(Me=Ve.v4(),hn=1),null!=e&&e.preserveUser||(Le=Ve.v4(),ze=null)}function P(e){e&&e.stateStorageStrategy&&(i.stateStorageStrategy=e.stateStorageStrategy,gn=ke(i)),pn=!!i.anonymousTracking,dn=Ae(i),mn=be(i),yn.setUseLocalStorage("localStorage"==gn||"cookieAndLocalStorage"==gn),yn.setAnonymousTracking(mn)}function T(){if(!pn||dn){var e="none"!=gn&&!!m("ses"),n=S();if(n[1])var t=n[1];else t=pn?"":Ve.v4(),n[1]=t;Le=t,Me=e?n[6]:Y(n),hn=n[3],"none"!=gn&&(w(),K(n),k(n))}}function S(){return"none"==gn?["1","",0,0,0,void 0,"","","",void 0,0]:function(e,n,t,o){var r=Math.round((new Date).getTime()/1e3);e?(e=e.split(".")).unshift("0"):e=["1",n,r,o,r,"",t],e[6]&&"undefined"!==e[6]||(e[6]=Ve.v4()),e[7]&&"undefined"!==e[7]||(e[7]=""),e[8]&&"undefined"!==e[8]||(e[8]=""),e[9]&&"undefined"!==e[9]||(e[9]=""),e[10]&&"undefined"!==e[10]||(e[10]=0);var a=function(e,n){return e=parseInt(e),isNaN(e)?n:e};return n=function(e){return e?a(e,void 0):void 0},[e[0],e[1],a(e[2],r),a(e[3],o),a(e[4],r),n(e[5]),e[6],e[7],e[8],n(e[9]),a(e[10],0)]}(m("id")||void 0,Le,Me,hn)}function O(e){return 0===e.indexOf("http")?e:("https:"===document.location.protocol?"https":"http")+"://"+e}function z(){wn&&null!=a.pageViewId||(a.pageViewId=Ve.v4())}function U(){return null==a.pageViewId&&(a.pageViewId=Ve.v4()),a.pageViewId}function F(e){var n=e.title,o=e.context,r=e.timestamp;if(e=e.contextCallback,s(),kn&&z(),kn=!0,en=document.title,n=x((Se=n)||en),Fe.track(function(e){var n=e.pageUrl,o=e.pageTitle;e=e.referrer;var r=t();return r.add("e","pv"),r.add("url",n),r.add("page",o),r.add("refr",e),r}({pageUrl:f(Pe||Ye),pageTitle:n,referrer:f(_e||Ke)}),(o||[]).concat(e?e():[]),r),r=new Date,n=!1,An.enabled&&!An.installed){n=An.installed=!0;var a={update:function(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var e=!1,n=Object.defineProperty({},"passive",{get:function(){e=!0},set:function(){}}),t=function(){};window.addEventListener("testPassiveEventSupport",t,n),window.removeEventListener("testPassiveEventSupport",t,n),a.hasSupport=e}}};a.update();var i="onwheel"in document.createElement("div")?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll";Object.prototype.hasOwnProperty.call(a,"hasSupport")?N(document,i,g,{passive:!0}):N(document,i,g),y(),i=function(e,n){return void 0===n&&(n=g),function(e){return N(document,e,n)}},"click mouseup mousedown mousemove keypress keydown keyup".split(" ").forEach(i(document)),["resize","focus","blur"].forEach(i(window)),i(window,v)("scroll")}if(An.enabled&&(nn||n))for(r in Ee=r.getTime(),r=void 0,An.configurations)(n=An.configurations[r])&&(window.clearInterval(n.activityInterval),R(n,o,e))}function R(e,n,t){var o=function(e,n){s(),e({context:n,pageViewId:U(),minXOffset:Ie,minYOffset:Ne,maxXOffset:je,maxYOffset:Be}),y()},r=function(){Ee+e.configHeartBeatTimer>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[]))};e.activityInterval=0!=e.configMinimumVisitLength?window.setTimeout((function(){Ee+e.configMinimumVisitLength>(new Date).getTime()&&o(e.callback,(n||[]).concat(t?t():[])),e.activityInterval=window.setInterval(r,e.configHeartBeatTimer)}),e.configMinimumVisitLength):window.setInterval(r,e.configHeartBeatTimer)}function V(e){var n=e.minimumVisitLength,t=e.heartbeatDelay;if(e=e.callback,C(n)&&C(t))return{configMinimumVisitLength:1e3*n,configHeartBeatTimer:1e3*t,callback:e};Ge.error("Activity tracking minimumVisitLength & heartbeatDelay must be integers")}function H(e){var n=e.context,o=e.minXOffset,r=e.minYOffset,a=e.maxXOffset,i=e.maxYOffset;(e=document.title)!==en&&(en=e,Se=void 0);var c=(e=Fe).track,s=f(Pe||Ye),u=x(Se||en),l=f(_e||Ke);o=Math.round(o),a=Math.round(a),r=Math.round(r),i=Math.round(i);var d=t();d.add("e","pp"),d.add("url",s),d.add("page",u),d.add("refr",l),o&&!isNaN(Number(o))&&d.add("pp_mix",o.toString()),a&&!isNaN(Number(a))&&d.add("pp_max",a.toString()),r&&!isNaN(Number(r))&&d.add("pp_miy",r.toString()),i&&!isNaN(Number(i))&&d.add("pp_may",i.toString()),c.call(e,d,n)}var G,W,X,Q,Z,$,ee,ne,te,oe,re,ae,ie,ce,se,ue,le,fe,de,me,pe,ge,ve,he,ye,we;i.eventMethod=null!==(G=i.eventMethod)&&void 0!==G?G:"post";var ke=function(e){var n;return null!==(n=e.stateStorageStrategy)&&void 0!==n?n:"cookieAndLocalStorage"},Ae=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withSessionTracking))&&void 0!==t&&t)},be=function(e){var n,t;return"boolean"!=typeof e.anonymousTracking&&(null!==(t=!0===(null===(n=e.anonymousTracking)||void 0===n?void 0:n.withServerAnonymisation))&&void 0!==t&&t)};c.push({beforeTrack:function(e){var n=m("ses"),t=S();if(Ue=!!xe&&!!M(xe),un||Ue)b();else{if("0"===t[0]?(Me=n||"none"==gn?t[6]:Y(t),hn=t[3]):(new Date).getTime()-vn>1e3*fn&&(hn++,Me=Y(t,hn)),K(t),0===t[10]&&(n=e.build(),t[8]=n.eid,n=n.dtm||n.ttm,t[9]=n?parseInt(n):void 0),t[10]+=1,n=e.add,"innerWidth"in window)var o=window.innerWidth,r=window.innerHeight;else o=(r=document.documentElement||document.body).clientWidth,r=r.clientHeight;n.call(e,"vp",0<=o&&0<=r?o+"x"+r:null),n=e.add,r=document.documentElement;var a=document.body;o=Math.max(r.clientWidth,r.offsetWidth,r.scrollWidth),r=Math.max(r.clientHeight,r.offsetHeight,r.scrollHeight,a?Math.max(a.offsetHeight,a.scrollHeight):0),o=isNaN(o)||isNaN(r)?"":o+"x"+r,n.call(e,"ds",o),e.add("vid",dn?hn:pn?null:hn),e.add("sid",dn?Me:pn?null:Me),e.add("duid",pn?null:t[1]),e.add("uid",pn?null:ze),s(),e.add("refr",f(_e||Ke)),e.add("url",f(Pe||Ye)),!bn||dn||pn||(n=t[9],n={userId:t[1],sessionId:t[6],eventIndex:t[10],sessionIndex:t[3],previousSessionId:t[7]||null,storageMechanism:"localStorage"==gn?"LOCAL_STORAGE":"COOKIE_1",firstEventId:t[8]||null,firstEventTimestamp:n?new Date(n).toISOString():null},e.addContextEntity({schema:"iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2",data:n})),"none"!=gn&&(k(t),w()),vn=(new Date).getTime()}}}),(null===(X=null===(W=null==i?void 0:i.contexts)||void 0===W?void 0:W.webPage)||void 0===X||X)&&c.push({contexts:function(){return[{schema:"iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0",data:{id:U()}}]}}),c.push.apply(c,null!==(Q=i.plugins)&&void 0!==Q?Q:[]);var _e,Pe,Se,Ce,Oe,xe,Ee,Ie,je,Ne,Be,De,Le,Me,ze,Ue,Fe=_({base64:i.encodeBase64,corePlugins:c,callback:function(e){un||Ue||yn.enqueueRequest(e.build(),Xe)}}),Re=navigator.userLanguage||navigator.language,He=document.characterSet||document.charset,qe=J(window.location.hostname,window.location.href,j()),Je=I(qe[0]),Ye=qe[1],Ke=qe[2],We=null!==(Z=i.platform)&&void 0!==Z?Z:"web",Xe=O(r),Ze=null!==($=i.postPath)&&void 0!==$?$:"/com.snowplowanalytics.snowplow/tp2",$e=null!==(ee=i.appId)&&void 0!==ee?ee:"",en=document.title,nn=null===(ne=i.resetActivityTrackingOnPageView)||void 0===ne||ne,tn=null!==(te=i.cookieName)&&void 0!==te?te:"_sp_",on=null!==(oe=i.cookieDomain)&&void 0!==oe?oe:void 0,rn="/",an=null!==(re=i.cookieSameSite)&&void 0!==re?re:"None",cn=null===(ae=i.cookieSecure)||void 0===ae||ae,sn=navigator.doNotTrack||navigator.msDoNotTrack||window.doNotTrack,un=void 0!==i.respectDoNotTrack&&(i.respectDoNotTrack&&("yes"===sn||"1"===sn)),ln=null!==(ie=i.cookieLifetime)&&void 0!==ie?ie:63072e3,fn=null!==(ce=i.sessionCookieTimeout)&&void 0!==ce?ce:1800,dn=Ae(i),mn=be(i),pn=!!i.anonymousTracking,gn=ke(i),vn=(new Date).getTime(),hn=1,yn=q(e,a,"localStorage"==gn||"cookieAndLocalStorage"==gn,i.eventMethod,Ze,null!==(se=i.bufferSize)&&void 0!==se?se:1,null!==(ue=i.maxPostBytes)&&void 0!==ue?ue:4e4,null!==(le=i.maxGetBytes)&&void 0!==le?le:0,null===(fe=i.useStm)||void 0===fe||fe,null!==(de=i.maxLocalStorageQueueSize)&&void 0!==de?de:1e3,null!==(me=i.connectionTimeout)&&void 0!==me?me:5e3,mn,null!==(pe=i.customHeaders)&&void 0!==pe?pe:{},null===(ge=i.withCredentials)||void 0===ge||ge,null!==(ve=i.retryStatusCodes)&&void 0!==ve?ve:[],(null!==(he=i.dontRetryStatusCodes)&&void 0!==he?he:[]).concat([400,401,403,410,422])),wn=!1,kn=!1,An={enabled:!1,installed:!1,configurations:{}},bn=null!==(we=null===(ye=i.contexts)||void 0===ye?void 0:ye.session)&&void 0!==we&&we;return i.hasOwnProperty("discoverRootDomain")&&i.discoverRootDomain&&(on=function(e,n){for(var t=window.location.hostname,o="_sp_root_domain_test_"+(new Date).getTime(),r="_test_value_"+(new Date).getTime(),a=t.split("."),i=a.length-1;0<=i;){var c=a.slice(i,a.length).join(".");if(M(o,r,0,"/",c,e,n),M(o)===r){for(M(o,"",-1,"/",c,e,n),t=document.cookie.split("; "),o=[],r=0;r<t.length;r++)"_sp_root_domain_test_"===t[r].substring(0,21)&&o.push(t[r]);for(t=o,o=0;o<t.length;o++)M(t[o],"",-1,"/",c,e,n);return c}--i}return t}(an,cn)),Fe.setTrackerVersion(o),Fe.setTrackerNamespace(n),Fe.setAppId($e),Fe.setPlatform(We),Fe.addPayloadPair("cookie",navigator.cookieEnabled?"1":"0"),Fe.addPayloadPair("cs",He),Fe.addPayloadPair("lang",Re),Fe.addPayloadPair("res",screen.width+"x"+screen.height),Fe.addPayloadPair("cd",screen.colorDepth),p(),T(),i.crossDomainLinker&&l(i.crossDomainLinker),Te(Te({},{getDomainSessionIndex:function(){return hn},getPageViewId:function(){return U()},newSession:function(){var e=S();"0"===e[0]?(Me="none"!=gn?Y(e):e[6],hn=e[3],w()):(hn++,Me=Y(e,hn)),K(e),"none"!=gn&&(k(e),w()),vn=(new Date).getTime()},getCookieName:function(e){return tn+e+"."+De},getUserId:function(){return ze},getDomainUserId:function(){return S()[1]},getDomainUserInfo:function(){return S()},setReferrerUrl:function(e){_e=e},setCustomUrl:function(e){s();var n,t=Ye;d(e)?Pe=e:"/"===e.slice(0,1)?Pe=d(t)+"://"+E(t)+e:(0<=(n=(t=f(t)).indexOf("?"))&&(t=t.slice(0,n)),(n=t.lastIndexOf("/"))!==t.length-1&&(t=t.slice(0,n+1)),Pe=t+e)},setDocumentTitle:function(e){en=document.title,Se=e},discardHashTag:function(e){Ce=e},discardBrace:function(e){Oe=e},setCookiePath:function(e){rn=e,p()},setVisitorCookieTimeout:function(e){ln=e},crossDomainLinker:function(e){l(e)},enableActivityTracking:function(e){An.configurations.pagePing||(An.enabled=!0,An.configurations.pagePing=V(Te(Te({},e),{callback:H})))},enableActivityTrackingCallback:function(e){An.configurations.callback||(An.enabled=!0,An.configurations.callback=V(e))},updatePageActivity:function(){g()},setOptOutCookie:function(e){xe=e},setUserId:function(e){ze=e},setUserIdFromLocation:function(e){s(),ze=B(e,Ye)},setUserIdFromReferrer:function(e){s(),ze=B(e,Ke)},setUserIdFromCookie:function(e){ze=M(e)},setCollectorUrl:function(e){Xe=O(e),yn.setCollectorUrl(Xe)},setBufferSize:function(e){yn.setBufferSize(e)},flushBuffer:function(e){void 0===e&&(e={}),yn.executeQueue(),e.newBufferSize&&yn.setBufferSize(e.newBufferSize)},trackPageView:function(e){void 0===e&&(e={}),F(e)},preservePageViewId:function(){wn=!0},disableAnonymousTracking:function(e){i.anonymousTracking=!1,P(e),T(),yn.executeQueue()},enableAnonymousTracking:function(e){var n;i.anonymousTracking=null===(n=e&&(null==e?void 0:e.options))||void 0===n||n,P(e),dn||z()},clearUserData:b}),{id:e,namespace:n,core:Fe,sharedState:a})}(e,n,o,r,a,i);var s=Te(Te({},e),{addPlugin:function(e){var n,t;s.core.addPlugin(e),null===(t=(n=e.plugin).activateBrowserPlugin)||void 0===t||t.call(n,s)}});return c.forEach((function(e){var n;null===(n=e.activateBrowserPlugin)||void 0===n||n.call(e,s)})),s}function X(e,n){try{$(null!=e?e:Object.keys(Ze),Ze).forEach(n)}catch(e){Ge.error("Function failed",e)}}function Q(e,n,t){try{$(null!=e?e:Object.keys(n),n).forEach(t)}catch(e){Ge.error("Function failed",e)}}function Z(e,n,t,o,r,a){return Ze.hasOwnProperty(e)?null:(Ze[e]=W(e,n,t,o,r,a),Ze[e])}function $(e,n){for(var t=[],o=0;o<e.length;o++){var r=e[o];n.hasOwnProperty(r)?t.push(n[r]):Ge.warn(r+" not configured")}return t}function ee(){function e(){var e;if(!n.hasLoaded)for(n.hasLoaded=!0,e=0;e<n.registeredOnLoadHandlers.length;e++)n.registeredOnLoadHandlers[e]();return!0}var n=new $e,t=document,o=window;return t.visibilityState&&N(t,"visibilitychange",(function(){"hidden"==t.visibilityState&&n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),N(o,"beforeunload",(function(){n.bufferFlushers.forEach((function(e){e(!1)}))}),!1),"loading"===document.readyState?(t.addEventListener?t.addEventListener("DOMContentLoaded",(function n(){t.removeEventListener("DOMContentLoaded",n,!1),e()})):t.attachEvent&&t.attachEvent("onreadystatechange",(function n(){"complete"===t.readyState&&(t.detachEvent("onreadystatechange",n),e())})),N(o,"load",e,!1)):e(),n}function ne(e){return{activateBrowserPlugin:function(){var n;We||(n=navigator).userAgentData&&(We={isMobile:n.userAgentData.mobile,brands:n.userAgentData.brands},e&&n.userAgentData.getHighEntropyValues&&n.userAgentData.getHighEntropyValues(["platform","platformVersion","architecture","model","uaFullVersion"]).then((function(e){We.architecture=e.architecture,We.model=e.model,We.platform=e.platform,We.uaFullVersion=e.uaFullVersion,We.platformVersion=e.platformVersion})))},contexts:function(){return We?[{schema:"iglu:org.ietf/http_client_hints/jsonschema/1-0-0",data:We}]:[]}}}function te(){function e(e,n){var t=window.optimizely;if(t&&"function"==typeof t.get){var o=t.get(e);void 0!==n&&void 0!==o&&(o=o[n])}return o}function n(){return(n=e("state"),t=n&&n.getActiveExperimentIds(),o=n&&n.getVariationMap(),r=e("visitor"),t.map((function(e){var n=o[e],t=n&&n.name&&n.name.toString()||null;n=n&&n.id;var a=r&&r.visitorId&&r.visitorId.toString()||null;return{experimentId:z(e)||null,variationName:t,variation:z(n)||null,visitorId:a}}))).map((function(e){return{schema:"iglu:com.optimizely.optimizelyx/summary/jsonschema/1-0-0",data:e}}));var n,t,o,r}return{contexts:function(){return window.optimizely?n():[]}}}function oe(){return{contexts:function(){var e=window,n=(e=e.performance||e.mozPerformance||e.msPerformance||e.webkitPerformance).timing;return e=e?[{schema:"iglu:org.w3/PerformanceTiming/jsonschema/1-0-0",data:{navigationStart:n.navigationStart,redirectStart:n.redirectStart,redirectEnd:n.redirectEnd,fetchStart:n.fetchStart,domainLookupStart:n.domainLookupStart,domainLookupEnd:n.domainLookupEnd,connectStart:n.connectStart,secureConnectionStart:n.secureConnectionStart,connectEnd:n.connectEnd,requestStart:n.requestStart,responseStart:n.responseStart,responseEnd:n.responseEnd,unloadEventStart:n.unloadEventStart,unloadEventEnd:n.unloadEventEnd,domLoading:n.domLoading,domInteractive:n.domInteractive,domContentLoadedEventStart:n.domContentLoadedEventStart,domContentLoadedEventEnd:n.domContentLoadedEventEnd,domComplete:n.domComplete,loadEventStart:n.loadEventStart,loadEventEnd:n.loadEventEnd,msFirstPaint:n.msFirstPaint,chromeFirstPaint:n.chromeFirstPaint,requestEnd:n.requestEnd,proxyStart:n.proxyStart,proxyEnd:n.proxyEnd}}]:[]}}}function re(){var e;return{activateBrowserPlugin:function(n){e=n.id,un[n.id]=n},contexts:function(){return ln[e]?[{schema:"iglu:com.snowplowanalytics.snowplow/gdpr/jsonschema/1-0-0",data:ln[e]}]:[]},logger:function(e){an=e}}}function ae(e){var n;return void 0===e&&(e=!1),{activateBrowserPlugin:function(t){n=t.id,dn[t.id]=[!1,void 0],e&&ie([n])},contexts:function(){var e,t=null===(e=dn[n])||void 0===e?void 0:e[1];return t?[t]:[]}}}function ie(e){void 0===e&&(e=Object.keys(dn));var n=navigator;e.forEach((function(e){dn[e]=[!0,cn]})),!mn&&n.geolocation&&n.geolocation.getCurrentPosition&&(mn=!0,n.geolocation.getCurrentPosition((function(e){var n=e.coords;for(var t in cn={schema:"iglu:com.snowplowanalytics.snowplow/geolocation_context/jsonschema/1-1-0",data:{latitude:n.latitude,longitude:n.longitude,latitudeLongitudeAccuracy:n.accuracy,altitude:n.altitude,altitudeAccuracy:n.altitudeAccuracy,bearing:n.heading,speed:n.speed,timestamp:Math.round(e.timestamp)}},dn)Object.prototype.hasOwnProperty.call(dn,t)&&dn[t][0]&&(dn[t]=[!0,cn])})))}function ce(){return{contexts:function(){var e={schema:"iglu:com.google.analytics/cookies/jsonschema/1-0-0",data:{}};return"__utma __utmb __utmc __utmv __utmz _ga".split(" ").forEach((function(n){var t=M(n);t&&(e.data[n]=t)})),[e]}}}function se(){return{activateBrowserPlugin:function(e){vn[e.id]=e}}}function ue(e,n,t){for(var o,r,a,i;null!==(o=n.parentElement)&&null!=o&&"A"!==(r=n.tagName.toUpperCase())&&"AREA"!==r;)n=o;if(null!=(o=n).href){a=(r=o.hostname||E(o.href)).toLowerCase();var s=o.href.replace(r,a);/^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):/i.test(s)||(r=o.id,a=V(o),i=o.target,o=hn[e.id].linkTrackingContent?o.innerHTML:void 0,s=unescape(s),e.core.track(T({targetUrl:s,elementId:r,elementClasses:a,elementTarget:i,elementContent:o}),c(t,n)))}}function le(e,n){return function(t){var o=(t=t||window.event).which||t.button,r=t.target||t.srcElement;"click"===t.type?r&&ue(vn[e],r,n):"mousedown"===t.type?1!==o&&2!==o||!r?hn[e].lastButton=hn[e].lastTarget=null:(hn[e].lastButton=o,hn[e].lastTarget=r):"mouseup"===t.type&&(o===hn[e].lastButton&&r===hn[e].lastTarget&&ue(vn[e],r,n),hn[e].lastButton=hn[e].lastTarget=null)}}function fe(e,n){e=void 0===e?{}:e,hn[n]={linkTrackingContent:e.trackContent,linkTrackingContext:e.context,linkTrackingPseudoClicks:e.pseudoClicks,linkTrackingFilter:F(e.options)}}function de(e){var n,t,o,r=document.links;for(o=0;o<r.length;o++)if(null!==(t=(n=hn[e]).linkTrackingFilter)&&void 0!==t&&t.call(n,r[o])&&!r[o][e]){var a=e,i=r[o];hn[a].linkTrackingPseudoClicks?(N(i,"mouseup",le(a,hn[a].linkTrackingContext),!1),N(i,"mousedown",le(a,hn[a].linkTrackingContext),!1)):N(i,"click",le(a,hn[a].linkTrackingContext),!1),r[o][e]=!0}}function me(e,n){var t,o=n.context,r=e.id+"form",a=function(e){if(e){var n=function(e){return!0},t=null;return!function(e){return null!=e&&0<Array.prototype.slice.call(e).length}(e.forms)?n=F(e.forms):t=e.forms,{forms:t,formFilter:n,fieldFilter:R(e.fields),fieldTransform:pe(e.fields),eventFilter:function(n){var t;return-1<(null!==(t=e.events)&&void 0!==t?t:wn).indexOf(n)}}}return{forms:null,formFilter:function(){return!0},fieldFilter:function(){return!0},fieldTransform:An,eventFilter:function(){return!0}}}(n.options);n=null!==(t=a.forms)&&void 0!==t?t:document.getElementsByTagName("form"),Array.prototype.slice.call(n).forEach((function(n){a.formFilter(n)&&(Array.prototype.slice.call(kn).forEach((function(t){Array.prototype.slice.call(n.getElementsByTagName(t)).forEach((function(n){a.fieldFilter(n)&&!n[r]&&"password"!==n.type.toLowerCase()&&(a.eventFilter(sn.FOCUS_FORM)&&N(n,"focus",ve(e,a,"focus_form",o),!1),a.eventFilter(sn.CHANGE_FORM)&&N(n,"change",ve(e,a,"change_form",o),!1),n[r]=!0)}))})),n[r]||(a.eventFilter(sn.SUBMIT_FORM)&&N(n,"submit",function(e,n,t,o){return function(r){var a;r=r.target;var i=function(e,n){var t=[];return Array.prototype.slice.call(kn).forEach((function(o){o=Array.prototype.slice.call(n.getElementsByTagName(o)).filter((function(n){return n.hasOwnProperty(e)})),Array.prototype.slice.call(o).forEach((function(e){if("submit"!==e.type){var n={name:ge(e),value:e.value,nodeName:e.nodeName};e.type&&"INPUT"===e.nodeName.toUpperCase()&&(n.type=e.type),"checkbox"!==e.type&&"radio"!==e.type||e.checked||(n.value=null),t.push(n)}}))})),t}(t,r);i.forEach((function(e){var t;e.value=null!==(t=n.fieldTransform(e.value,e))&&void 0!==t?t:e.value})),e.core.track(function(e){return P({event:{schema:"iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0",data:S({formId:e.formId,formClasses:e.formClasses,elements:e.elements})}})}({formId:null!==(a=ge(r))&&void 0!==a?a:"",formClasses:V(r),elements:i}),c(o,r,i))}}(e,a,r,o)),n[r]=!0))}))}function pe(e){return e&&Object.prototype.hasOwnProperty.call(e,"transform")?e.transform:An}function ge(e){for(var n=0,t=["name","id","type","nodeName"];n<t.length;n++){var o=t[n];if(0!=e[o]&&"string"==typeof e[o])return e[o]}return null}function ve(e,n,t,o){return function(r){var a;if(r=r.target){var i=r.nodeName&&"INPUT"===r.nodeName.toUpperCase()?r.type:null,s="checkbox"!==r.type||r.checked?n.fieldTransform(r.value,r):null;if("change_form"===t||"checkbox"!==i&&"radio"!==i){var u,l=e.core,f=l.track;for(u=r;u&&u.nodeName&&"HTML"!==u.nodeName.toUpperCase()&&"FORM"!==u.nodeName.toUpperCase();)u=u.parentNode;u=null!=(u=u&&u.nodeName&&"FORM"===u.nodeName.toUpperCase()?ge(u):null)?u:"";var d=null!==(a=ge(r))&&void 0!==a?a:"";a="",u={formId:u,elementId:d,nodeName:r.nodeName,elementClasses:V(r),value:null!=s?s:null},"change_form"===t?(a="iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0",u.type=i):"focus_form"===t&&(a="iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0",u.elementType=i),a=P({event:{schema:a,data:S(u,{value:!0})}}),f.call(l,a,c(o,r,i,s))}}}}function he(){return{activateBrowserPlugin:function(e){bn[e.id]=e}}}function ye(){return{activateBrowserPlugin:function(e){Pn[e.id]=e}}}function we(e,n){void 0===n&&(n=Object.keys(Pn));var t=e.message,o=e.filename,r=e.lineno,a=e.colno,i=e.error,c=e.context,s=e.timestamp,u=i&&i.stack?i.stack:null;Q(n,Pn,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/application_error/jsonschema/1-0-1",data:{programmingLanguage:"JAVASCRIPT",message:null!=t?t:"JS Exception. Browser doesn't support ErrorEvent API",stackTrace:u,lineNumber:r,lineColumn:a,fileName:o}}}),c,s)}))}function ke(){return{activateBrowserPlugin:function(e){e.core.setTimezone(Sn.exports.determine("undefined"!=typeof Intl).name())}}}function Ae(){return{activateBrowserPlugin:function(e){On[e.id]=e,xn[e.id]={items:[]}}}}function be(){return{activateBrowserPlugin:function(e){In[e.id]=e,jn[e.id]=[]}}}function _e(){return{activateBrowserPlugin:function(e){Bn[e.id]=e}}}function Pe(){return{activateBrowserPlugin:function(e){Ln[e.id]=e}}}var Te=function(){return Te=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var r in n=arguments[t])Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e},Te.apply(this,arguments)},Se={},Ce="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(Ce){var Oe=new Uint8Array(16);Se=function(){return Ce(Oe),Oe}}else{var xe=Array(16);Se=function(){for(var e,n=0;16>n;n++)0==(3&n)&&(e=4294967296*Math.random()),xe[n]=e>>>((3&n)<<3)&255;return xe}}for(var Ee=[],Ie=0;256>Ie;++Ie)Ee[Ie]=(Ie+256).toString(16).substr(1);var je,Ne,Be=function(e,n){return n=n||0,[Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],"-",Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]],Ee[e[n++]]].join("")},De=Se,Le=0,Me=0,ze=Se,Ue=function(e,n,t){if(t=n&&t||0,"string"==typeof e&&(n="binary"===e?Array(16):null,e=null),(e=(e=e||{}).random||(e.rng||ze)())[6]=15&e[6]|64,e[8]=63&e[8]|128,n)for(var o=0;16>o;++o)n[t+o]=e[o];return n||Be(e)};Ue.v1=function(e,n,t){t=n&&t||0;var o=n||[],r=(e=e||{}).node||je,a=void 0!==e.clockseq?e.clockseq:Ne;if(null==r||null==a){var i=De();null==r&&(r=je=[1|i[0],i[1],i[2],i[3],i[4],i[5]]),null==a&&(a=Ne=16383&(i[6]<<8|i[7]))}i=void 0!==e.msecs?e.msecs:(new Date).getTime();var c=void 0!==e.nsecs?e.nsecs:Me+1,s=i-Le+(c-Me)/1e4;if(0>s&&void 0===e.clockseq&&(a=a+1&16383),(0>s||i>Le)&&void 0===e.nsecs&&(c=0),1e4<=c)throw Error("uuid.v1(): Can't create more than 10M uuids/sec");for(Le=i,Me=c,Ne=a,e=(1e4*(268435455&(i+=122192928e5))+c)%4294967296,o[t++]=e>>>24&255,o[t++]=e>>>16&255,o[t++]=e>>>8&255,o[t++]=255&e,e=i/4294967296*1e4&268435455,o[t++]=e>>>8&255,o[t++]=255&e,o[t++]=e>>>24&15|16,o[t++]=e>>>16&255,o[t++]=a>>>8|128,o[t++]=255&a,a=0;6>a;++a)o[t+a]=r[a];return n||Be(o)};var Fe,Re,Ve=Ue.v4=Ue,He="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";(Re=Fe||(Fe={}))[Re.none=0]="none",Re[Re.error=1]="error",Re[Re.warn=2]="warn",Re[Re.debug=3]="debug",Re[Re.info=4]="info";var Ge=function(e){return void 0===e&&(e=Fe.warn),{setLogLevel:function(n){e=Fe[n]?n:Fe.warn},warn:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.warn&&"undefined"!=typeof console&&(a="Snowplow: "+t,o?console.warn.apply(console,n([a+"\n",o],r,!1)):console.warn.apply(console,n([a],r,!1)))},error:function(t,o){for(var r=[],a=2;a<arguments.length;a++)r[a-2]=arguments[a];e>=Fe.error&&"undefined"!=typeof console&&(a="Snowplow: "+t+"\n",o?console.error.apply(console,n([a+"\n",o],r,!1)):console.error.apply(console,n([a],r,!1)))},debug:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.debug&&"undefined"!=typeof console&&console.debug.apply(console,n(["Snowplow: "+t],o,!1))},info:function(t){for(var o=[],r=1;r<arguments.length;r++)o[r-1]=arguments[r];e>=Fe.info&&"undefined"!=typeof console&&console.info.apply(console,n(["Snowplow: "+t],o,!1))}}}(),qe={},Je={};!function(){var e={rotl:function(e,n){return e<<n|e>>>32-n},rotr:function(e,n){return e<<32-n|e>>>n},endian:function(n){if(n.constructor==Number)return 16711935&e.rotl(n,8)|4278255360&e.rotl(n,24);for(var t=0;t<n.length;t++)n[t]=e.endian(n[t]);return n},randomBytes:function(e){for(var n=[];0<e;e--)n.push(Math.floor(256*Math.random()));return n},bytesToWords:function(e){for(var n=[],t=0,o=0;t<e.length;t++,o+=8)n[o>>>5]|=e[t]<<24-o%32;return n},wordsToBytes:function(e){for(var n=[],t=0;t<32*e.length;t+=8)n.push(e[t>>>5]>>>24-t%32&255);return n},bytesToHex:function(e){for(var n=[],t=0;t<e.length;t++)n.push((e[t]>>>4).toString(16)),n.push((15&e[t]).toString(16));return n.join("")},hexToBytes:function(e){for(var n=[],t=0;t<e.length;t+=2)n.push(parseInt(e.substr(t,2),16));return n},bytesToBase64:function(e){for(var n=[],t=0;t<e.length;t+=3)for(var o=e[t]<<16|e[t+1]<<8|e[t+2],r=0;4>r;r++)8*t+6*r<=8*e.length?n.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(o>>>6*(3-r)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],t=0,o=0;t<e.length;o=++t%4)0!=o&&n.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t-1))&Math.pow(2,-2*o+8)-1)<<2*o|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t))>>>6-2*o);return n}};Je=e}();var Ye={utf8:{stringToBytes:function(e){return Ye.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(Ye.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var n=[],t=0;t<e.length;t++)n.push(255&e.charCodeAt(t));return n},bytesToString:function(e){for(var n=[],t=0;t<e.length;t++)n.push(String.fromCharCode(e[t]));return n.join("")}}},Ke=Ye;!function(){var e=Je,n=Ke.utf8,t=Ke.bin,o=function(o,r){var a=e.wordsToBytes,i=o;i.constructor==String?i=n.stringToBytes(i):"undefined"!=typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(i)?i=Array.prototype.slice.call(i,0):Array.isArray(i)||(i=i.toString()),o=e.bytesToWords(i);var c=8*i.length;i=[];var s=1732584193,u=-271733879,l=-1732584194,f=271733878,d=-1009589776;for(o[c>>5]|=128<<24-c%32,o[15+(c+64>>>9<<4)]=c,c=0;c<o.length;c+=16){for(var m=s,p=u,g=l,v=f,h=d,y=0;80>y;y++){if(16>y)i[y]=o[c+y];else{var w=i[y-3]^i[y-8]^i[y-14]^i[y-16];i[y]=w<<1|w>>>31}w=(s<<5|s>>>27)+d+(i[y]>>>0)+(20>y?1518500249+(u&l|~u&f):40>y?1859775393+(u^l^f):60>y?(u&l|u&f|l&f)-1894007588:(u^l^f)-899497514),d=f,f=l,l=u<<30|u>>>2,u=s,s=w}s+=m,u+=p,l+=g,f+=v,d+=h}return a=a.call(e,[s,u,l,f,d]),r&&r.asBytes?a:r&&r.asString?t.bytesToString(a):e.bytesToHex(a)};o._blocksize=16,o._digestsize=20,qe=o}();var We,Xe,Qe=qe,Ze={},$e=function(){this.outQueues=[],this.bufferFlushers=[],this.hasLoaded=!1,this.registeredOnLoadHandlers=[]},en="undefined"!=typeof window?ee():void 0,nn=Object.freeze({__proto__:null,addGlobalContexts:function(e,n){X(n,(function(n){n.core.addGlobalContexts(e)}))},addPlugin:function(e,n){X(n,(function(n){n.addPlugin(e)}))},clearGlobalContexts:function(e){X(e,(function(e){e.core.clearGlobalContexts()}))},clearUserData:function(e,n){X(n,(function(n){n.clearUserData(e)}))},crossDomainLinker:function(e,n){X(n,(function(n){n.crossDomainLinker(e)}))},disableAnonymousTracking:function(e,n){X(n,(function(n){n.disableAnonymousTracking(e)}))},discardBrace:function(e,n){X(n,(function(n){n.discardBrace(e)}))},discardHashTag:function(e,n){X(n,(function(n){n.discardHashTag(e)}))},enableActivityTracking:function(e,n){X(n,(function(n){n.enableActivityTracking(e)}))},enableActivityTrackingCallback:function(e,n){X(n,(function(n){n.enableActivityTrackingCallback(e)}))},enableAnonymousTracking:function(e,n){X(n,(function(n){n.enableAnonymousTracking(e)}))},flushBuffer:function(e,n){X(n,(function(n){n.flushBuffer(e)}))},newSession:function(e){X(e,(function(e){e.newSession()}))},newTracker:function(e,n,t){if(void 0===t&&(t={}),en)return Z(e,e,"js-".concat("3.8.0"),n,en,t)},preservePageViewId:function(e){X(e,(function(e){e.preservePageViewId()}))},removeGlobalContexts:function(e,n){X(n,(function(n){n.core.removeGlobalContexts(e)}))},setBufferSize:function(e,n){X(n,(function(n){n.setBufferSize(e)}))},setCollectorUrl:function(e,n){X(n,(function(n){n.setCollectorUrl(e)}))},setCookiePath:function(e,n){X(n,(function(n){n.setCookiePath(e)}))},setCustomUrl:function(e,n){X(n,(function(n){n.setCustomUrl(e)}))},setDocumentTitle:function(e,n){X(n,(function(n){n.setDocumentTitle(e)}))},setOptOutCookie:function(e,n){X(n,(function(n){n.setOptOutCookie(e)}))},setReferrerUrl:function(e,n){X(n,(function(n){n.setReferrerUrl(e)}))},setUserId:function(e,n){X(n,(function(n){n.setUserId(e)}))},setUserIdFromCookie:function(e,n){X(n,(function(n){n.setUserIdFromCookie(e)}))},setUserIdFromLocation:function(e,n){X(n,(function(n){n.setUserIdFromLocation(e)}))},setUserIdFromReferrer:function(e,n){X(n,(function(n){n.setUserIdFromReferrer(e)}))},setVisitorCookieTimeout:function(e,n){X(n,(function(n){n.setVisitorCookieTimeout(e)}))},trackPageView:function(e,n){X(n,(function(n){n.trackPageView(e)}))},trackSelfDescribingEvent:function(e,n){X(n,(function(n){n.core.track(P({event:e.event}),e.context,e.timestamp)}))},trackStructEvent:function(e,n){X(n,(function(n){var o=(n=n.core).track,r=e.category,a=e.action,i=e.label,c=e.property,s=e.value,u=t();u.add("e","se"),u.add("se_ca",r),u.add("se_ac",a),u.add("se_la",i),u.add("se_pr",c),u.add("se_va",null==s?void 0:s.toString()),o.call(n,u,e.context,e.timestamp)}))},updatePageActivity:function(e){X(e,(function(e){e.updatePageActivity()}))},version:"3.8.0"}),tn=Object.freeze({__proto__:null,ClientHintsPlugin:ne}),on=Object.freeze({__proto__:null,OptimizelyXPlugin:te}),rn=Object.freeze({__proto__:null,PerformanceTimingPlugin:oe});!function(e){e.consent="consent",e.contract="contract",e.legalObligation="legal_obligation",e.vitalInterests="vital_interests",e.publicTask="public_task",e.legitimateInterests="legitimate_interests"}(Xe||(Xe={}));var an,cn,sn,un={},ln={},fn=Object.freeze({__proto__:null,ConsentPlugin:re,enableGdprContext:function(e,n){void 0===n&&(n=Object.keys(un));var t=e.documentId,o=e.documentVersion,r=e.documentDescription,a=Xe[e.basisForProcessing];a?n.forEach((function(e){un[e]&&(ln[e]={basisForProcessing:a,documentId:null!=t?t:null,documentVersion:null!=o?o:null,documentDescription:null!=r?r:null})})):an.warn("enableGdprContext: basisForProcessing must be one of: consent, contract, legalObligation, vitalInterests, publicTask, legitimateInterests")},get gdprBasis(){return Xe},trackConsentGranted:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.expiry,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0",data:S({expiry:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))},trackConsentWithdrawn:function(e,n){void 0===n&&(n=Object.keys(un)),Q(n,un,(function(n){var t=e.all,o={schema:"iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0",data:S({id:e.id,version:e.version,name:e.name,description:e.description})};t=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0",data:S({all:t})}}),o=[o],n.core.track(t,e.context?e.context.concat(o):o,e.timestamp)}))}}),dn={},mn=!1,pn=Object.freeze({__proto__:null,GeolocationPlugin:ae,enableGeolocationContext:ie}),gn=Object.freeze({__proto__:null,GaCookiesPlugin:ce}),vn={},hn={},yn=Object.freeze({__proto__:null,LinkClickTrackingPlugin:se,enableLinkClickTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(vn)),n.forEach((function(n){vn[n]&&(vn[n].sharedState.hasLoaded?(fe(e,n),de(n)):vn[n].sharedState.registeredOnLoadHandlers.push((function(){fe(e,n),de(n)})))}))},refreshLinkClickTracking:function(e){void 0===e&&(e=Object.keys(vn)),e.forEach((function(e){vn[e]&&(vn[e].sharedState.hasLoaded?de(e):vn[e].sharedState.registeredOnLoadHandlers.push((function(){de(e)})))}))},trackLinkClick:function(e,n){void 0===n&&(n=Object.keys(vn)),Q(n,vn,(function(n){n.core.track(T(e),e.context,e.timestamp)}))}});!function(e){e.CHANGE_FORM="change_form",e.FOCUS_FORM="focus_form",e.SUBMIT_FORM="submit_form"}(sn||(sn={}));var wn=[sn.CHANGE_FORM,sn.FOCUS_FORM,sn.SUBMIT_FORM],kn=["textarea","input","select"],An=function(e){return e},bn={},_n=Object.freeze({__proto__:null,FormTrackingPlugin:he,enableFormTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(bn)),n.forEach((function(n){bn[n]&&(bn[n].sharedState.hasLoaded?me(bn[n],e):bn[n].sharedState.registeredOnLoadHandlers.push((function(){me(bn[n],e)})))}))}}),Pn={},Tn=Object.freeze({__proto__:null,ErrorTrackingPlugin:ye,enableErrorTracking:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(Pn));var t=e.filter,o=e.contextAdder,r=e.context;N(window,"error",(function(e){if(t&&O(t)&&t(e)||null==t){var a=n,i=r||[];o&&O(o)&&(i=i.concat(o(e))),we({message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,context:i},a)}}),!0)},trackError:we}),Sn={exports:{}};!function(e){var n,t,o,r,a,i;n={"America/Denver":["America/Mazatlan"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":"Asia/Amman Asia/Jerusalem Europe/Helsinki Asia/Damascus Africa/Cairo Asia/Gaza Europe/Minsk Africa/Windhoek".split(" "),"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]},t=function(){for(var e=[],n=0;11>=n;n++)for(var t=1;28>=t;t++){var o=-new Date(2014,n,t).getTimezoneOffset();o=null!==o?o:0,e?e&&e[e.length-1]!==o&&e.push(o):e.push()}return e},o=function e(n,t,o){void 0===t&&(t=864e5,o=36e5);var r=new Date(n.getTime()-t).getTime();n=n.getTime()+t;for(var a=new Date(r).getTimezoneOffset(),i=null;r<n-o;){var c=new Date(r);if(c.getTimezoneOffset()!==a){i=c;break}r+=o}return 864e5===t?e(i,36e5,6e4):36e5===t?e(i,6e4,1e3):i},r=function(e,n,t,o){if("N/A"!==t)return t;if("Asia/Beirut"===n){if("Africa/Cairo"===o.name&&13983768e5===e[6].s&&14116788e5===e[6].e||"Asia/Jerusalem"===o.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===n){if("America/Asuncion"===o.name&&14124816e5===e[6].s&&1397358e6===e[6].e||"America/Campo_Grande"===o.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===n){if("America/Sao_Paulo"===o.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===n&&"Pacific/Fiji"===o.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return t},a=function(e){var t=function(){for(var e=[],n=0;n<i.olson.dst_rules.years.length;n++){var t=i.olson.dst_rules.years[n],r=new Date(t,0,1,0,0,1,0).getTime();t=new Date(t,12,31,23,59,59).getTime();for(var a=new Date(r).getTimezoneOffset(),c=null,s=null;r<t-864e5;){var u=new Date(r),l=u.getTimezoneOffset();l!==a&&(l<a&&(c=u),l>a&&(s=u),a=l),r+=864e5}t=!(!c||!s)&&{s:o(c).getTime(),e:o(s).getTime()},e.push(t)}return e}();return function(e){for(var n=0;n<e.length;n++)if(!1!==e[n])return!0;return!1}(t)?function(e,t){for(var o={},a=i.olson.dst_rules.zones,c=a.length,s=n[t],u=0;u<c;u++){for(var l=a[u],f=a[u],d=0,m=0;m<e.length;m++)if(f.rules[m]&&e[m]){if(!(e[m].s>=f.rules[m].s&&e[m].e<=f.rules[m].e)){d="N/A";break}if(d=0,d+=Math.abs(e[m].s-f.rules[m].s),864e6<(d+=Math.abs(f.rules[m].e-e[m].e))){d="N/A";break}}"N/A"!==(f=r(e,t,d,f))&&(o[l.name]=f)}for(var p in o)if(o.hasOwnProperty(p))for(e=0;e<s.length;e++)if(s[e]===p)return p;return t}(t,e):e},(i={determine:function(e){var o=!1,r=function(){var e=0,n=t();return 1<n.length&&(e=n[0]-n[1]),3<n.length?n[0]+",1,weird":0>e?n[0]+",1":0<e?n[1]+",1,s":n[0]+",0"}();return(e||void 0===e)&&(o=function(){var e,n;if(Intl&&"undefined"!=typeof Intl&&void 0!==Intl.DateTimeFormat&&void 0!==(e=Intl.DateTimeFormat())&&void 0!==e.resolvedOptions)return(n=e.resolvedOptions().timeZone)&&(-1<n.indexOf("/")||"UTC"===n)?n:void 0}()),o||(o=i.olson.timezones[r],void 0!==n[o]&&(o=a(o))),{name:function(){return o},using_intl:e||void 0===e,needle:r,offsets:t()}}}).olson=i.olson||{},i.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-660,1,s":"Pacific/Apia","-600,1":"America/Adak","-600,0":"Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Asuncion","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"America/Noronha","-120,1":"America/Noronha","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"UTC","0,1":"Europe/London","0,1,weird":"Africa/Casablanca","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,weird":"Africa/Casablanca","120,1":"Asia/Beirut","120,1,weird":"Africa/Cairo","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Calcutta","345,0":"Asia/Katmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Majuro","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},i.olson.dst_rules={years:[2008,2009,2010,2011,2012,2013,2014],zones:[{name:"Africa/Cairo",rules:[{e:12199572e5,s:12090744e5},{e:1250802e6,s:1240524e6},{e:12858804e5,s:12840696e5},!1,!1,!1,{e:14116788e5,s:1406844e6}]},{name:"America/Asuncion",rules:[{e:12050316e5,s:12243888e5},{e:12364812e5,s:12558384e5},{e:12709548e5,s:12860784e5},{e:13024044e5,s:1317528e6},{e:1333854e6,s:13495824e5},{e:1364094e6,s:1381032e6},{e:13955436e5,s:14124816e5}]},{name:"America/Campo_Grande",rules:[{e:12032172e5,s:12243888e5},{e:12346668e5,s:12558384e5},{e:12667212e5,s:1287288e6},{e:12981708e5,s:13187376e5},{e:13302252e5,s:1350792e6},{e:136107e7,s:13822416e5},{e:13925196e5,s:14136912e5}]},{name:"America/Goose_Bay",rules:[{e:122559486e4,s:120503526e4},{e:125704446e4,s:123648486e4},{e:128909886e4,s:126853926e4},{e:13205556e5,s:129998886e4},{e:13520052e5,s:13314456e5},{e:13834548e5,s:13628952e5},{e:14149044e5,s:13943448e5}]},{name:"America/Havana",rules:[{e:12249972e5,s:12056436e5},{e:12564468e5,s:12364884e5},{e:12885012e5,s:12685428e5},{e:13211604e5,s:13005972e5},{e:13520052e5,s:13332564e5},{e:13834548e5,s:13628916e5},{e:14149044e5,s:13943412e5}]},{name:"America/Mazatlan",rules:[{e:1225008e6,s:12074724e5},{e:12564576e5,s:1238922e6},{e:1288512e6,s:12703716e5},{e:13199616e5,s:13018212e5},{e:13514112e5,s:13332708e5},{e:13828608e5,s:13653252e5},{e:14143104e5,s:13967748e5}]},{name:"America/Mexico_City",rules:[{e:12250044e5,s:12074688e5},{e:1256454e6,s:12389184e5},{e:12885084e5,s:1270368e6},{e:1319958e6,s:13018176e5},{e:13514076e5,s:13332672e5},{e:13828572e5,s:13653216e5},{e:14143068e5,s:13967712e5}]},{name:"America/Miquelon",rules:[{e:12255984e5,s:12050388e5},{e:1257048e6,s:12364884e5},{e:12891024e5,s:12685428e5},{e:1320552e6,s:12999924e5},{e:13520016e5,s:1331442e6},{e:13834512e5,s:13628916e5},{e:14149008e5,s:13943412e5}]},{name:"America/Santa_Isabel",rules:[{e:12250116e5,s:1207476e6},{e:12564612e5,s:12389256e5},{e:12891204e5,s:12685608e5},{e:132057e7,s:13000104e5},{e:13520196e5,s:133146e7},{e:13834692e5,s:13629096e5},{e:14149188e5,s:13943592e5}]},{name:"America/Santiago",rules:[{e:1206846e6,s:1223784e6},{e:1237086e6,s:12552336e5},{e:127035e7,s:12866832e5},{e:13048236e5,s:13138992e5},{e:13356684e5,s:13465584e5},{e:1367118e6,s:13786128e5},{e:13985676e5,s:14100624e5}]},{name:"America/Sao_Paulo",rules:[{e:12032136e5,s:12243852e5},{e:12346632e5,s:12558348e5},{e:12667176e5,s:12872844e5},{e:12981672e5,s:1318734e6},{e:13302216e5,s:13507884e5},{e:13610664e5,s:1382238e6},{e:1392516e6,s:14136876e5}]},{name:"Asia/Amman",rules:[{e:1225404e6,s:12066552e5},{e:12568536e5,s:12381048e5},{e:12883032e5,s:12695544e5},{e:13197528e5,s:13016088e5},!1,!1,{e:14147064e5,s:13959576e5}]},{name:"Asia/Damascus",rules:[{e:12254868e5,s:120726e7},{e:125685e7,s:12381048e5},{e:12882996e5,s:12701592e5},{e:13197492e5,s:13016088e5},{e:13511988e5,s:13330584e5},{e:13826484e5,s:1364508e6},{e:14147028e5,s:13959576e5}]},{name:"Asia/Dubai",rules:[!1,!1,!1,!1,!1,!1,!1]},{name:"Asia/Gaza",rules:[{e:12199572e5,s:12066552e5},{e:12520152e5,s:12381048e5},{e:1281474e6,s:126964086e4},{e:1312146e6,s:130160886e4},{e:13481784e5,s:13330584e5},{e:13802292e5,s:1364508e6},{e:1414098e6,s:13959576e5}]},{name:"Asia/Irkutsk",rules:[{e:12249576e5,s:12068136e5},{e:12564072e5,s:12382632e5},{e:12884616e5,s:12697128e5},!1,!1,!1,!1]},{name:"Asia/Jerusalem",rules:[{e:12231612e5,s:12066624e5},{e:1254006e6,s:1238112e6},{e:1284246e6,s:12695616e5},{e:131751e7,s:1301616e6},{e:13483548e5,s:13330656e5},{e:13828284e5,s:13645152e5},{e:1414278e6,s:13959648e5}]},{name:"Asia/Kamchatka",rules:[{e:12249432e5,s:12067992e5},{e:12563928e5,s:12382488e5},{e:12884508e5,s:12696984e5},!1,!1,!1,!1]},{name:"Asia/Krasnoyarsk",rules:[{e:12249612e5,s:12068172e5},{e:12564108e5,s:12382668e5},{e:12884652e5,s:12697164e5},!1,!1,!1,!1]},{name:"Asia/Omsk",rules:[{e:12249648e5,s:12068208e5},{e:12564144e5,s:12382704e5},{e:12884688e5,s:126972e7},!1,!1,!1,!1]},{name:"Asia/Vladivostok",rules:[{e:12249504e5,s:12068064e5},{e:12564e8,s:1238256e6},{e:12884544e5,s:12697056e5},!1,!1,!1,!1]},{name:"Asia/Yakutsk",rules:[{e:1224954e6,s:120681e7},{e:12564036e5,s:12382596e5},{e:1288458e6,s:12697092e5},!1,!1,!1,!1]},{name:"Asia/Yekaterinburg",rules:[{e:12249684e5,s:12068244e5},{e:1256418e6,s:1238274e6},{e:12884724e5,s:12697236e5},!1,!1,!1,!1]},{name:"Asia/Yerevan",rules:[{e:1224972e6,s:1206828e6},{e:12564216e5,s:12382776e5},{e:1288476e6,s:12697272e5},{e:13199256e5,s:13011768e5},!1,!1,!1]},{name:"Australia/Lord_Howe",rules:[{e:12074076e5,s:12231342e5},{e:12388572e5,s:12545838e5},{e:12703068e5,s:12860334e5},{e:13017564e5,s:1317483e6},{e:1333206e6,s:13495374e5},{e:13652604e5,s:1380987e6},{e:139671e7,s:14124366e5}]},{name:"Australia/Perth",rules:[{e:12068136e5,s:12249576e5},!1,!1,!1,!1,!1,!1]},{name:"Europe/Helsinki",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Europe/Minsk",rules:[{e:12249792e5,s:12068352e5},{e:12564288e5,s:12382848e5},{e:12884832e5,s:12697344e5},!1,!1,!1,!1]},{name:"Europe/Moscow",rules:[{e:12249756e5,s:12068316e5},{e:12564252e5,s:12382812e5},{e:12884796e5,s:12697308e5},!1,!1,!1,!1]},{name:"Pacific/Apia",rules:[!1,!1,!1,{e:13017528e5,s:13168728e5},{e:13332024e5,s:13489272e5},{e:13652568e5,s:13803768e5},{e:13967064e5,s:14118264e5}]},{name:"Pacific/Fiji",rules:[!1,!1,{e:12696984e5,s:12878424e5},{e:13271544e5,s:1319292e6},{e:1358604e6,s:13507416e5},{e:139005e7,s:1382796e6},{e:14215032e5,s:14148504e5}]},{name:"Europe/London",rules:[{e:12249828e5,s:12068388e5},{e:12564324e5,s:12382884e5},{e:12884868e5,s:1269738e6},{e:13199364e5,s:13011876e5},{e:1351386e6,s:13326372e5},{e:13828356e5,s:13646916e5},{e:14142852e5,s:13961412e5}]},{name:"Africa/Windhoek",rules:[{e:12207492e5,s:120744e7},{e:12521988e5,s:12388896e5},{e:12836484e5,s:12703392e5},{e:1315098e6,s:13017888e5},{e:13465476e5,s:13332384e5},{e:13779972e5,s:13652928e5},{e:14100516e5,s:13967424e5}]}]},e.exports=i}(Sn);var Cn=Object.freeze({__proto__:null,TimezonePlugin:ke}),On={},xn={},En=Object.freeze({__proto__:null,EcommercePlugin:Ae,addItem:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&xn[n].items.push(e)}))},addTrans:function(e,n){void 0===n&&(n=Object.keys(On)),n.forEach((function(n){xn[n]&&(xn[n].transaction=e)}))},trackAddToCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackRemoveFromCart:function(e,n){void 0===n&&(n=Object.keys(On)),Q(n,On,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0",data:S({sku:e.sku,quantity:e.quantity,name:e.name,category:e.category,unitPrice:e.unitPrice,currency:e.currency})}});t.call(n,o,e.context,e.timestamp)}))},trackTrans:function(e){void 0===e&&(e=Object.keys(On)),Q(e,On,(function(e){var n=xn[e.id].transaction;if(n){var o=e.core,r=o.track,a=n.orderId,i=n.total,c=n.affiliation,s=n.tax,u=n.shipping,l=n.city,f=n.state,d=n.country,m=n.currency,p=t();p.add("e","tr"),p.add("tr_id",a),p.add("tr_af",c),p.add("tr_tt",i),p.add("tr_tx",s),p.add("tr_sh",u),p.add("tr_ci",l),p.add("tr_st",f),p.add("tr_co",d),p.add("tr_cu",m),r.call(o,p,n.context,n.timestamp)}for(n=0;n<xn[e.id].items.length;n++)o=xn[e.id].items[n],a=(r=e.core).track,i=o.orderId,c=o.sku,s=o.price,u=o.name,l=o.category,f=o.quantity,d=o.currency,(m=t()).add("e","ti"),m.add("ti_id",i),m.add("ti_sk",c),m.add("ti_nm",u),m.add("ti_ca",l),m.add("ti_pr",s),m.add("ti_qu",f),m.add("ti_cu",d),a.call(r,m,o.context,o.timestamp);xn[e.id]={items:[]}}))}}),In={},jn={},Nn=Object.freeze({__proto__:null,EnhancedEcommercePlugin:be,addEnhancedEcommerceActionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.affiliation,r=e.revenue,a=e.tax,i=e.shipping,c=e.coupon,s=e.list,u=e.step,l=e.option,f=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/actionFieldObject/jsonschema/1-0-0",data:{id:t,affiliation:o,revenue:U(r),tax:U(a),shipping:U(i),coupon:c,list:s,step:z(u),option:l,currency:f}})}))},addEnhancedEcommerceImpressionContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.position,u=e.price,l=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/impressionFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,position:z(s),price:U(u),currency:l}})}))},addEnhancedEcommerceProductContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.list,a=e.brand,i=e.category,c=e.variant,s=e.price,u=e.quantity,l=e.coupon,f=e.position,d=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/productFieldObject/jsonschema/1-0-0",data:{id:t,name:o,list:r,brand:a,category:i,variant:c,price:U(s),quantity:z(u),coupon:l,position:z(f),currency:d}})}))},addEnhancedEcommercePromoContext:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In));var t=e.id,o=e.name,r=e.creative,a=e.position,i=e.currency;n.forEach((function(e){jn[e]&&jn[e].push({schema:"iglu:com.google.analytics.enhanced-ecommerce/promoFieldObject/jsonschema/1-0-0",data:{id:t,name:o,creative:r,position:a,currency:i}})}))},trackEnhancedEcommerceAction:function(e,n){void 0===e&&(e={}),void 0===n&&(n=Object.keys(In)),Q(n,In,(function(n){var t=jn[n.id].concat(e.context||[]);jn[n.id].length=0,n.core.track(P({event:{schema:"iglu:com.google.analytics.enhanced-ecommerce/action/jsonschema/1-0-0",data:{action:e.action}}}),t,e.timestamp)}))}}),Bn={},Dn=Object.freeze({__proto__:null,AdTrackingPlugin:_e,trackAdClick:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0",data:S({targetUrl:e.targetUrl,clickId:e.clickId,costModel:e.costModel,cost:e.cost,bannerId:e.bannerId,zoneId:e.zoneId,impressionId:e.impressionId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdConversion:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0",data:S({conversionId:e.conversionId,costModel:e.costModel,cost:e.cost,category:e.category,action:e.action,property:e.property,initialValue:e.initialValue,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackAdImpression:function(e,n){void 0===n&&(n=Object.keys(Bn)),Q(n,Bn,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0",data:S({impressionId:e.impressionId,costModel:e.costModel,cost:e.cost,targetUrl:e.targetUrl,bannerId:e.bannerId,zoneId:e.zoneId,advertiserId:e.advertiserId,campaignId:e.campaignId})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))}}),Ln={},Mn=Object.freeze({__proto__:null,SiteTrackingPlugin:Pe,trackSiteSearch:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o=P({event:{schema:"iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0",data:S({terms:e.terms,filters:e.filters,totalResults:e.totalResults,pageResults:e.pageResults})}});t.call(n,o,e.context,e.timestamp)}))},trackSocialInteraction:function(e,n){void 0===n&&(n=Object.keys(Ln)),Q(n,Ln,(function(n){var t=(n=n.core).track,o={schema:"iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0",data:S({action:e.action,network:e.network,target:e.target})};o=P({event:o}),t.call(n,o,e.context,e.timestamp)}))},trackTiming:function(e,n){void 0===n&&(n=Object.keys(Ln));var t=e.category,o=e.variable,r=e.timing,a=e.label,i=e.context,c=e.timestamp;Q(n,Ln,(function(e){e.core.track(P({event:{schema:"iglu:com.snowplowanalytics.snowplow/timing/jsonschema/1-0-0",data:{category:t,variable:o,timing:r,label:a}}}),i,c)}))}}),zn=window.GlobalSnowplowNamespace.shift(),Un=window[zn];Un.q=function(n,t){function o(e){var n=e.split(":");return[e=n[0],n=1<n.length?n[1].split(";"):void 0]}function r(e,n){if(h[e])try{h[e].apply(null,n)}catch(n){Ge.error(e+" failed",n)}else Ge.warn(e+" is not an available function")}function a(e){h=Te(Te({},h),e)}function i(t){if("string"!=typeof t[0]||"string"!=typeof t[1]||void 0!==t[2]&&"object"!=typeof t[2])Ge.error("newTracker failed",Error("Invalid parameters"));else{var o="".concat(n,"_").concat(t[0]),r=t[2],i=function(n){var t,o=null!==(t=null==n?void 0:n.contexts)&&void 0!==t?t:{},r=o.performanceTiming;t=o.gaCookies,n=o.geolocation,o.optimizelyExperiments,o.optimizelyStates,o.optimizelyVariations,o.optimizelyVisitor,o.optimizelyAudiences,o.optimizelyDimensions,o.optimizelySummary;var a=o.optimizelyXSummary;o=o.clientHints;var i=[];return r&&(r=e(rn,["PerformanceTimingPlugin"]),i.push([oe(),r])),a&&(r=e(on,["OptimizelyXPlugin"]),i.push([te(),r])),o&&(r=e(tn,["ClientHintsPlugin"]),i.push([ne("object"==typeof o&&o.includeHighEntropy),r])),t&&(r=e(gn,["GaCookiesPlugin"]),i.push([ce(),r])),r=e(fn,["ConsentPlugin"]),i.push([re(),r]),r=e(pn,["GeolocationPlugin"]),i.push([ae(n),r]),r=e(yn,["LinkClickTrackingPlugin"]),i.push([se(),r]),r=e(_n,["FormTrackingPlugin"]),i.push([he(),r]),r=e(Tn,["ErrorTrackingPlugin"]),i.push([ye(),r]),r=e(En,["EcommercePlugin"]),i.push([Ae(),r]),r=e(Nn,["EnhancedEcommercePlugin"]),i.push([be(),r]),r=e(Dn,["AdTrackingPlugin"]),i.push([_e(),r]),r=e(Mn,["SiteTrackingPlugin"]),i.push([Pe(),r]),r=e(Cn,["TimezonePlugin"]),i.push([ke(),r]),i}(r);(o=Z(o,t[0],"js-".concat(v),t[1],d,Te(Te({},r),{plugins:i.map((function(e){return e[0]}))})))?(m.push(o.id),i.forEach((function(e){a(e[1])}))):Ge.warn(t[0]+" already exists")}}function c(n,t){function o(e){Object.prototype.hasOwnProperty.call(p,e)&&(u.clearTimeout(p[e].timeout),delete p[e],0===Object.keys(p).length&&g.forEach((function(e){var n=e[1];void 0!==h[e[0]]&&h[e[0]].length>n.length&&Array.isArray(n[0])&&(n=[{},n[0]]),r(e[0],n)})))}var i;if("string"==typeof n[0]&&f(n[1])&&(void 0===n[2]||Array.isArray(n[2]))){var c=n[0],s=n[1],d=n[2];(null===(i=n[3])||void 0===i||i)&&(i=u.setTimeout((function(){o(c)}),5e3),p[c]={timeout:i}),(i=l.createElement("script")).setAttribute("src",c),i.setAttribute("async","1"),N(i,"error",(function(){o(c),Ge.warn("Failed to load plugin ".concat(s[0]," from ").concat(c))}),!0),N(i,"load",(function(){var n=s[1],r=u[s[0]];if(r&&"object"==typeof r){var i=r[n];n=e(r,["symbol"==typeof n?n:n+""]),h.addPlugin.apply(null,[{plugin:i.apply(null,d)},t]),a(n)}o(c)}),!0),l.head.appendChild(i)}else{if("object"==typeof n[0]&&"string"==typeof n[1]&&(void 0===n[2]||Array.isArray(n[2]))){var m=n[0],v=n[1];if(i=n[2],m)return n=m[v],m=e(m,["symbol"==typeof v?v:v+""]),h.addPlugin.apply(null,[{plugin:n.apply(null,i)},t]),void a(m)}Ge.warn("Failed to add Plugin: ".concat(n[1]))}}function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(t=0;t<e.length;t+=1){var a=e[t],s=Array.prototype.shift.call(a);if(O(s))try{for(var u={},l=0,f=$(m,Ze);l<f.length;l++){var d=f[l];u[d.id.replace("".concat(n,"_"),"")]=d}s.apply(u,a)}catch(e){Ge.error("Tracker callback failed",e)}finally{continue}s=(u=o(s))[0],u=u[1],"newTracker"===s?i(a):(u=u?u.map((function(e){return"".concat(n,"_").concat(e)})):m,"addPlugin"===s?c(a,u):(l=void 0,l=0<a.length?[a[0],u]:void 0!==h[s]&&2===h[s].length?[{},u]:[u],0<Object.keys(p).length?g.push([s,l]):r(s,l)))}}for(var u=window,l=document,d=ee(),m=[],p={},g=[],v="3.8.0",h=e(nn,["version"]),y=0;y<t.length;y++)s(t[y]);return{push:s}}(zn,Un.q)}();
+//# sourceMappingURL=sp.js.map
diff --git a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/agent.rb b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/agent.rb
index d4231d12f72..2c538d5224e 100644
--- a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/agent.rb
+++ b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/agent.rb
@@ -67,6 +67,11 @@ module CloudProfilerAgent
return if @thread&.alive?
@thread = Thread.new do
+ logger.info(
+ gcp_ruby_status: "Created new agent thread",
+ **log_labels
+ )
+
Looper.new(logger: logger, log_labels: log_labels).run do
google_profile = create_google_profile
google_profile = profile_app(google_profile)
diff --git a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/looper.rb b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/looper.rb
index 9f0a5ef2abd..cd9502de435 100644
--- a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/looper.rb
+++ b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/looper.rb
@@ -49,6 +49,12 @@ module CloudProfilerAgent
begin
yield
rescue ::Google::Cloud::Error => e
+ logger.error(
+ gcp_ruby_status: "error",
+ error: e.inspect,
+ **log_labels
+ )
+
backoff = backoff_duration(e)
if backoff.nil?
iteration_time = @max_iteration_sec
@@ -68,6 +74,14 @@ module CloudProfilerAgent
duration_s: elapsed,
**log_labels
)
+ rescue Exception => e # rubocop:disable Lint/RescueException
+ # We rescue exception here to make sure we log the error message, then we re-raise the exception.
+ logger.error(
+ gcp_ruby_status: "exception",
+ error: e.inspect,
+ **log_labels
+ )
+ raise e
else
iteration_time = @min_iteration_sec
end
diff --git a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/pprof_builder.rb b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/pprof_builder.rb
index a2ca3323d98..0f2ff71c791 100644
--- a/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/pprof_builder.rb
+++ b/vendor/gems/cloud_profiler_agent/lib/cloud_profiler_agent/pprof_builder.rb
@@ -145,7 +145,7 @@ module CloudProfilerAgent
@profile.fetch(:frames, []).each do |location_id, location|
message.function.push(Perftools::Profiles::Function.new(
id: location_id,
- name: @string_map.add(cleaned_name(location.fetch(:name))),
+ name: @string_map.add(location.fetch(:name)),
filename: @string_map.add(location.fetch(:file)),
start_line: location.fetch(:line, nil)
))
@@ -161,13 +161,6 @@ module CloudProfilerAgent
))
end
end
-
- def cleaned_name(name)
- # Google Cloud Profiler has trouble identifying class structure in Ruby. It prefers everything separated by a
- # dot as it is in for example Golang.
- # We have to substitute `ActionView::Template#render` to `ActionView.Template.render`
- name.gsub!(/::|#/, '.') || name
- end
end
# The pprof format has one table of strings, and objects that need strings
diff --git a/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/looper_spec.rb b/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/looper_spec.rb
index 407d185c18f..6150fd8b1ea 100644
--- a/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/looper_spec.rb
+++ b/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/looper_spec.rb
@@ -79,6 +79,25 @@ RSpec.describe CloudProfilerAgent::Looper, feature_category: :application_perfor
end
end
+ context 'when the block raises an Exception' do
+ let(:exception_subject) do
+ subject.run do
+ raise Exception, 'bam'
+ end
+ end
+
+ it 'logs the error and re-raises the exception' do
+ expect_any_instance_of(Logger).to receive(:error).with(
+ hash_including(
+ gcp_ruby_status: "exception",
+ error: "#<Exception: bam>"
+ )
+ )
+
+ expect { exception_subject }.to raise_exception
+ end
+ end
+
context 'when Google asks for backoff' do
it 'slows down' do
subject.run(2) do
diff --git a/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/pprof_builder_spec.rb b/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/pprof_builder_spec.rb
index 02d6a7a70c2..5c94a8e1e44 100644
--- a/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/pprof_builder_spec.rb
+++ b/vendor/gems/cloud_profiler_agent/spec/cloud_profiler_agent/pprof_builder_spec.rb
@@ -27,25 +27,6 @@ RSpec.describe CloudProfilerAgent::PprofBuilder, feature_category: :application_
# assertions about the message directly.
let(:message) { subject.message }
- context '#process_frames' do
- let(:profile) { load_profile(:cpu) }
- let(:string_map) { subject.instance_variable_get(:@string_map) }
-
- it 'converts method names to dot notation' do
- original_frame_name = profile[:frames].to_a[0].last[:name]
- expect(original_frame_name).to eq("Prime#prime_division")
- second_original_frame_name = profile[:frames].to_a[1].last[:name]
- expect(second_original_frame_name).to eq("Prime::PseudoPrimeGenerator#each")
-
- message
-
- cleaned_frame_name = string_map.strings[4] # the first 4 items are profile metadata
- expect(cleaned_frame_name).to eq("Prime.prime_division")
- second_cleaned_frame_name = string_map.strings[6] # 5 is the file location
- expect(second_cleaned_frame_name).to eq("Prime.PseudoPrimeGenerator.each")
- end
- end
-
context 'with :cpu profile' do
let(:profile) { load_profile(:cpu) }
diff --git a/vendor/gems/sidekiq-reliable-fetch/.gitignore b/vendor/gems/sidekiq-reliable-fetch/.gitignore
new file mode 100644
index 00000000000..f155298bb0a
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/.gitignore
@@ -0,0 +1,3 @@
+*.gem
+coverage
+.DS_Store
diff --git a/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml b/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
new file mode 100644
index 00000000000..b87a454bccc
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
@@ -0,0 +1,77 @@
+workflow:
+ rules:
+ - if: $CI_MERGE_REQUEST_ID
+
+default:
+ image: ruby:3.0
+
+before_script:
+ - cd vendor/gems/sidekiq-reliable-fetch
+ - ruby -v
+ - which ruby
+ - gem install bundler
+ - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
+ - bundle config set with 'development' # This is set to 'deployment' otherwise
+ - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
+ - bundle config # Show bundler configuration
+ - bundle install --jobs $(nproc) "${FLAGS[@]}"
+
+variables:
+ REDIS_URL: "redis://redis"
+
+rspec:
+ stage: test
+ coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
+ script:
+ - bundle exec rspec
+ services:
+ - redis:alpine
+ artifacts:
+ expire_in: 31d
+ when: always
+ paths:
+ - coverage/
+
+.integration:
+ stage: test
+ script:
+ - cd tests/reliability
+ - bundle exec ruby reliability_test.rb
+ services:
+ - redis:alpine
+
+integration_semi:
+ extends: .integration
+ variables:
+ JOB_FETCHER: semi
+
+integration_reliable:
+ extends: .integration
+ variables:
+ JOB_FETCHER: reliable
+
+integration_basic:
+ extends: .integration
+ allow_failure: yes
+ variables:
+ JOB_FETCHER: basic
+
+kill_interruption:
+ stage: test
+ script:
+ - cd tests/interruption
+ - bundle exec ruby test_kill_signal.rb
+ services:
+ - redis:alpine
+
+term_interruption:
+ stage: test
+ script:
+ - cd tests/interruption
+ - bundle exec ruby test_term_signal.rb
+ services:
+ - redis:alpine
+
+# rubocop:
+# script:
+# - bundle exec rubocop
diff --git a/vendor/gems/sidekiq-reliable-fetch/.rspec b/vendor/gems/sidekiq-reliable-fetch/.rspec
new file mode 100644
index 00000000000..c99d2e7396e
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/.rspec
@@ -0,0 +1 @@
+--require spec_helper
diff --git a/vendor/gems/sidekiq-reliable-fetch/CONTRIBUTING.md b/vendor/gems/sidekiq-reliable-fetch/CONTRIBUTING.md
new file mode 100644
index 00000000000..e9c2788bebe
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/CONTRIBUTING.md
@@ -0,0 +1,41 @@
+## Developer Certificate of Origin and License
+
+By contributing to GitLab B.V., you accept and agree to the following terms and
+conditions for your present and future contributions submitted to GitLab B.V.
+Except for the license granted herein to GitLab B.V. and recipients of software
+distributed by GitLab B.V., you reserve all right, title, and interest in and to
+your Contributions.
+
+All contributions are subject to the Developer Certificate of Origin and license set out at [docs.gitlab.com/ce/legal/developer_certificate_of_origin](https://docs.gitlab.com/ce/legal/developer_certificate_of_origin).
+
+_This notice should stay as the first item in the CONTRIBUTING.md file._
+
+## Code of conduct
+
+As contributors and maintainers of this project, we pledge to respect all people
+who contribute through reporting issues, posting feature requests, updating
+documentation, submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, or religion.
+
+Examples of unacceptable behavior by participants include the use of sexual
+language or imagery, derogatory comments or personal attacks, trolling, public
+or private harassment, insults, or other unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct. Project maintainers who do not follow the
+Code of Conduct may be removed from the project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior can be
+reported by emailing contact@gitlab.com.
+
+This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org), version 1.1.0,
+available at [https://contributor-covenant.org/version/1/1/0/](https://contributor-covenant.org/version/1/1/0/).
+
diff --git a/vendor/gems/sidekiq-reliable-fetch/Gemfile b/vendor/gems/sidekiq-reliable-fetch/Gemfile
new file mode 100644
index 00000000000..3bed294f56f
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/Gemfile
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
+
+gemspec
+
+group :test do
+ gem "rspec", '~> 3'
+ gem "pry"
+ gem 'simplecov', require: false
+ gem 'stub_env', '~> 1.0'
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/Gemfile.lock b/vendor/gems/sidekiq-reliable-fetch/Gemfile.lock
new file mode 100644
index 00000000000..57767ee8c3b
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/Gemfile.lock
@@ -0,0 +1,58 @@
+PATH
+ remote: .
+ specs:
+ gitlab-sidekiq-fetcher (0.9.0)
+ json (>= 2.5)
+ sidekiq (~> 6.1)
+
+GEM
+ remote: https://rubygems.org/
+ specs:
+ coderay (1.1.2)
+ connection_pool (2.4.0)
+ diff-lcs (1.3)
+ docile (1.3.1)
+ json (2.5.1)
+ method_source (0.9.0)
+ pry (0.11.3)
+ coderay (~> 1.1.0)
+ method_source (~> 0.9.0)
+ rack (2.2.6.4)
+ redis (4.8.1)
+ rspec (3.8.0)
+ rspec-core (~> 3.8.0)
+ rspec-expectations (~> 3.8.0)
+ rspec-mocks (~> 3.8.0)
+ rspec-core (3.8.0)
+ rspec-support (~> 3.8.0)
+ rspec-expectations (3.8.1)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.8.0)
+ rspec-mocks (3.8.0)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.8.0)
+ rspec-support (3.8.0)
+ sidekiq (6.5.8)
+ connection_pool (>= 2.2.5, < 3)
+ rack (~> 2.0)
+ redis (>= 4.5.0, < 5)
+ simplecov (0.16.1)
+ docile (~> 1.1)
+ json (>= 1.8, < 3)
+ simplecov-html (~> 0.10.0)
+ simplecov-html (0.10.2)
+ stub_env (1.0.4)
+ rspec (>= 2.0, < 4.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ gitlab-sidekiq-fetcher!
+ pry
+ rspec (~> 3)
+ simplecov
+ stub_env (~> 1.0)
+
+BUNDLED WITH
+ 2.3.24
diff --git a/vendor/gems/sidekiq-reliable-fetch/LICENSE b/vendor/gems/sidekiq-reliable-fetch/LICENSE
new file mode 100644
index 00000000000..65c5ca88a67
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/vendor/gems/sidekiq-reliable-fetch/README.md b/vendor/gems/sidekiq-reliable-fetch/README.md
new file mode 100644
index 00000000000..4c7029e3955
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/README.md
@@ -0,0 +1,57 @@
+gitlab-sidekiq-fetcher
+======================
+
+`gitlab-sidekiq-fetcher` is an extension to Sidekiq that adds support for reliable
+fetches from Redis.
+
+It's based on https://github.com/TEA-ebook/sidekiq-reliable-fetch.
+
+**IMPORTANT NOTE:** Since version `0.7.0` this gem works only with `sidekiq >= 6.1` (which introduced Fetch API breaking changes). Please use version `~> 0.5` if you use older version of the `sidekiq` .
+
+**UPGRADE NOTE:** If upgrading from 0.7.0, strongly consider a full deployed step on 0.7.1 before 0.8.0; that fixes a bug in the queue name validation that will hit if sidekiq nodes running 0.7.0 see working queues named by 0.8.0. See https://gitlab.com/gitlab-org/sidekiq-reliable-fetch/-/merge_requests/22
+
+There are two strategies implemented: [Reliable fetch](http://redis.io/commands/rpoplpush#pattern-reliable-queue) using `rpoplpush` command and
+semi-reliable fetch that uses regular `brpop` and `lpush` to pick the job and put it to working queue. The main benefit of "Reliable" strategy is that `rpoplpush` is atomic, eliminating a race condition in which jobs can be lost.
+However, it comes at a cost because `rpoplpush` can't watch multiple lists at the same time so we need to iterate over the entire queue list which significantly increases pressure on Redis when there are more than a few queues. The "semi-reliable" strategy is much more reliable than the default Sidekiq fetcher, though. Compared to the reliable fetch strategy, it does not increase pressure on Redis significantly.
+
+### Interruption handling
+
+Sidekiq expects any job to report succcess or to fail. In the last case, Sidekiq puts `retry_count` counter
+into the job and keeps to re-run the job until the counter reched the maximum allowed value. When the job has
+not been given a chance to finish its work(to report success or fail), for example, when it was killed forcibly or when the job was requeued, after receiving TERM signal, the standard retry mechanisme does not get into the game and the job will be retried indefinatelly. This is why Reliable fetcher maintains a special counter `interrupted_count`
+which is used to limit the amount of such retries. In both cases, Reliable Fetcher increments counter `interrupted_count` and rejects the job from running again when the counter exceeds `max_retries_after_interruption` times (default: 3 times).
+Such a job will be put to `interrupted` queue. This queue mostly behaves as Sidekiq Dead queue so it only stores a limited amount of jobs for a limited term. Same as for Dead queue, all the limits are configurable via `interrupted_max_jobs` (default: 10_000) and `interrupted_timeout_in_seconds` (default: 3 months) Sidekiq option keys.
+
+You can also disable special handling of interrupted jobs by setting `max_retries_after_interruption` into `-1`.
+In this case, interrupted jobs will be run without any limits from Reliable Fetcher and they won't be put into Interrupted queue.
+
+
+## Installation
+
+This gem is vendored in the GitLab Rails application and new versions are not published to RubyGems.
+
+## Configuration
+
+Enable reliable fetches by calling this gem from your Sidekiq configuration:
+
+```ruby
+Sidekiq.configure_server do |config|
+ Sidekiq::ReliableFetch.setup_reliable_fetch!(config)
+
+ # …
+end
+```
+
+There is an additional parameter `config[:semi_reliable_fetch]` you can use to switch between two strategies:
+
+```ruby
+Sidekiq.configure_server do |config|
+ config[:semi_reliable_fetch] = true # Default value is false
+
+ Sidekiq::ReliableFetch.setup_reliable_fetch!(config)
+end
+```
+
+## License
+
+LGPL-3.0, see the LICENSE file.
diff --git a/vendor/gems/sidekiq-reliable-fetch/gitlab-sidekiq-fetcher.gemspec b/vendor/gems/sidekiq-reliable-fetch/gitlab-sidekiq-fetcher.gemspec
new file mode 100644
index 00000000000..0d0e5e3f6fa
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/gitlab-sidekiq-fetcher.gemspec
@@ -0,0 +1,15 @@
+Gem::Specification.new do |s|
+ s.name = 'gitlab-sidekiq-fetcher'
+ s.version = '0.9.0'
+ s.authors = ['TEA', 'GitLab']
+ s.email = 'valery@gitlab.com'
+ s.license = 'LGPL-3.0'
+ s.homepage = 'https://gitlab.com/gitlab-org/gitlab/-/tree/master/vendor/gems/sidekiq-reliable-fetch'
+ s.summary = 'Reliable fetch extension for Sidekiq'
+ s.description = 'Redis reliable queue pattern implemented in Sidekiq'
+ s.require_paths = ['lib']
+ s.files = Dir.glob('lib/**/*.*')
+ s.test_files = Dir.glob('{spec,tests}/**/*.*')
+ s.add_dependency 'sidekiq', '~> 6.1'
+ s.add_runtime_dependency 'json', '>= 2.5'
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq-reliable-fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq-reliable-fetch.rb
new file mode 100644
index 00000000000..df44fabaedd
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq-reliable-fetch.rb
@@ -0,0 +1,6 @@
+require 'sidekiq'
+require 'sidekiq/api'
+
+require_relative 'sidekiq/base_reliable_fetch'
+require_relative 'sidekiq/reliable_fetch'
+require_relative 'sidekiq/semi_reliable_fetch'
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/base_reliable_fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/base_reliable_fetch.rb
new file mode 100644
index 00000000000..e9c9f050982
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/base_reliable_fetch.rb
@@ -0,0 +1,269 @@
+# frozen_string_literal: true
+
+require_relative 'interrupted_set'
+
+module Sidekiq
+ class BaseReliableFetch
+ DEFAULT_CLEANUP_INTERVAL = 60 * 60 # 1 hour
+ HEARTBEAT_INTERVAL = 20 # seconds
+ HEARTBEAT_LIFESPAN = 60 # seconds
+ HEARTBEAT_RETRY_DELAY = 1 # seconds
+ WORKING_QUEUE_PREFIX = 'working'
+
+ # Defines how often we try to take a lease to not flood our
+ # Redis server with SET requests
+ DEFAULT_LEASE_INTERVAL = 2 * 60 # seconds
+ LEASE_KEY = 'reliable-fetcher-cleanup-lock'
+
+ # Defines the COUNT parameter that will be passed to Redis SCAN command
+ SCAN_COUNT = 1000
+
+ # How much time a job can be interrupted
+ DEFAULT_MAX_RETRIES_AFTER_INTERRUPTION = 3
+
+ # Regexes for matching working queue keys
+ WORKING_QUEUE_REGEX = /#{WORKING_QUEUE_PREFIX}:(queue:.*):([^:]*:[0-9]*:[0-9a-f]*)\z/.freeze
+ LEGACY_WORKING_QUEUE_REGEX = /#{WORKING_QUEUE_PREFIX}:(queue:.*):([^:]*:[0-9]*)\z/.freeze
+
+ UnitOfWork = Struct.new(:queue, :job) do
+ def acknowledge
+ Sidekiq.redis { |conn| conn.lrem(Sidekiq::BaseReliableFetch.working_queue_name(queue), 1, job) }
+ end
+
+ def queue_name
+ queue.sub(/.*queue:/, '')
+ end
+
+ def requeue
+ Sidekiq.redis do |conn|
+ conn.multi do |multi|
+ multi.lpush(queue, job)
+ multi.lrem(Sidekiq::BaseReliableFetch.working_queue_name(queue), 1, job)
+ end
+ end
+ end
+ end
+
+ def self.setup_reliable_fetch!(config)
+ config = config.options unless config.respond_to?(:[])
+
+ fetch_strategy = if config[:semi_reliable_fetch]
+ Sidekiq::SemiReliableFetch
+ else
+ Sidekiq::ReliableFetch
+ end
+
+ config[:fetch] = fetch_strategy.new(config)
+
+ Sidekiq.logger.info('GitLab reliable fetch activated!')
+
+ start_heartbeat_thread
+ end
+
+ def self.start_heartbeat_thread
+ Thread.new do
+ loop do
+ begin
+ heartbeat
+
+ sleep HEARTBEAT_INTERVAL
+ rescue => e
+ Sidekiq.logger.error("Heartbeat thread error: #{e.message}")
+
+ sleep HEARTBEAT_RETRY_DELAY
+ end
+ end
+ end
+ end
+
+ def self.hostname
+ Socket.gethostname
+ end
+
+ def self.process_nonce
+ @@process_nonce ||= SecureRandom.hex(6)
+ end
+
+ def self.identity
+ @@identity ||= "#{hostname}:#{$$}:#{process_nonce}"
+ end
+
+ def self.heartbeat
+ Sidekiq.redis do |conn|
+ conn.set(heartbeat_key(identity), 1, ex: HEARTBEAT_LIFESPAN)
+ end
+
+ Sidekiq.logger.debug("Heartbeat for #{identity}")
+ end
+
+ def self.worker_dead?(identity, conn)
+ !conn.get(heartbeat_key(identity))
+ end
+
+ def self.heartbeat_key(identity)
+ "reliable-fetcher-heartbeat-#{identity.gsub(':', '-')}"
+ end
+
+ def self.working_queue_name(queue)
+ "#{WORKING_QUEUE_PREFIX}:#{queue}:#{identity}"
+ end
+
+ attr_reader :cleanup_interval, :last_try_to_take_lease_at, :lease_interval,
+ :queues, :use_semi_reliable_fetch,
+ :strictly_ordered_queues
+
+ def initialize(options)
+ raise ArgumentError, 'missing queue list' unless options[:queues]
+
+ @config = options
+ @interrupted_set = Sidekiq::InterruptedSet.new
+ @cleanup_interval = options.fetch(:cleanup_interval, DEFAULT_CLEANUP_INTERVAL)
+ @lease_interval = options.fetch(:lease_interval, DEFAULT_LEASE_INTERVAL)
+ @last_try_to_take_lease_at = 0
+ @strictly_ordered_queues = !!options[:strict]
+ @queues = options[:queues].map { |q| "queue:#{q}" }
+ end
+
+ def retrieve_work
+ clean_working_queues! if take_lease
+
+ retrieve_unit_of_work
+ end
+
+ def retrieve_unit_of_work
+ raise NotImplementedError,
+ "#{self.class} does not implement #{__method__}"
+ end
+
+ def bulk_requeue(inprogress, _options)
+ return if inprogress.empty?
+
+ Sidekiq.redis do |conn|
+ inprogress.each do |unit_of_work|
+ conn.multi do |multi|
+ preprocess_interrupted_job(unit_of_work.job, unit_of_work.queue, multi)
+
+ multi.lrem(self.class.working_queue_name(unit_of_work.queue), 1, unit_of_work.job)
+ end
+ end
+ end
+ rescue => e
+ Sidekiq.logger.warn("Failed to requeue #{inprogress.size} jobs: #{e.message}")
+ end
+
+ private
+
+ def preprocess_interrupted_job(job, queue, conn = nil)
+ msg = Sidekiq.load_json(job)
+ msg['interrupted_count'] = msg['interrupted_count'].to_i + 1
+
+ if interruption_exhausted?(msg)
+ send_to_quarantine(msg, conn)
+ else
+ requeue_job(queue, msg, conn)
+ end
+ end
+
+ # If you want this method to be run in a scope of multi connection
+ # you need to pass it
+ def requeue_job(queue, msg, conn)
+ with_connection(conn) do |conn|
+ conn.lpush(queue, Sidekiq.dump_json(msg))
+ end
+
+ Sidekiq.logger.info(
+ message: "Pushed job #{msg['jid']} back to queue #{queue}",
+ jid: msg['jid'],
+ queue: queue
+ )
+ end
+
+ def extract_queue_and_identity(key)
+ # New identity format is "{hostname}:{pid}:{randomhex}
+ # Old identity format is "{hostname}:{pid}"
+ # Queue names may also have colons (namespaced).
+ # Expressing this in a single regex is unreadable
+
+ # Test the newer expected format first, only checking the older if necessary
+ original_queue, identity = key.scan(WORKING_QUEUE_REGEX).flatten
+ return original_queue, identity unless original_queue.nil? || identity.nil?
+
+ key.scan(LEGACY_WORKING_QUEUE_REGEX).flatten
+ end
+
+ # Detect "old" jobs and requeue them because the worker they were assigned
+ # to probably failed miserably.
+ def clean_working_queues!
+ Sidekiq.logger.info('Cleaning working queues')
+
+ Sidekiq.redis do |conn|
+ conn.scan_each(match: "#{WORKING_QUEUE_PREFIX}:queue:*", count: SCAN_COUNT) do |key|
+ original_queue, identity = extract_queue_and_identity(key)
+
+ next if original_queue.nil? || identity.nil?
+
+ clean_working_queue!(original_queue, key) if self.class.worker_dead?(identity, conn)
+ end
+ end
+ end
+
+ def clean_working_queue!(original_queue, working_queue)
+ Sidekiq.redis do |conn|
+ while job = conn.rpop(working_queue)
+ preprocess_interrupted_job(job, original_queue)
+ end
+ end
+ end
+
+ def interruption_exhausted?(msg)
+ return false if max_retries_after_interruption(msg['class']) < 0
+
+ msg['interrupted_count'].to_i >= max_retries_after_interruption(msg['class'])
+ end
+
+ def max_retries_after_interruption(worker_class)
+ max_retries_after_interruption = nil
+
+ max_retries_after_interruption ||= begin
+ Object.const_get(worker_class).sidekiq_options[:max_retries_after_interruption]
+ rescue NameError
+ end
+
+ max_retries_after_interruption ||= @config[:max_retries_after_interruption]
+ max_retries_after_interruption ||= DEFAULT_MAX_RETRIES_AFTER_INTERRUPTION
+ max_retries_after_interruption
+ end
+
+ def send_to_quarantine(msg, multi_connection = nil)
+ Sidekiq.logger.warn(
+ class: msg['class'],
+ jid: msg['jid'],
+ message: %(Reliable Fetcher: adding dead #{msg['class']} job #{msg['jid']} to interrupted queue)
+ )
+
+ job = Sidekiq.dump_json(msg)
+ @interrupted_set.put(job, connection: multi_connection)
+ end
+
+ # Yield block with an existing connection or creates another one
+ def with_connection(conn)
+ return yield(conn) if conn
+
+ Sidekiq.redis { |redis_conn| yield(redis_conn) }
+ end
+
+ def take_lease
+ return unless allowed_to_take_a_lease?
+
+ @last_try_to_take_lease_at = Time.now.to_f
+
+ Sidekiq.redis do |conn|
+ conn.set(LEASE_KEY, 1, nx: true, ex: cleanup_interval)
+ end
+ end
+
+ def allowed_to_take_a_lease?
+ Time.now.to_f - last_try_to_take_lease_at > lease_interval
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/interrupted_set.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/interrupted_set.rb
new file mode 100644
index 00000000000..2fc7a10f9d0
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/interrupted_set.rb
@@ -0,0 +1,51 @@
+require 'sidekiq/api'
+
+module Sidekiq
+ class InterruptedSet < ::Sidekiq::JobSet
+ DEFAULT_MAX_CAPACITY = 10_000
+ DEFAULT_MAX_TIMEOUT = 90 * 24 * 60 * 60 # 3 months
+
+ def initialize
+ super "interrupted"
+ end
+
+ def put(message, opts = {})
+ now = Time.now.to_f
+
+ with_multi_connection(opts[:connection]) do |conn|
+ conn.zadd(name, now.to_s, message)
+ conn.zremrangebyscore(name, '-inf', now - self.class.timeout)
+ conn.zremrangebyrank(name, 0, - self.class.max_jobs)
+ end
+
+ true
+ end
+
+ # Yield block inside an existing multi connection or creates new one
+ def with_multi_connection(conn, &block)
+ return yield(conn) if conn
+
+ Sidekiq.redis do |c|
+ c.multi do |multi|
+ yield(multi)
+ end
+ end
+ end
+
+ def retry_all
+ each(&:retry) while size > 0
+ end
+
+ def self.max_jobs
+ options[:interrupted_max_jobs] || DEFAULT_MAX_CAPACITY
+ end
+
+ def self.timeout
+ options[:interrupted_timeout_in_seconds] || DEFAULT_MAX_TIMEOUT
+ end
+
+ def self.options
+ Sidekiq.respond_to?(:[]) ? Sidekiq : Sidekiq.options
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb
new file mode 100644
index 00000000000..e3088ab70a4
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Sidekiq
+ class ReliableFetch < BaseReliableFetch
+ # For reliable fetch we don't use Redis' blocking operations so
+ # we inject a regular sleep into the loop.
+ RELIABLE_FETCH_IDLE_TIMEOUT = 5 # seconds
+
+ attr_reader :queues_size
+
+ def initialize(options)
+ super
+
+ @queues = queues.uniq if strictly_ordered_queues
+ @queues_size = queues.size
+ end
+
+ private
+
+ def retrieve_unit_of_work
+ queues_list = strictly_ordered_queues ? queues : queues.shuffle
+
+ queues_list.each do |queue|
+ work = Sidekiq.redis do |conn|
+ conn.rpoplpush(queue, self.class.working_queue_name(queue))
+ end
+
+ return UnitOfWork.new(queue, work) if work
+ end
+
+ # We didn't find a job in any of the configured queues. Let's sleep a bit
+ # to avoid uselessly burning too much CPU
+ sleep(RELIABLE_FETCH_IDLE_TIMEOUT)
+
+ nil
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb
new file mode 100644
index 00000000000..5b8a601dde1
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/semi_reliable_fetch.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module Sidekiq
+ class SemiReliableFetch < BaseReliableFetch
+ # We want the fetch operation to timeout every few seconds so the thread
+ # can check if the process is shutting down. This constant is only used
+ # for semi-reliable fetch.
+ DEFAULT_SEMI_RELIABLE_FETCH_TIMEOUT = 2 # seconds
+
+ def initialize(options)
+ super
+
+ if strictly_ordered_queues
+ @queues = @queues.uniq
+ @queues << { timeout: semi_reliable_fetch_timeout }
+ end
+ end
+
+ private
+
+ def retrieve_unit_of_work
+ work = Sidekiq.redis { |conn| conn.brpop(*queues_cmd) }
+ return unless work
+
+ unit_of_work = UnitOfWork.new(*work)
+
+ Sidekiq.redis do |conn|
+ conn.lpush(self.class.working_queue_name(unit_of_work.queue), unit_of_work.job)
+ end
+
+ unit_of_work
+ end
+
+ def queues_cmd
+ if strictly_ordered_queues
+ @queues
+ else
+ queues = @queues.shuffle.uniq
+ queues << { timeout: semi_reliable_fetch_timeout }
+ queues
+ end
+ end
+
+ def semi_reliable_fetch_timeout
+ @semi_reliable_fetch_timeout ||= ENV['SIDEKIQ_SEMI_RELIABLE_FETCH_TIMEOUT']&.to_i || DEFAULT_SEMI_RELIABLE_FETCH_TIMEOUT
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/base_reliable_fetch_spec.rb b/vendor/gems/sidekiq-reliable-fetch/spec/base_reliable_fetch_spec.rb
new file mode 100644
index 00000000000..cdc4409f0d5
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/spec/base_reliable_fetch_spec.rb
@@ -0,0 +1,97 @@
+require 'spec_helper'
+require 'fetch_shared_examples'
+require 'sidekiq/base_reliable_fetch'
+require 'sidekiq/reliable_fetch'
+require 'sidekiq/semi_reliable_fetch'
+
+describe Sidekiq::BaseReliableFetch do
+ let(:job) { Sidekiq.dump_json(class: 'Bob', args: [1, 2, 'foo']) }
+
+ before { Sidekiq.redis(&:flushdb) }
+
+ describe 'UnitOfWork' do
+ let(:fetcher) { Sidekiq::ReliableFetch.new(queues: ['foo']) }
+
+ describe '#requeue' do
+ it 'requeues job' do
+ Sidekiq.redis { |conn| conn.rpush('queue:foo', job) }
+
+ uow = fetcher.retrieve_work
+
+ uow.requeue
+
+ expect(Sidekiq::Queue.new('foo').size).to eq 1
+ expect(working_queue_size('foo')).to eq 0
+ end
+ end
+
+ describe '#acknowledge' do
+ it 'acknowledges job' do
+ Sidekiq.redis { |conn| conn.rpush('queue:foo', job) }
+
+ uow = fetcher.retrieve_work
+
+ expect { uow.acknowledge }
+ .to change { working_queue_size('foo') }.by(-1)
+
+ expect(Sidekiq::Queue.new('foo').size).to eq 0
+ end
+ end
+ end
+
+ describe '#bulk_requeue' do
+ let(:options) { { queues: %w[foo bar] } }
+ let!(:queue1) { Sidekiq::Queue.new('foo') }
+ let!(:queue2) { Sidekiq::Queue.new('bar') }
+
+ it 'requeues the bulk' do
+ uow = described_class::UnitOfWork
+ jobs = [ uow.new('queue:foo', job), uow.new('queue:foo', job), uow.new('queue:bar', job) ]
+ described_class.new(options).bulk_requeue(jobs, nil)
+
+ expect(queue1.size).to eq 2
+ expect(queue2.size).to eq 1
+ end
+
+ it 'puts jobs into interrupted queue' do
+ uow = described_class::UnitOfWork
+ interrupted_job = Sidekiq.dump_json(class: 'Bob', args: [1, 2, 'foo'], interrupted_count: 3)
+ jobs = [ uow.new('queue:foo', interrupted_job), uow.new('queue:foo', job), uow.new('queue:bar', job) ]
+ described_class.new(options).bulk_requeue(jobs, nil)
+
+ expect(queue1.size).to eq 1
+ expect(queue2.size).to eq 1
+ expect(Sidekiq::InterruptedSet.new.size).to eq 1
+ end
+
+ it 'does not put jobs into interrupted queue if it is disabled' do
+ options[:max_retries_after_interruption] = -1
+
+ uow = described_class::UnitOfWork
+ interrupted_job = Sidekiq.dump_json(class: 'Bob', args: [1, 2, 'foo'], interrupted_count: 3)
+ jobs = [ uow.new('queue:foo', interrupted_job), uow.new('queue:foo', job), uow.new('queue:bar', job) ]
+ described_class.new(options).bulk_requeue(jobs, nil)
+
+ expect(queue1.size).to eq 2
+ expect(queue2.size).to eq 1
+ expect(Sidekiq::InterruptedSet.new.size).to eq 0
+ end
+ end
+
+ it 'sets heartbeat' do
+ config = double(:sidekiq_config, options: { queues: %w[foo bar] })
+
+ heartbeat_thread = described_class.setup_reliable_fetch!(config)
+
+ Sidekiq.redis do |conn|
+ sleep 0.2 # Give the time to heartbeat thread to make a loop
+
+ heartbeat_key = described_class.heartbeat_key(described_class.identity)
+ heartbeat = conn.get(heartbeat_key)
+
+ expect(heartbeat).not_to be_nil
+ end
+
+ heartbeat_thread.kill
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/fetch_shared_examples.rb b/vendor/gems/sidekiq-reliable-fetch/spec/fetch_shared_examples.rb
new file mode 100644
index 00000000000..df7f715f2f9
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/spec/fetch_shared_examples.rb
@@ -0,0 +1,195 @@
+shared_examples 'a Sidekiq fetcher' do
+ let(:queues) { ['assigned'] }
+
+ before { Sidekiq.redis(&:flushdb) }
+
+ describe '#retrieve_work' do
+ let(:job) { Sidekiq.dump_json(class: 'Bob', args: [1, 2, 'foo']) }
+ let(:fetcher) { described_class.new(queues: queues) }
+
+ it 'does not clean up orphaned jobs more than once per cleanup interval' do
+ Sidekiq.redis = Sidekiq::RedisConnection.create(url: REDIS_URL, size: 10)
+
+ expect(fetcher).to receive(:clean_working_queues!).once
+
+ threads = 10.times.map do
+ Thread.new do
+ fetcher.retrieve_work
+ end
+ end
+
+ threads.map(&:join)
+ end
+
+ it 'retrieves by order when strictly order is enabled' do
+ fetcher = described_class.new(strict: true, queues: ['first', 'second'])
+
+ Sidekiq.redis do |conn|
+ conn.rpush('queue:first', ['msg3', 'msg2', 'msg1'])
+ conn.rpush('queue:second', 'msg4')
+ end
+
+ jobs = (1..4).map { fetcher.retrieve_work.job }
+
+ expect(jobs).to eq ['msg1', 'msg2', 'msg3', 'msg4']
+ end
+
+ it 'does not starve any queue when queues are not strictly ordered' do
+ fetcher = described_class.new(queues: ['first', 'second'])
+
+ Sidekiq.redis do |conn|
+ conn.rpush('queue:first', (1..200).map { |i| "msg#{i}" })
+ conn.rpush('queue:second', 'this_job_should_not_stuck')
+ end
+
+ jobs = (1..100).map { fetcher.retrieve_work.job }
+
+ expect(jobs).to include 'this_job_should_not_stuck'
+ end
+
+ shared_examples "basic queue handling" do |queue|
+ let (:fetcher) { described_class.new(queues: [queue]) }
+
+ it 'retrieves the job and puts it to working queue' do
+ Sidekiq.redis { |conn| conn.rpush("queue:#{queue}", job) }
+
+ uow = fetcher.retrieve_work
+
+ expect(working_queue_size(queue)).to eq 1
+ expect(uow.queue_name).to eq queue
+ expect(uow.job).to eq job
+ expect(Sidekiq::Queue.new(queue).size).to eq 0
+ end
+
+ it 'does not retrieve a job from foreign queue' do
+ Sidekiq.redis { |conn| conn.rpush("'queue:#{queue}:not", job) }
+ expect(fetcher.retrieve_work).to be_nil
+
+ Sidekiq.redis { |conn| conn.rpush("'queue:not_#{queue}", job) }
+ expect(fetcher.retrieve_work).to be_nil
+
+ Sidekiq.redis { |conn| conn.rpush("'queue:random_name", job) }
+ expect(fetcher.retrieve_work).to be_nil
+ end
+
+ it 'requeues jobs from legacy dead working queue with incremented interrupted_count' do
+ Sidekiq.redis do |conn|
+ conn.rpush(legacy_other_process_working_queue_name(queue), job)
+ end
+
+ expected_job = Sidekiq.load_json(job)
+ expected_job['interrupted_count'] = 1
+ expected_job = Sidekiq.dump_json(expected_job)
+
+ uow = fetcher.retrieve_work
+
+ expect(uow).to_not be_nil
+ expect(uow.job).to eq expected_job
+
+ Sidekiq.redis do |conn|
+ expect(conn.llen(legacy_other_process_working_queue_name(queue))).to eq 0
+ end
+ end
+
+ it 'ignores working queue keys in unknown formats' do
+ # Add a spurious non-numeric char segment at the end; this simulates any other
+ # incorrect form in general
+ malformed_key = "#{other_process_working_queue_name(queue)}:X"
+ Sidekiq.redis do |conn|
+ conn.rpush(malformed_key, job)
+ end
+
+ uow = fetcher.retrieve_work
+
+ Sidekiq.redis do |conn|
+ expect(conn.llen(malformed_key)).to eq 1
+ end
+ end
+
+ it 'requeues jobs from dead working queue with incremented interrupted_count' do
+ Sidekiq.redis do |conn|
+ conn.rpush(other_process_working_queue_name(queue), job)
+ end
+
+ expected_job = Sidekiq.load_json(job)
+ expected_job['interrupted_count'] = 1
+ expected_job = Sidekiq.dump_json(expected_job)
+
+ uow = fetcher.retrieve_work
+
+ expect(uow).to_not be_nil
+ expect(uow.job).to eq expected_job
+
+ Sidekiq.redis do |conn|
+ expect(conn.llen(other_process_working_queue_name(queue))).to eq 0
+ end
+ end
+
+ it 'does not requeue jobs from live working queue' do
+ working_queue = live_other_process_working_queue_name(queue)
+
+ Sidekiq.redis do |conn|
+ conn.rpush(working_queue, job)
+ end
+
+ uow = fetcher.retrieve_work
+
+ expect(uow).to be_nil
+
+ Sidekiq.redis do |conn|
+ expect(conn.llen(working_queue)).to eq 1
+ end
+ end
+ end
+
+ context 'with various queues' do
+ %w[assigned namespace:assigned namespace:deeper:assigned].each do |queue|
+ it_behaves_like "basic queue handling", queue
+ end
+ end
+
+ context 'with short cleanup interval' do
+ let(:short_interval) { 1 }
+ let(:fetcher) { described_class.new(queues: queues, lease_interval: short_interval, cleanup_interval: short_interval) }
+
+ it 'requeues when there is no heartbeat' do
+ Sidekiq.redis { |conn| conn.rpush('queue:assigned', job) }
+ # Use of retrieve_work twice with a sleep ensures we have exercised the
+ # `identity` method to create the working queue key name and that it
+ # matches the patterns used in the cleanup
+ uow = fetcher.retrieve_work
+ sleep(short_interval + 1)
+ uow = fetcher.retrieve_work
+
+ # Will only receive a UnitOfWork if the job was detected as failed and requeued
+ expect(uow).to_not be_nil
+ end
+ end
+ end
+end
+
+def working_queue_size(queue_name)
+ Sidekiq.redis do |c|
+ c.llen(Sidekiq::BaseReliableFetch.working_queue_name("queue:#{queue_name}"))
+ end
+end
+
+def legacy_other_process_working_queue_name(queue)
+ "#{Sidekiq::BaseReliableFetch::WORKING_QUEUE_PREFIX}:queue:#{queue}:#{Socket.gethostname}:#{::Process.pid + 1}"
+end
+
+def other_process_working_queue_name(queue)
+ "#{Sidekiq::BaseReliableFetch::WORKING_QUEUE_PREFIX}:queue:#{queue}:#{Socket.gethostname}:#{::Process.pid + 1}:#{::SecureRandom.hex(6)}"
+end
+
+def live_other_process_working_queue_name(queue)
+ pid = ::Process.pid + 1
+ hostname = Socket.gethostname
+ nonce = SecureRandom.hex(6)
+
+ Sidekiq.redis do |conn|
+ conn.set(Sidekiq::BaseReliableFetch.heartbeat_key("#{hostname}-#{pid}-#{nonce}"), 1)
+ end
+
+ "#{Sidekiq::BaseReliableFetch::WORKING_QUEUE_PREFIX}:queue:#{queue}:#{hostname}:#{pid}:#{nonce}"
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/reliable_fetch_spec.rb b/vendor/gems/sidekiq-reliable-fetch/spec/reliable_fetch_spec.rb
new file mode 100644
index 00000000000..bdef04a021f
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/spec/reliable_fetch_spec.rb
@@ -0,0 +1,8 @@
+require 'spec_helper'
+require 'fetch_shared_examples'
+require 'sidekiq/base_reliable_fetch'
+require 'sidekiq/reliable_fetch'
+
+describe Sidekiq::ReliableFetch do
+ include_examples 'a Sidekiq fetcher'
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb b/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb
new file mode 100644
index 00000000000..84a0203b683
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/spec/semi_reliable_fetch_spec.rb
@@ -0,0 +1,43 @@
+require 'spec_helper'
+require 'fetch_shared_examples'
+require 'sidekiq/base_reliable_fetch'
+require 'sidekiq/semi_reliable_fetch'
+
+describe Sidekiq::SemiReliableFetch do
+ include_examples 'a Sidekiq fetcher'
+
+ describe '#retrieve_work' do
+ context 'timeout config' do
+ let(:queues) { ['stuff_to_do'] }
+ let(:fetcher) { described_class.new(queues: queues) }
+
+ before do
+ stub_env('SIDEKIQ_SEMI_RELIABLE_FETCH_TIMEOUT', timeout)
+ end
+
+ context 'when the timeout is not configured' do
+ let(:timeout) { nil }
+
+ it 'brpops with the default timeout timeout' do
+ Sidekiq.redis do |connection|
+ expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 2 }).once.and_call_original
+
+ fetcher.retrieve_work
+ end
+ end
+ end
+
+ context 'when the timeout is set in the env' do
+ let(:timeout) { '5' }
+
+ it 'brpops with the default timeout timeout' do
+ Sidekiq.redis do |connection|
+ expect(connection).to receive(:brpop).with("queue:stuff_to_do", { timeout: 5 }).once.and_call_original
+
+ fetcher.retrieve_work
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/spec/spec_helper.rb b/vendor/gems/sidekiq-reliable-fetch/spec/spec_helper.rb
new file mode 100644
index 00000000000..45418571579
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/spec/spec_helper.rb
@@ -0,0 +1,116 @@
+require 'sidekiq'
+require 'sidekiq/api'
+require 'pry'
+require 'simplecov'
+require 'stub_env'
+
+SimpleCov.start
+
+REDIS_URL = ENV['REDIS_URL'] || 'redis://localhost:6379/10'
+
+Sidekiq.configure_client do |config|
+ config.redis = { url: REDIS_URL }
+end
+
+Sidekiq.logger.level = Logger::ERROR
+# This file was generated by the `rspec --init` command. Conventionally, all
+# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
+# The generated `.rspec` file contains `--require spec_helper` which will cause
+# this file to always be loaded, without a need to explicitly require it in any
+# files.
+#
+# Given that it is always loaded, you are encouraged to keep this file as
+# light-weight as possible. Requiring heavyweight dependencies from this file
+# will add to the boot time of your test suite on EVERY test run, even for an
+# individual file that may not need all of that loaded. Instead, consider making
+# a separate helper file that requires the additional dependencies and performs
+# the additional setup, and require it from the spec files that actually need
+# it.
+#
+# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+RSpec.configure do |config|
+ config.include StubEnv::Helpers
+ # rspec-expectations config goes here. You can use an alternate
+ # assertion/expectation library such as wrong or the stdlib/minitest
+ # assertions if you prefer.
+ config.expect_with :rspec do |expectations|
+ # This option will default to `true` in RSpec 4. It makes the `description`
+ # and `failure_message` of custom matchers include text for helper methods
+ # defined using `chain`, e.g.:
+ # be_bigger_than(2).and_smaller_than(4).description
+ # # => "be bigger than 2 and smaller than 4"
+ # ...rather than:
+ # # => "be bigger than 2"
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+ end
+
+ # rspec-mocks config goes here. You can use an alternate test double
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
+ config.mock_with :rspec do |mocks|
+ # Prevents you from mocking or stubbing a method that does not exist on
+ # a real object. This is generally recommended, and will default to
+ # `true` in RSpec 4.
+ mocks.verify_partial_doubles = true
+ end
+
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
+ # have no way to turn it off -- the option exists only for backwards
+ # compatibility in RSpec 3). It causes shared context metadata to be
+ # inherited by the metadata hash of host groups and examples, rather than
+ # triggering implicit auto-inclusion in groups with matching metadata.
+ config.shared_context_metadata_behavior = :apply_to_host_groups
+
+# The settings below are suggested to provide a good initial experience
+# with RSpec, but feel free to customize to your heart's content.
+=begin
+ # This allows you to limit a spec run to individual examples or groups
+ # you care about by tagging them with `:focus` metadata. When nothing
+ # is tagged with `:focus`, all examples get run. RSpec also provides
+ # aliases for `it`, `describe`, and `context` that include `:focus`
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+ config.filter_run_when_matching :focus
+
+ # Allows RSpec to persist some state between runs in order to support
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
+ # you configure your source control system to ignore this file.
+ config.example_status_persistence_file_path = "spec/examples.txt"
+
+ # Limits the available syntax to the non-monkey patched syntax that is
+ # recommended. For more details, see:
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
+ config.disable_monkey_patching!
+
+ # This setting enables warnings. It's recommended, but in some cases may
+ # be too noisy due to issues in dependencies.
+ config.warnings = true
+
+ # Many RSpec users commonly either run the entire suite or an individual
+ # file, and it's useful to allow more verbose output when running an
+ # individual spec file.
+ if config.files_to_run.one?
+ # Use the documentation formatter for detailed output,
+ # unless a formatter has already been configured
+ # (e.g. via a command-line flag).
+ config.default_formatter = "doc"
+ end
+
+ # Print the 10 slowest examples and example groups at the
+ # end of the spec run, to help surface which specs are running
+ # particularly slow.
+ config.profile_examples = 10
+
+ # Run specs in random order to surface order dependencies. If you find an
+ # order dependency and want to debug it, you can fix the order by providing
+ # the seed, which is printed after each run.
+ # --seed 1234
+ config.order = :random
+
+ # Seed global randomization in this process using the `--seed` CLI option.
+ # Setting this allows you to use `--seed` to deterministically reproduce
+ # test failures related to randomization by passing the same `--seed` value
+ # as the one that triggered the failure.
+ Kernel.srand config.seed
+=end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/README.md b/vendor/gems/sidekiq-reliable-fetch/tests/README.md
new file mode 100644
index 00000000000..62ea6f48641
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/README.md
@@ -0,0 +1,37 @@
+# How to run reliability tests
+
+```
+cd tests/reliability
+bundle exec ruby reliability_test.rb
+```
+
+You can adjust some parameters of the test in the `config.rb`.
+
+JOB_FETCHER can be set to one of these values: `semi`, `reliable`, `basic`
+
+You need to have redis server running on default HTTP port `6379`. To use other HTTP port, you can define
+`REDIS_URL` environment varible with the port you need(example: `REDIS_URL="redis://localhost:9999"`).
+
+
+## How it works
+
+This tool spawns configured number of Sidekiq workers and when the amount of processed jobs is about half of origin
+number it will kill all the workers with `kill -9` and then it will spawn new workers again until all the jobs are processed. To track the process and counters we use Redis keys/counters.
+
+# How to run interruption tests
+
+```
+cd tests/interruption
+
+# Verify "KILL" signal
+bundle exec ruby test_kill_signal.rb
+
+# Verify "TERM" signal
+bundle exec ruby test_term_signal.rb
+```
+
+It requires Redis to be running on 6379 port.
+
+## How it works
+
+It spawns Sidekiq workers then creates a job that will kill itself after a moment. The reliable fetcher will bring it back. The purpose is to verify that job is run no more then allowed number of times.
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/interruption/config.rb b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/config.rb
new file mode 100644
index 00000000000..f69cca96d80
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/config.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require_relative '../../lib/sidekiq-reliable-fetch'
+require_relative 'worker'
+
+TEST_CLEANUP_INTERVAL = 20
+TEST_LEASE_INTERVAL = 5
+
+Sidekiq.configure_server do |config|
+ config[:semi_reliable_fetch] = true
+
+ # We need to override these parameters to not wait too long
+ # The default values are good for production use only
+ # These will be ignored for :basic
+ config[:cleanup_interval] = TEST_CLEANUP_INTERVAL
+ config[:lease_interval] = TEST_LEASE_INTERVAL
+
+ Sidekiq::ReliableFetch.setup_reliable_fetch!(config)
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_kill_signal.rb b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_kill_signal.rb
new file mode 100755
index 00000000000..6f61f25970b
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_kill_signal.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'sidekiq'
+require_relative 'config'
+require_relative '../support/utils'
+
+EXPECTED_NUM_TIMES_BEEN_RUN = 3
+NUM_WORKERS = EXPECTED_NUM_TIMES_BEEN_RUN + 1
+
+Sidekiq.redis(&:flushdb)
+
+pids = spawn_workers(NUM_WORKERS)
+
+RetryTestWorker.perform_async
+
+sleep 300
+
+Sidekiq.redis do |redis|
+ times_has_been_run = redis.get('times_has_been_run').to_i
+ assert 'The job has been run', times_has_been_run, EXPECTED_NUM_TIMES_BEEN_RUN
+end
+
+assert 'Found interruption exhausted jobs', Sidekiq::InterruptedSet.new.size, 1
+
+stop_workers(pids)
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_term_signal.rb b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_term_signal.rb
new file mode 100755
index 00000000000..218cd4cbc9d
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/test_term_signal.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require 'sidekiq'
+require_relative 'config'
+require_relative '../support/utils'
+
+EXPECTED_NUM_TIMES_BEEN_RUN = 3
+NUM_WORKERS = EXPECTED_NUM_TIMES_BEEN_RUN + 1
+
+Sidekiq.redis(&:flushdb)
+
+pids = spawn_workers(NUM_WORKERS)
+
+RetryTestWorker.perform_async('TERM', 60)
+
+sleep 300
+
+Sidekiq.redis do |redis|
+ times_has_been_run = redis.get('times_has_been_run').to_i
+ assert 'The job has been run', times_has_been_run, EXPECTED_NUM_TIMES_BEEN_RUN
+end
+
+assert 'Found interruption exhausted jobs', Sidekiq::InterruptedSet.new.size, 1
+
+stop_workers(pids)
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/interruption/worker.rb b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/worker.rb
new file mode 100644
index 00000000000..0e19bc635f7
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/interruption/worker.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class RetryTestWorker
+ include Sidekiq::Worker
+
+ def perform(signal = 'KILL', wait_seconds = 1)
+ Sidekiq.redis do |redis|
+ redis.incr('times_has_been_run')
+ end
+
+ Process.kill(signal, Process.pid)
+
+ sleep wait_seconds
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/reliability/config.rb b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/config.rb
new file mode 100644
index 00000000000..05ffcfca9b5
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/config.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require_relative '../../lib/sidekiq-reliable-fetch'
+require_relative 'worker'
+
+REDIS_FINISHED_LIST = 'reliable-fetcher-finished-jids'
+
+NUMBER_OF_WORKERS = ENV['NUMBER_OF_WORKERS'] || 10
+NUMBER_OF_JOBS = ENV['NUMBER_OF_JOBS'] || 1000
+JOB_FETCHER = (ENV['JOB_FETCHER'] || :semi).to_sym # :basic, :semi, :reliable
+TEST_CLEANUP_INTERVAL = 20
+TEST_LEASE_INTERVAL = 5
+WAIT_CLEANUP = TEST_CLEANUP_INTERVAL +
+ TEST_LEASE_INTERVAL +
+ Sidekiq::ReliableFetch::HEARTBEAT_LIFESPAN
+
+Sidekiq.configure_server do |config|
+ if %i[semi reliable].include?(JOB_FETCHER)
+ config[:semi_reliable_fetch] = (JOB_FETCHER == :semi)
+
+ # We need to override these parameters to not wait too long
+ # The default values are good for production use only
+ # These will be ignored for :basic
+ config[:cleanup_interval] = TEST_CLEANUP_INTERVAL
+ config[:lease_interval] = TEST_LEASE_INTERVAL
+
+ Sidekiq::ReliableFetch.setup_reliable_fetch!(config)
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/reliability/reliability_test.rb b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/reliability_test.rb
new file mode 100755
index 00000000000..6324971fe8f
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/reliability_test.rb
@@ -0,0 +1,115 @@
+# frozen_string_literal: true
+
+require 'sidekiq'
+require 'sidekiq/cli'
+require_relative 'config'
+
+def spawn_workers_and_stop_them_on_a_half_way
+ pids = spawn_workers
+
+ wait_until do |queue_size|
+ queue_size < NUMBER_OF_JOBS / 2
+ end
+
+ first_half_pids, second_half_pids = split_array(pids)
+
+ puts 'Killing half of the workers...'
+ signal_to_workers('KILL', first_half_pids)
+
+ puts 'Stopping another half of the workers...'
+ signal_to_workers('TERM', second_half_pids)
+end
+
+def spawn_workers_and_let_them_finish
+ puts 'Spawn workers and let them finish...'
+
+ pids = spawn_workers
+
+ wait_until do |queue_size|
+ queue_size.zero?
+ end
+
+ if %i[semi reliable].include? JOB_FETCHER
+ puts 'Waiting for clean up process that will requeue dead jobs...'
+ sleep WAIT_CLEANUP
+ end
+
+ signal_to_workers('TERM', pids)
+end
+
+def wait_until
+ loop do
+ sleep 3
+
+ queue_size = current_queue_size
+ puts "Jobs in the queue:#{queue_size}"
+
+ break if yield(queue_size)
+ end
+end
+
+def signal_to_workers(signal, pids)
+ pids.each { |pid| Process.kill(signal, pid) }
+ pids.each { |pid| Process.wait(pid) }
+end
+
+def spawn_workers
+ pids = []
+ NUMBER_OF_WORKERS.times do
+ pids << spawn('sidekiq -q default -q low -q high -r ./config.rb')
+ end
+
+ pids
+end
+
+def current_queue_size
+ Sidekiq.redis { |c| c.llen('queue:default') }
+end
+
+def duplicates
+ Sidekiq.redis { |c| c.llen(REDIS_FINISHED_LIST) }
+end
+
+# Splits array into two halves
+def split_array(arr)
+ first_arr = arr.take(arr.size / 2)
+ second_arr = arr - first_arr
+ [first_arr, second_arr]
+end
+
+##########################################################
+
+puts '########################################'
+puts "Mode: #{JOB_FETCHER}"
+puts '########################################'
+
+Sidekiq.redis(&:flushdb)
+
+jobs = []
+
+NUMBER_OF_JOBS.times do
+ jobs << ReliabilityTestWorker.perform_async
+end
+
+puts "Queued #{NUMBER_OF_JOBS} jobs"
+
+spawn_workers_and_stop_them_on_a_half_way
+spawn_workers_and_let_them_finish
+
+jobs_lost = 0
+
+Sidekiq.redis do |redis|
+ jobs.each do |job|
+ next if redis.lrem(REDIS_FINISHED_LIST, 1, job) == 1
+ jobs_lost += 1
+ end
+end
+
+puts "Remaining unprocessed: #{jobs_lost}"
+puts "Duplicates found: #{duplicates}"
+
+if jobs_lost.zero? && duplicates.zero?
+ exit 0
+else
+ exit 1
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/reliability/worker.rb b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/worker.rb
new file mode 100644
index 00000000000..8b580a67ec1
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/reliability/worker.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class ReliabilityTestWorker
+ include Sidekiq::Worker
+
+ def perform
+ # To mimic long running job and to increase the probability of losing the job
+ sleep 1
+
+ Sidekiq.redis do |redis|
+ redis.lpush(REDIS_FINISHED_LIST, jid)
+ end
+ end
+end
diff --git a/vendor/gems/sidekiq-reliable-fetch/tests/support/utils.rb b/vendor/gems/sidekiq-reliable-fetch/tests/support/utils.rb
new file mode 100644
index 00000000000..c481c6dad80
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/tests/support/utils.rb
@@ -0,0 +1,26 @@
+def assert(text, actual, expected)
+ if actual == expected
+ puts "#{text}: #{actual} (Success)"
+ else
+ puts "#{text}: #{actual} (Failed). Expected: #{expected}"
+ exit 1
+ end
+end
+
+def spawn_workers(number)
+ pids = []
+
+ number.times do
+ pids << spawn('sidekiq -q default -q high -q low -r ./config.rb')
+ end
+
+ pids
+end
+
+# Stop Sidekiq workers
+def stop_workers(pids)
+ pids.each do |pid|
+ Process.kill('KILL', pid)
+ Process.wait pid
+ end
+end
diff --git a/vendor/project_templates/android.tar.gz b/vendor/project_templates/android.tar.gz
index fff7a7e45a6..ee0689a6e45 100644
--- a/vendor/project_templates/android.tar.gz
+++ b/vendor/project_templates/android.tar.gz
Binary files differ
diff --git a/vendor/project_templates/gitbook.tar.gz b/vendor/project_templates/gitbook.tar.gz
index 07037a83db6..64290e92f96 100644
--- a/vendor/project_templates/gitbook.tar.gz
+++ b/vendor/project_templates/gitbook.tar.gz
Binary files differ
diff --git a/vendor/project_templates/gomicro.tar.gz b/vendor/project_templates/gomicro.tar.gz
index c7d8687fdd8..50899e661c7 100644
--- a/vendor/project_templates/gomicro.tar.gz
+++ b/vendor/project_templates/gomicro.tar.gz
Binary files differ
diff --git a/vendor/project_templates/hexo.tar.gz b/vendor/project_templates/hexo.tar.gz
index 489da1a34ec..cc30ff0a67e 100644
--- a/vendor/project_templates/hexo.tar.gz
+++ b/vendor/project_templates/hexo.tar.gz
Binary files differ
diff --git a/vendor/project_templates/hipaa_audit_protocol.tar.gz b/vendor/project_templates/hipaa_audit_protocol.tar.gz
index 7ca94675d35..00c6c9f324c 100644
--- a/vendor/project_templates/hipaa_audit_protocol.tar.gz
+++ b/vendor/project_templates/hipaa_audit_protocol.tar.gz
Binary files differ
diff --git a/vendor/project_templates/iosswift.tar.gz b/vendor/project_templates/iosswift.tar.gz
index 76f32a3a681..80a71b432b5 100644
--- a/vendor/project_templates/iosswift.tar.gz
+++ b/vendor/project_templates/iosswift.tar.gz
Binary files differ
diff --git a/vendor/project_templates/jekyll.tar.gz b/vendor/project_templates/jekyll.tar.gz
index 0a97723712a..8dc68699baa 100644
--- a/vendor/project_templates/jekyll.tar.gz
+++ b/vendor/project_templates/jekyll.tar.gz
Binary files differ
diff --git a/vendor/project_templates/laravel.tar.gz b/vendor/project_templates/laravel.tar.gz
new file mode 100644
index 00000000000..49324636f5e
--- /dev/null
+++ b/vendor/project_templates/laravel.tar.gz
Binary files differ
diff --git a/vendor/project_templates/nfgitbook.tar.gz b/vendor/project_templates/nfgitbook.tar.gz
index 71f526ac43d..f09a5f41171 100644
--- a/vendor/project_templates/nfgitbook.tar.gz
+++ b/vendor/project_templates/nfgitbook.tar.gz
Binary files differ
diff --git a/vendor/project_templates/nfhexo.tar.gz b/vendor/project_templates/nfhexo.tar.gz
index 79cc74f8d72..3a241f68df4 100644
--- a/vendor/project_templates/nfhexo.tar.gz
+++ b/vendor/project_templates/nfhexo.tar.gz
Binary files differ
diff --git a/vendor/project_templates/nfhugo.tar.gz b/vendor/project_templates/nfhugo.tar.gz
index 1a4aab028a8..093ecdea96a 100644
--- a/vendor/project_templates/nfhugo.tar.gz
+++ b/vendor/project_templates/nfhugo.tar.gz
Binary files differ
diff --git a/vendor/project_templates/nfjekyll.tar.gz b/vendor/project_templates/nfjekyll.tar.gz
index 56bf955afbe..f554181e1db 100644
--- a/vendor/project_templates/nfjekyll.tar.gz
+++ b/vendor/project_templates/nfjekyll.tar.gz
Binary files differ
diff --git a/vendor/project_templates/nfplainhtml.tar.gz b/vendor/project_templates/nfplainhtml.tar.gz
index 3a90983bd06..13dd13a6830 100644
--- a/vendor/project_templates/nfplainhtml.tar.gz
+++ b/vendor/project_templates/nfplainhtml.tar.gz
Binary files differ
diff --git a/vendor/project_templates/pelican.tar.gz b/vendor/project_templates/pelican.tar.gz
index 1877d3fb24b..bc87d498ced 100644
--- a/vendor/project_templates/pelican.tar.gz
+++ b/vendor/project_templates/pelican.tar.gz
Binary files differ
diff --git a/vendor/project_templates/plainhtml.tar.gz b/vendor/project_templates/plainhtml.tar.gz
index 1ed17ddc140..dc0354172be 100644
--- a/vendor/project_templates/plainhtml.tar.gz
+++ b/vendor/project_templates/plainhtml.tar.gz
Binary files differ
diff --git a/vendor/project_templates/salesforcedx.tar.gz b/vendor/project_templates/salesforcedx.tar.gz
index f92721a453f..9486b410507 100644
--- a/vendor/project_templates/salesforcedx.tar.gz
+++ b/vendor/project_templates/salesforcedx.tar.gz
Binary files differ
diff --git a/vendor/project_templates/serverless_framework.tar.gz b/vendor/project_templates/serverless_framework.tar.gz
index b09de0ec3a2..279d0f2eb5c 100644
--- a/vendor/project_templates/serverless_framework.tar.gz
+++ b/vendor/project_templates/serverless_framework.tar.gz
Binary files differ
diff --git a/vendor/project_templates/spring.tar.gz b/vendor/project_templates/spring.tar.gz
index c1198bf13b7..12960e91f85 100644
--- a/vendor/project_templates/spring.tar.gz
+++ b/vendor/project_templates/spring.tar.gz
Binary files differ