{"version":3,"file":"wpm-public__premium_only.p1.min.js","mappings":"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B,OAAO,CAAK,EAGPE,EAASF,GACP/3B,EAAQ+3B,GAGVC,EAAeA,KAmiCpB,IAAIE,EAAsB,GAO1B,OAJI3nC,MAAMC,QAAQoQ,aAAa0D,QAAQ2xB,cAAckC,iBACpDD,EAAsBt3B,aAAa0D,QAAQ2xB,cAAckC,eAriCxC,GAwiCDxjC,OAniCF,CACd,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,sBACA,wBACA,wBACA,mBACA,mBACA,kBACA,iBACA,mBACA,oBACA,oBACA,mBACA,kBACA,oBACA,kBACA,mBACA,mBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,kBACA,kBACA,oBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,iBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBAGgB,CAChB,iBACA,kBACA,kBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,gBACA,gBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,mBACA,kBACA,mBACA,mBACA,mBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,mBACA,iBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,oBACA,mBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,yBACA,kBAGe,CACf,kBACA,kBACA,mBAGY,CACZ,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,kBACA,mBACA,kBACA,qBACA,kBACA,kBACA,mBACA,mBACA,kBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBAGiB,CACjB,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,mBAGc,CACd,eACA,iBACA,iBAGa,CACb,kBACA,kBAGc,CACd,iBACA,eAGa,CACb,iBACA,kBACA,mBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,kBACA,mBACA,kBACA,kBACA,oBACA,oBACA,kBACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,mBACA,mBACA,mBAGkB,CAClB,gBACA,eACA,gBACA,cACA,eACA,gBACA,eACA,gBACA,gBACA,eACA,gBACA,iBAGa,CACb,iBACA,eACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,gBACA,cACA,eACA,eACA,eACA,eACA,eACA,gBACA,eACA,gBACA,kBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,mBACA,kBAGc,CACd,iBACA,gBACA,kBACA,gBACA,gBACA,gBACA,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBAC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","sources":["webpack://Pixel-Manager-for-WooCommerce/../../src/index.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipRange.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv4.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv6.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/util.ts","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ipaddr.js/lib/ipaddr.js","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ip6/ip6.js","webpack://Pixel-Manager-for-WooCommerce/../src/range-check.ts","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/adroll/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/adroll/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/adroll/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/facebook/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/ga4/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/ga4/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/base/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/base/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/linkedin/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/linkedin/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/linkedin/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/microsoft-ads/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/microsoft-ads/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/microsoft-ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/outbrain/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/outbrain/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/outbrain/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/pinterest/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/pinterest/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/pinterest/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/reddit/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/reddit/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/reddit/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/snapchat/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/snapchat/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/snapchat/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/taboola/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/taboola/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/taboola/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/tiktok/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/tiktok/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/tiktok/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/twitter/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/twitter/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/twitter/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/version.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/vwo/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/vwo/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/vwo/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/event_listeners_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/functions_main.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/functions_premium.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/ip_check.js","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/wpm/wc_hooks.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/define property getters","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/global","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/hasOwnProperty shorthand","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/make namespace object","webpack://Pixel-Manager-for-WooCommerce/./src/js-src/public/main.js"],"sourcesContent":[null,null,null,null,null,"(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n","/**\n * Created by elgs on 3/5/16.\n */\nconst normalize = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = a.toLowerCase()\n\n const nh = a.split(/\\:\\:/g);\n if (nh.length > 2) {\n throw new Error('Invalid address: ' + a);\n }\n\n let sections = [];\n if (nh.length == 1) {\n // full mode\n sections = a.split(/\\:/g);\n if (sections.length !== 8) {\n throw new Error('Invalid address: ' + a);\n }\n } else if (nh.length == 2) {\n // compact mode\n const n = nh[0];\n const h = nh[1];\n const ns = n.split(/\\:/g);\n const hs = h.split(/\\:/g);\n for (let i in ns) {\n sections[i] = ns[i];\n }\n for (let i = hs.length; i > 0; --i) {\n sections[7 - (hs.length - i)] = hs[i - 1];\n }\n }\n for (let i = 0; i < 8; ++i) {\n if (sections[i] === undefined) {\n sections[i] = '0000';\n }\n sections[i] = _leftPad(sections[i], '0', 4);\n }\n return sections.join(':');\n};\n\nconst abbreviate = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = normalize(a);\n a = a.replace(/0000/g, 'g');\n a = a.replace(/\\:000/g, ':');\n a = a.replace(/\\:00/g, ':');\n a = a.replace(/\\:0/g, ':');\n a = a.replace(/g/g, '0');\n const sections = a.split(/\\:/g);\n let zPreviousFlag = false;\n let zeroStartIndex = -1;\n let zeroLength = 0;\n let zStartIndex = -1;\n let zLength = 0;\n for (let i = 0; i < 8; ++i) {\n const section = sections[i];\n let zFlag = (section === '0');\n if (zFlag && !zPreviousFlag) {\n zStartIndex = i;\n }\n if (!zFlag && zPreviousFlag) {\n zLength = i - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n zPreviousFlag = (section === '0');\n }\n if (zPreviousFlag) {\n zLength = 8 - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n //console.log(zeroStartIndex, zeroLength);\n //console.log(sections);\n if (zeroStartIndex >= 0 && zeroLength > 1) {\n sections.splice(zeroStartIndex, zeroLength, 'g');\n }\n //console.log(sections);\n a = sections.join(':');\n //console.log(a);\n a = a.replace(/\\:g\\:/g, '::');\n a = a.replace(/\\:g/g, '::');\n a = a.replace(/g\\:/g, '::');\n a = a.replace(/g/g, '::');\n //console.log(a);\n return a;\n};\n\n// Basic validation\nconst _validate = function (a) {\n return /^[a-f0-9\\\\:]+$/ig.test(a);\n};\n\nconst _leftPad = function (d, p, n) {\n const padding = p.repeat(n);\n if (d.length < padding.length) {\n d = padding.substring(0, padding.length - d.length) + d;\n }\n return d;\n};\n\nconst _hex2bin = function (hex) {\n return parseInt(hex, 16).toString(2)\n};\nconst _bin2hex = function (bin) {\n return parseInt(bin, 2).toString(16)\n};\n\nconst _addr2bin = function (addr) {\n const nAddr = normalize(addr);\n const sections = nAddr.split(\":\");\n let binAddr = '';\n for (const section of sections) {\n binAddr += _leftPad(_hex2bin(section), '0', 16);\n }\n return binAddr;\n};\n\nconst _bin2addr = function (bin) {\n const addr = [];\n for (let i = 0; i < 8; ++i) {\n const binPart = bin.substr(i * 16, 16);\n const hexSection = _leftPad(_bin2hex(binPart), '0', 4);\n addr.push(hexSection);\n }\n return addr.join(':');\n};\n\nconst divideSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets; ++i) {\n if (!!limit && i >= limit) {\n break;\n }\n const binSubnet = _leftPad(i.toString(2), '0', mask1 - mask0);\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst range = function (addr, mask0, mask1, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const binStartAddr = binNetPart + '0'.repeat(mask1 - mask0) + binHostPart;\n const binEndAddr = binNetPart + '1'.repeat(mask1 - mask0) + binHostPart;\n if (!!abbr) {\n return {\n start: abbreviate(_bin2addr(binStartAddr)),\n end: abbreviate(_bin2addr(binEndAddr)),\n size: Math.pow(2, mask1 - mask0)\n };\n } else {\n return {\n start: _bin2addr(binStartAddr),\n end: _bin2addr(binEndAddr),\n size: Math.pow(2, mask1 - mask0)\n };\n }\n};\n\nconst randomSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n limit = limit || 1;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets && i < limit; ++i) {\n // generate an binary string with length of mask1 - mask0\n let binSubnet = '';\n for (let j = 0; j < mask1 - mask0; ++j) {\n binSubnet += Math.floor(Math.random() * 2);\n }\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst ptr = function (addr, mask) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask *= 1;\n if (mask < 1 || mask > 128 || Math.floor(mask / 4) != mask / 4) {\n throw new Error('Invalid masks.');\n }\n const fullAddr = normalize(addr);\n const reverse = fullAddr.replace(/:/g, '').split('').reverse();\n return reverse.slice(0, (128 - mask) / 4).join('.');\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n exports.normalize = normalize;\n exports.abbreviate = abbreviate;\n exports.divideSubnet = divideSubnet;\n exports.range = range;\n exports.randomSubnet = randomSubnet;\n exports.ptr = ptr;\n} else {\n window.normalize = normalize;\n window.abbreviate = abbreviate;\n window.divideSubnet = divideSubnet;\n window.range = range;\n window.randomSubnet = randomSubnet;\n window.ptr = ptr;\n}\n","import ipaddr from 'ipaddr.js';\n// @ts-ignore: Can't find a @types/ip6 package\nimport ip6 from 'ip6';\n\nexport function isIP(addr: string) {\n return ipaddr.isValid(addr);\n}\n\nexport function version(addr: string): number {\n try {\n const parse_addr = ipaddr.parse(addr);\n const kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n return 4; //IPv4\n } else if (kind === 'ipv6') {\n return 6; //IPv6\n } else {\n /* istanbul ignore next */\n return 0; //not 4 or 6\n }\n } catch (err) {\n return 0; //not 4 or 6\n }\n}\n\nexport function isV4(addr: string) {\n return version(addr) === 4;\n}\n\nexport function isV6(addr: string) {\n return version(addr) === 6;\n}\n\nexport function isRange(range: string) {\n try {\n const cidr = ipaddr.parseCIDR(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nexport function inRange(addr: string, range: string | string[]) {\n if (typeof range === 'string') {\n if (range.indexOf('/') !== -1) {\n try {\n const range_data = range.split('/');\n\n const parse_addr = ipaddr.parse(addr);\n const parse_range = ipaddr.parse(range_data[0]);\n\n //@ts-ignore: It works.\n return parse_addr.match(parse_range, range_data[1]);\n } catch (err) {\n return false;\n }\n } else {\n addr = isV6(addr) ? ip6.normalize(addr) : addr; //v6 normalize addr\n range = isV6(range) ? ip6.normalize(range) : range; //v6 normalize range\n\n return isIP(range as string) && addr === range;\n }\n } else if (range && typeof range === 'object') {\n //list\n for (const check_range in range) {\n if (inRange(addr, range[check_range]) === true) {\n return true;\n }\n }\n return false;\n } else {\n return false;\n }\n}\n\nexport function storeIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, abbreviate it\n else {\n return ip6.abbreviate(addr);\n }\n } else {\n return null; //invalid IP address\n }\n } catch (err) {\n return null; //invalid IP address\n }\n}\n\n// searchIP is a aliases of storeIP\nexport { storeIP as searchIP };\n\nexport function displayIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, normalize it\n else {\n return ip6.normalize(addr);\n }\n } else {\n return ''; //invalid IP address\n }\n } catch (err) {\n return ''; //invalid IP address\n }\n}\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Adroll event listeners\n *\n * https://help.adroll.com/hc/en-us/articles/360040116252-Connect-AdRoll-to-your-site-by-installing-the-AdRoll-Pixel\n *\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.adroll?.advertiser_id\n\t\t&& wpmDataLayer?.pixels?.adroll?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.adroll?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"adroll\")) wpm.load_adroll_pixel()\n\t}\n})\n\n// view search event\n// https://gist.github.com/dennismarlowe/c6826c360d34d9cf5ba7f7011e8a9741#file-product-search\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.adroll?.loaded) return\n\n\t\tconst data = {\n\t\t\tkeywords: wpm.getSearchTermFromUrl(),\n\t\t\t// \"products\": [...]\n\t\t}\n\n\t\twindow.adroll.track(\"productSearch\", data)\n\t\twpm.consoleLog(\"Adroll: productSearch event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// homeView event\n// https://gist.github.com/dennismarlowe/59a5e7c7635d54ca36c4c0dd8d34dd70#file-home-view\njQuery(document).on(\"wpmEverywhereElse\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.adroll?.loaded) return\n\t\tif (wpmDataLayer?.shop?.page_type !== \"front_page\") return\n\n\t\t// window.adroll.track('homeView', {siteType: 'm'}) // not sure what siteType is. undocumented.\n\t\twindow.adroll.track(\"homeView\")\n\t\twpm.consoleLog(\"Adroll: homeView event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view product event\n// https://gist.github.com/dennismarlowe/6ac4fc4b5d0b228f59683135dcdec51b#file-capturing-product-information\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.adroll?.loaded) return\n\n\t\tlet data = {}\n\n\t\tif (product) {\n\t\t\tdata.product_id = product.dyn_r_ids[wpmDataLayer.pixels.adroll.dynamic_remarketing.id_type]\n\t\t\t// data.product_group = 123\n\t\t}\n\n\t\twindow.adroll.track(\"productView\", data)\n\t\twpm.consoleLog(\"Adroll: productView event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add-to-cart event\n// https://gist.github.com/dennismarlowe/1fede6dfba0d1243072b32aa23413537#file-add-to-cart\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.adroll?.loaded) return\n\n\t\tconst data = {\n\t\t\tcurrency: product.currency,\n\t\t\tproducts: [{\n\t\t\t\tproduct_id: product.dyn_r_ids[wpmDataLayer.pixels.adroll.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\t// product_group: \"abc\",\n\t\t\t\t// category: \"abc\"\n\t\t\t}],\n\t\t}\n\n\t\twindow.adroll.track(\"addToCart\", data)\n\t\twpm.consoleLog(\"Adroll: addToCart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// View order received page event\n// https://gist.github.com/dennismarlowe/090c96c6629d5ca2056a8394cc060c79#file-purchase\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.adroll?.loaded) return\n\n\t\tconst data = {\n\t\t\torder_id : wpmDataLayer.order.id,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tconversion_value: wpmDataLayer.order.value.marketing,\n\t\t\tproducts : wpm.adroll_purchase_items(),\n\t\t}\n\n\t\twindow.adroll.track(\"purchase\", data)\n\t\twpm.consoleLog(\"Adroll: purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Adroll premium functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_adroll_pixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.adroll.loaded = true\n\n\t\t\t// @formatter:off\n\n\t\t\tadroll_adv_id = wpmDataLayer.pixels.adroll.advertiser_id;\n\t\t\tadroll_pix_id = wpmDataLayer.pixels.adroll.pixel_id;\n\t\t\tadroll_version = \"2.0\";\n\n\t\t\t(function(w, d, e, o, a) {\n\t\t\t\tw.__adroll_loaded = true;\n\t\t\t\tw.adroll = w.adroll || [];\n\t\t\t\tw.adroll.f = [ 'setProperties', 'identify', 'track' ];\n\t\t\t\tvar roundtripUrl = \"https://s.adroll.com/j/\" + adroll_adv_id + \"/roundtrip.js\";\n\t\t\t\tfor (a = 0; a < w.adroll.f.length; a++) {\n\t\t\t\t\tw.adroll[w.adroll.f[a]] = w.adroll[w.adroll.f[a]] || (function(n) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tw.adroll.push([ n, arguments ])\n\t\t\t\t\t\t}\n\t\t\t\t\t})(w.adroll.f[a])\n\t\t\t\t}\n\t\t\t\te = d.createElement('script');\n\t\t\t\to = d.getElementsByTagName('script')[0];\n\t\t\t\te.async = 1;\n\t\t\t\te.src = roundtripUrl;\n\t\t\t\to.parentNode.insertBefore(e, o);\n\t\t\t})(window, document);\n\n\t\t\tadroll.track(\"pageView\");\n\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.adroll_purchase_items = () => {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\n\t\t\tlet orderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\t// product_group: \"abc\", // Currently not supported by the Pixel Manager. Would need a custom solution.\n\t\t\t\t// category: item.category, // Not sure yet how to handle, since WC can have multiple categories per product.\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.product_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.adroll.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.product_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.adroll.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Adroll loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: AddToCart event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: InitiateCheckout event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: AddToWishlist event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: ViewContent event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: Search event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t\twpm.consoleLog(\"Facebook Pixel: Purchase event sent\", payload.facebook)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.fbeventsJsUrl = () => {\n\n\t\tlet searchParams = new URLSearchParams(window.location.search)\n\n\t\tif (searchParams.has(\"fbevents-version\")) {\n\t\t\treturn `https://connect.facebook.net/en_US/fbevents.js?v=${searchParams.get(\"fbevents-version\")}`\n\t\t}\n\n\t\treturn wpmDataLayer?.pixels?.facebook?.fbevents_js_url\n\t}\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\twpm.fbeventsJsUrl());\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\t// https://developers.facebook.com/docs/meta-pixel/advanced/#automatic-configuration\n\t\t\t// fbq(\"set\", \"autoConfig\", false, wpmDataLayer.pixels.facebook.pixel_id)\n\n\t\t\t// Initialize the Facebook Pixel and send the first PageView event\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\n\t\t\tif (wpmDataLayer?.pixels?.facebook?.mobile_bridge_app_id) {\n\t\t\t\tfbq(\"set\", \"mobileBridge\", wpmDataLayer.pixels.facebook.pixel_id, wpmDataLayer?.pixels?.facebook?.mobile_bridge_app_id)\n\t\t\t}\n\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.email?.facebook) data.em = wpmDataLayer.user.email.facebook\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.first_name?.facebook) data.fn = wpmDataLayer.user.first_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.last_name?.facebook) data.ln = wpmDataLayer.user.last_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.phone?.facebook) data.ph = wpmDataLayer.user.phone.facebook\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.city?.facebook) data.ct = wpmDataLayer.user.city.facebook\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.state?.facebook) data.st = wpmDataLayer.user.state.facebook\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.postcode?.facebook) data.zp = wpmDataLayer.user.postcode.facebook\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.country?.facebook) data.country = wpmDataLayer.user.country.facebook\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\t// If a IPv6 address is available in the data store, add it to the user data\n\t\tif (wpm.retrieveData(\"ipv6\")) data.client_ip_address = wpm.retrieveData(\"ipv6\")\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t})\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Add functions for Facebook (pro)\n * */\n\n(function (wpm, $, undefined) {\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", (event, product) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t\twpm.consoleLog(\"Google Ads: view_item_list event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t\twpm.consoleLog(\"Google Ads: add_to_cart event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t\twpm.consoleLog(\"Google Ads: view_item event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tObject.values(wpmDataLayer.products).forEach(product => {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t})\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t\twpm.consoleLog(\"Google Ads: view_search_results event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// user log in event\njQuery(document).on(\"wpmLogin\", () => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t\twpm.consoleLog(\"Google Ads: login event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n/**\n * Google Ads remarketing purchase\n *\n * https://support.google.com/google-ads/answer/7305793\n */\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\t// currency: wpmDataLayer.order.currency,\n\t\t\titems: wpm.getGoogleAdsRegularOrderItems(),\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t\twpm.consoleLog(\"Google Ads: purchase event sent (for remarketing lists)\", data)\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n/**\n * Google Ads conversion event\n *\n * new_customer parameter: https://support.google.com/google-ads/answer/9917012\n * cart data: https://support.google.com/google-ads/answer/9028614\n * customer_lifetime_value is undocumented, but available in gtag.js\n */\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.value?.ltv?.marketing) {\n\t\t\tdata.customer_lifetime_value = wpmDataLayer.order.value.ltv.marketing\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\t// https://support.google.com/google-ads/answer/9028614\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata.discount = wpmDataLayer.order.discount\n\t\t\tdata.aw_merchant_id = wpmDataLayer.order.aw_merchant_id\n\t\t\tdata.aw_feed_country = wpmDataLayer.order.aw_feed_country\n\t\t\tdata.aw_feed_language = wpmDataLayer.order.aw_feed_language\n\t\t\tdata.items = wpm.getGoogleAdsRegularOrderItems()\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\t// Event needs to be \"purchase\" (not \"conversion\") in order to be able to track cart data:\n\t\t\t// https://support.google.com/google-ads/answer/9028614\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t\twpm.consoleLog(\"Google Ads: conversion event sent\", data)\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = () => {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tObject.entries(wpmDataLayer.pixels.google.ads.conversionIds).forEach(([key, item]) => {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = () => {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tObject.keys(wpmDataLayer.pixels.google.ads.conversionIds).forEach((key) => {\n\t\t\tconversionIdentifiers.push(key)\n\t\t})\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = () => {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach((item) => {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load GA4 event listeners\n * */\n\n// view_item_list event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#view_item_list\njQuery(document).on(\"wpmViewItemList\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t\titem_list_name: wpmDataLayer.shop.list_name, // doesn't make sense on mini_cart\n\t\t\titem_list_id : wpmDataLayer.shop.list_id, // doesn't make sense on mini_cart\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: view_item_list event sent\".data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select_item event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#select_item\njQuery(document).on(\"wpmSelectItem\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"select_item\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: select_item event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#add_to_cart\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : product.price * product.quantity,\n\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: add_to_cart event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#view_item\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.currency = wpmDataLayer.shop.currency\n\t\t\t// data.value = 0\n\t\t\tdata.items = [wpm.ga4GetFullProductItemData(product)]\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: view_item event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_wishlist event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#add_to_wishlist\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : product.price * product.quantity,\n\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"add_to_wishlist\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: add_to_wishlist event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// remove_from_cart event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#remove_from_cart\njQuery(document).on(\"wpmRemoveFromCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : product.price * product.quantity,\n\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"remove_from_cart\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: remove_from_cart event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// begin_checkout event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#begin_checkout\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t// coupon: \"\",\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : wpm.getCartValue(),\n\t\t\titems : wpm.getCartItemsGa4(),\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"begin_checkout\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: begin_checkout event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_cart event\n// https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag#view_cart\njQuery(document).on(\"wpmViewCart\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tif (jQuery.isEmptyObject(wpmDataLayer.cart)) return\n\n\t\tlet products = []\n\t\tlet cartValue = null\n\n\t\tObject.values(wpmDataLayer.cart).forEach(product => {\n\t\t\tproducts.push(wpm.ga4GetFullProductItemData(product))\n\t\t\tcartValue = cartValue + product.quantity * product.price\n\t\t})\n\t\t\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : cartValue.toFixed(2),\n\t\t\titems : products,\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_cart\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: view_cart event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tlet products = []\n\n\t\tObject.values(wpmDataLayer.products).forEach(product => {\n\t\t\tproducts.push(wpm.ga4GetFullProductItemData(product))\n\t\t})\n\n\t\tconst data = {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tsearch_term: wpm.getSearchTermFromUrl(),\n\t\t\titems : products,\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: view_search_results event sent\", data)\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\n\t\t// ga4_server_and_browser_tracking experiment\n\t\t// https://app.asana.com/0/1110999795232049/1204453591507565\n\t\t// ga4e: if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) {\n\t\t// \tif (wpmDataLayer?.experiments?.ga4_server_and_browser_tracking) {\n\t\t// \t\tbreak ga4e\n\t\t// \t}\n\t\t// \treturn\n\t\t// }\n\n\t\t// Deactivated for the ga4_server_and_browser_tracking experiment\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tvalue : wpmDataLayer.order.value.total,\n\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\titems : wpm.getGA4OrderItems(),\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: purchase event sent\", data)\n\t\t})\n\n\t\t// wpm.gtagLoaded().then(function () {\n\t\t// \tgtag(\"get\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, \"client_id\", (client_id) => {\n\t\t// \t\tconsole.log(\"transaction_id: \" + wpmDataLayer.order.number + \" client_id: \" + client_id)\n\t\t// \t})\n\t\t// })\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load GA4 premium event listeners\n * */\n\n// user log in event\njQuery(document).on(\"wpmLogin\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\tconst data = {\n\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t}\n\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t\twpm.consoleLog(\"Google Analytics: login event sent\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Scroll tracking event\n */\n\njQuery(document).on(\"pmwScrollDepth\", (event, scrollEvent) => {\n\n\tif (!wpmDataLayer?.pixels?.google?.analytics?.eec) return\n\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\tconst data = {\n\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\tvalue : scrollEvent.threshold,\n\t}\n\n\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"scroll\", data)\n\t\twpm.consoleLog(\"Google Analytics: scroll event sent\", data)\n\t})\n})\n\n/**\n * Attach an event listener to all links that contain tel: links\n */\njQuery(document).on(\"click\", \"a[href^='tel:']\", (event) => {\n\n\t// Get the phone number from the link\n\tlet phoneNumber = event.target.href.replace(\"tel:\", \"\")\n\n\t// Trim the phone number and remove all whitespaces\n\tphoneNumber = phoneNumber.replace(/\\s/g, \"\")\n\n\tconst data = {\n\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\tclicked_phone_number: phoneNumber,\n\t}\n\n\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"phone_number_click\", data)\n\t\twpm.consoleLog(\"Google Analytics: phone_number_click event sent\", data)\n\t})\n})\n\n/**\n * Attach an event listener to all links that contain mailto: links\n */\njQuery(document).on(\"click\", \"a[href^='mailto:']\", event => {\n\n\tconsole.log(\"email click\")\n\tconsole.log(\"email address: \" + wpm.getEmailFromTarget(event.target))\n\tconsole.log(\"event.target: \", event.target)\n\n\tconst data = {\n\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\tclicked_email: wpm.getEmailFromTarget(event.target),\n\t}\n\n\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"email_click\", data)\n\t\twpm.consoleLog(\"Google Analytics: email_click event sent\", data)\n\t})\n})\n\n// Track load time in GA4 in seconds\n// https://www.lovesdata.com/blog/page-load-google-analytics\njQuery(window).on(\"load\", () => {\n\n\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.page_load_time_tracking) return\n\n\tlet timeToLoad = (performance.now() / 1000).toFixed(2)\n\n\t// console.log(\"Time to load: \" + timeToLoad + \" seconds\");\n\n\tconst data = {\n\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\tpage_load_time_seconds: timeToLoad,\n\t}\n\n\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"page_load_time\", data)\n\t\twpm.consoleLog(\"Google Analytics: page_load_time event sent\", data)\n\t})\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach((item) => {\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load GA4 premium functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.ga4AddFormattedCategories = (item_data, categories) => {\n\n\t\tlet maxCategories = 5\n\n\t\t// remove categories with equal names from array\n\t\tcategories = Array.from(new Set(categories))\n\n\t\tif (Array.isArray(categories) && categories.length) {\n\n\t\t\titem_data[\"item_category\"] = categories[0]\n\n\t\t\tlet max = categories.length > maxCategories ? maxCategories : categories.length\n\n\t\t\tfor (let i = 1; i < max; i++) {\n\t\t\t\titem_data[\"item_category\" + (i + 1)] = categories[i]\n\t\t\t}\n\t\t}\n\n\t\treturn item_data\n\t}\n\n\twpm.getCartItemsGa4 = () => {\n\n\t\tlet data = []\n\n\t\tObject.values(wpmDataLayer.cart).forEach(product => {\n\t\t\tdata.push(wpm.ga4GetFullProductItemData(product))\n\t\t})\n\n\t\treturn data\n\t}\n\n\twpm.ga4GetBasicProductItemData = (product) => {\n\n\t\treturn {\n\t\t\titem_id : product.dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type],\n\t\t\titem_name: product.name,\n\t\t\t// coupon : \"\",\n\t\t\t// discount: 0,\n\t\t\t// affiliation: \"\",\n\t\t\titem_brand : product.brand,\n\t\t\titem_variant: product.variant,\n\t\t\tprice : product.price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tquantity : product.quantity,\n\t\t}\n\t}\n\n\twpm.ga4AddListNameToProduct = (item_data, productPosition = null) => {\n\n\t\titem_data.item_list_name = wpmDataLayer.shop.list_name\n\t\titem_data.item_list_id = wpmDataLayer.shop.list_id\n\n\t\tif (productPosition) {\n\t\t\titem_data.index = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n\twpm.ga4GetFullProductItemData = (product) => {\n\n\t\tlet item_data\n\n\t\titem_data = wpm.ga4GetBasicProductItemData(product)\n\t\titem_data = wpm.ga4AddListNameToProduct(item_data, product.position)\n\t\titem_data = wpm.ga4AddFormattedCategories(item_data, product.category)\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Run the following on every page load\n */\n\njQuery(document).on(\"wpmLoadAlways\", function () {\n\n\ttry {\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = (type) => {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.is_active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = (google_consent_settings) => {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) {\n\t\t\t\tgoogle_consent_settings.ad_storage = \"granted\"\n\t\t\t\tgoogle_consent_settings.ad_user_data = \"granted\"\n\t\t\t\tgoogle_consent_settings.ad_personalization = \"granted\"\n\t\t\t}\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_user_data = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_personalization = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.fireGtagGoogleAds = () => {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tObject.keys(wpmDataLayer.pixels.google.ads.conversionIds).forEach((key) => {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tObject.keys(wpmDataLayer.pixels.google.ads.conversionIds).forEach((key) => {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (\n\t\t\t\twpmDataLayer?.shop?.page_type\n\t\t\t\t&& \"order_received_page\" === wpmDataLayer.shop.page_type\n\t\t\t\t&& wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data\n\t\t\t) {\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.google.com/tag-platform/gtagjs/reference\n\twpm.fireGtagGoogleAnalyticsGA4 = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = () => {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t}\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.ads?.conversionIds\n\t\t\t&& Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t) {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\tconsole.log(\"UA analytics ID\")\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\n\twpm.loadGoogle = () => {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then((script, textStatus) => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// If Google TCF is active, output the TCF script\n\t\t\t\t\t\t// https://developers.google.com/tag-platform/security/guides/implement-TCF-strings\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.tcf_support) {\n\t\t\t\t\t\t\twindow['gtag_enable_tcf_support'] = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.is_active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\" : wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"ad_user_data\" : wpmDataLayer.pixels.google.consent_mode.ad_user_data,\n\t\t\t\t\t\t\t\t\"ad_personalization\": wpmDataLayer.pixels.google.consent_mode.ad_personalization,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\t\t\t\t\t\tgtag(\"set\", \"developer_id.dNDI5Yz\", true)\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.is_active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = () => {\n\t\treturn new Promise((resolve, reject) => {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) {\n\t\t\t\t\twpm.consoleError(\"Google gtag failed to load. Probably a third party script is blocking it.\")\n\t\t\t\t\treturn reject()\n\t\t\t\t}\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Google base premium functions\n */\n\n(function (wpm, $, undefined) {\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load LinkedIn event listeners\n *\n * https://www.linkedin.com/help/lms/answer/a425606?lang=en-US\n *\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.linkedin?.partner_id && !wpmDataLayer?.pixels?.linkedin?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"linkedin\")) wpm.load_linkedin_pixel()\n\t}\n})\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.search) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.search,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: search event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_content event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.view_content) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.view_content,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: view_content event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_list event\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.add_to_list) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.add_to_list,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: add_to_list event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add-to-cart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.add_to_cart) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.add_to_cart,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: add_to_cart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// start-checkout event\njQuery(document).on(\"wpmBeginCheckout\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.start_checkout) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.start_checkout,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: start_checkout event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// View order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.purchase) return\n\n\t\tconst data = {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.purchase,\n\t\t}\n\n\t\twindow.lintrk(\"track\", data)\n\t\twpm.consoleLog(\"LinkedIn: purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load LinkedIn premium functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_linkedin_pixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.linkedin.loaded = true\n\n\t\t\t// @formatter:off\n\n\t\t\t_linkedin_partner_id = wpmDataLayer.pixels.linkedin.partner_id;\n\t\t\twindow._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\n\t\t\twindow._linkedin_data_partner_ids.push(_linkedin_partner_id);\n\n\t\t\t(function(l) {\n\t\t\tif (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};\n\t\t\twindow.lintrk.q=[]}\n\t\t\tvar s = document.getElementsByTagName(\"script\")[0];\n\t\t\tvar b = document.createElement(\"script\");\n\t\t\tb.type = \"text/javascript\";b.async = true;\n\t\t\tb.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\n\t\t\ts.parentNode.insertBefore(b, s);})(window.lintrk);\n\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * LinkedIn loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Microsoft Ads event listeners\n *\n * https://help.ads.microsoft.com/#apex/ads/en/56684/2\n * https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n *\n * add_payment_info, add_to_cart, add_to_wishlist, begin_checkout, checkout_progress, exception, generate_lead, login, page_view, purchase, refund, remove_from_cart, screen_view, search, select_content, set_checkout_option, share, sign_up, timing_complete, view_item, view_item_list, view_promotion, view_search_results\n *\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.bing?.uet_tag_id && !wpmDataLayer?.pixels?.bing?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"microsoft-ads\")) wpm.load_bing_pixel()\n\t}\n})\n\n// https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n// add-to-cart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tconst data = {\n\t\t\tecomm_pagetype: \"cart\",\n\t\t\tecomm_prodid : product.dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type],\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"add_to_cart\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: add_to_cart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n// view product event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tlet data = {}\n\n\t\tif (product) {\n\t\t\tdata.ecomm_pagetype = \"product\"\n\t\t\tdata.ecomm_prodid = product.dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type]\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: view_item event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n// view category event\njQuery(document).on(\"wpmCategory\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tlet data = {\n\t\t\tecomm_pagetype: \"category\",\n\t\t}\n\n\t\tif (Object.keys(wpmDataLayer?.products || {}).length) {\n\t\t\tdata.ecomm_prodid = wpm.getBingDataLayerProducts()\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: view_category event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tlet data = {\n\t\t\tecomm_query : wpm.getSearchTermFromUrl(),\n\t\t\tecomm_pagetype: \"searchresults\",\n\t\t}\n\n\t\tif (Object.keys(wpmDataLayer?.products || {}).length) {\n\t\t\tdata.ecomm_prodid = wpm.getBingDataLayerProducts()\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: view_search_results event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n/**\n * The ecomm_pagetype parameter identifies the type of page the user has visited.\n * Valid options: home, searchresults, category, product, cart, purchase, other.\n * */\njQuery(document).on(\"wpmEverywhereElse\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tlet data = {\n\t\t\tecomm_pagetype: wpmDataLayer?.shop?.page_type === \"front_page\" ? \"home\" : \"other\",\n\t\t}\n\n\t\tif (Object.keys(wpmDataLayer?.products || {}).length) {\n\t\t\tdata.ecomm_prodid = wpm.getBingDataLayerProducts()\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: generic event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// https://help.ads.microsoft.com/#apex/ads/en/60118/-1\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.bing?.loaded) return\n\n\t\tconst data = {\n\t\t\tecomm_pagetype: \"purchase\",\n\t\t\tecomm_prodid : wpm.bing_purchase_ecomm_prodids(),\n\t\t\trevenue_value : wpmDataLayer.order.value.marketing,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\titems : wpm.bing_purchase_items(),\n\t\t}\n\n\t\twindow.uetq.push(\"event\", \"purchase\", data)\n\t\twpm.consoleLog(\"Microsoft Ads: purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Microsoft Ads premium functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_bing_pixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.bing.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\twindow.uetq = window.uetq || [];\n\n\t\t\t(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:wpmDataLayer.pixels.bing.uet_tag_id};o.q=w[u],w[u]=new UET(o),w[u].push(\"pageLoad\")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!==\"loaded\"&&s!==\"complete\"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,\"script\",\"//bat.bing.com/bat.js\",\"uetq\");\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.bing_purchase_ecomm_prodids = () => {\n\n\t\tlet prodIds = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach((orderItem) => {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== orderItem.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[orderItem.variation_id].dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[orderItem.id].dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t})\n\n\t\treturn prodIds\n\t}\n\n\twpm.bing_purchase_items = () => {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\n\t\t\tlet orderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n\twpm.getBingDataLayerProducts = () => {\n\n\t\tlet productIds = []\n\n\t\tObject.values(wpmDataLayer.products).forEach((product) => {\n\t\t\tproductIds.push(String(product.dyn_r_ids[wpmDataLayer.pixels.bing.dynamic_remarketing.id_type]))\n\t\t})\n\n\t\treturn productIds\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Microsoft Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Source: https://www.outbrain.com/help/advertisers/dynamic-values/\n *\n * All event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.outbrain?.advertiser_id && !wpmDataLayer?.pixels?.outbrain?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"outbrain-ads\")) wpm.loadOutbrainPixel()\n\t}\n})\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.outbrain?.loaded) return\n\n\t\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.search)\n\t\twpm.consoleLog(\"Outbrain: search event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// ViewContent event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.outbrain?.loaded) return\n\n\t\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.view_content)\n\t\twpm.consoleLog(\"Outbrain: view_content event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// AddToCart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.outbrain?.loaded) return\n\n\t\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.add_to_cart)\n\t\twpm.consoleLog(\"Outbrain: add_to_cart event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// begin_checkout event\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.outbrain?.loaded) return\n\n\t\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.start_checkout)\n\t\twpm.consoleLog(\"Outbrain: start_checkout event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view order received page event\n// https://www.outbrain.com/help/advertisers/dynamic-values/\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.outbrain?.loaded) return\n\n\t\tconst data = {\n\t\t\torderValue: String(wpmDataLayer.order.value.marketing),\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\torderId : String(wpmDataLayer.order.id),\n\t\t}\n\n\t\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.purchase, data)\n\t\twpm.consoleLog(\"Outbrain: purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Outbrain Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.loadOutbrainPixel = () => {\n\n\t\tconst outbrainId = wpmDataLayer.pixels.outbrain.advertiser_id\n\n\t\ttry {\n\n\t\t\t// @formatter:off\n\t\t\t!function(_window, _document) {\n\t\t\t\tvar OB_ADV_ID = outbrainId;\n\t\t\t\tif (_window.obApi) {\n\t\t\t\t\tvar toArray = function(object) {\n\t\t\t\t\t\treturn Object.prototype.toString.call(object) === '[object Array]' ? object : [object];\n\t\t\t\t\t};\n\t\t\t\t\t_window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar api = _window.obApi = function() {\n\t\t\t\t\tapi.dispatch ? api.dispatch.apply(api, arguments) : api.queue.push(arguments);\n\t\t\t\t};\n\t\t\t\tapi.version = '1.1';\n\t\t\t\tapi.loaded = true;\n\t\t\t\tapi.marketerId = OB_ADV_ID;\n\t\t\t\tapi.queue = [];\n\t\t\t\tvar tag = _document.createElement('script');\n\t\t\t\ttag.async = true;\n\t\t\t\ttag.src = '//amplify.outbrain.com/cp/obtp.js';\n\t\t\t\ttag.type = 'text/javascript';\n\t\t\t\tvar script = _document.getElementsByTagName('script')[0];\n\t\t\t\tscript.parentNode.insertBefore(tag, script);\n\t\t\t}(window, document);\n\n\t\t\tobApi('track', 'PAGE_VIEW');\n\t\t\t// @formatter:on\n\n\t\t\twpmDataLayer.pixels.outbrain.loaded = true\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Pinterest event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.pinterest?.pixel_id && !wpmDataLayer?.pixels?.pinterest?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"pinterest-ads\")) wpm.loadPinterestPixel()\n\t}\n})\n\n// https://help.pinterest.com/en/business/article/add-event-codes\n// AddToCart event\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\tconst product = payload.product\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.pinterest?.loaded) return\n\n\t\tconst data = {\n\t\t\tevent_id : payload.pinterest.event_id,\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t\tline_items: [wpm.getPinterestProductData(product)],\n\t\t}\n\n\t\t// keep \"addtocart\" as this is the official browser event name\n\t\tpintrk(\"track\", \"addtocart\", data)\n\t\twpm.consoleLog(\"Pinterest Pixel: AddToCart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// https://help.pinterest.com/en/business/article/add-event-codes\n// pageview event\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\tconst product = payload.product\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.pinterest?.loaded) return\n\n\t\tlet data = {\n\t\t\tevent_id: payload.pinterest.event_id,\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.currency = product.currency\n\t\t\tdata.line_items = [wpm.getPinterestProductData(product)]\n\t\t}\n\n\t\tpintrk(\"track\", \"pagevisit\", data)\n\t\twpm.consoleLog(\"Pinterest Pixel: pagevisit event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view search event\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.pinterest?.loaded) return\n\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\n\t\tconst data = {\n\t\t\tevent_id : payload.pinterest.event_id,\n\t\t\tsearch_query: urlParams.get(\"s\"),\n\t\t}\n\n\t\tpintrk(\"track\", \"search\", data)\n\t\twpm.consoleLog(\"Pinterest Pixel: search event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view category event\njQuery(document).on(\"wpmClientSideViewCategory\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.pinterest?.loaded) return\n\n\t\tconst data = {\n\t\t\tevent_id: payload.pinterest.event_id,\n\t\t}\n\n\t\tpintrk(\"track\", \"viewcategory\", data)\n\t\twpm.consoleLog(\"Pinterest Pixel: viewcategory event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// https://developers.pinterest.com/docs/tag/conversion/\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.pinterest?.loaded) return\n\n\t\tconst data = {\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\torder_quantity: wpmDataLayer.order.quantity,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\torder_id : wpmDataLayer.order.id.toString(),\n\t\t\tline_items : wpm.pinterestFormattedOrderItems(),\n\t\t}\n\n\t\tpintrk(\"track\", \"checkout\", data)\n\t\twpm.consoleLog(\"Pinterest Pixel: checkout event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","// TODO add enhanced match email hash to uncached pages like cart and purchase confirmation page\n// TODO check if more values can be passed to product and category pages\n// TODO look into how Pinterest handles variants separately https://developers.pinterest.com/docs/tag/conversion/\n\n/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Pinterest premium functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getPinterestProductData = product => {\n\n\t\tif (product.isVariation) {\n\t\t\treturn {\n\t\t\t\tproduct_name : product.name,\n\t\t\t\tproduct_variant_id: product.dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type],\n\t\t\t\t// product_id : wpmDataLayer.products[product.parentId].dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type],\n\t\t\t\tproduct_id : product.parentId_dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type],\n\t\t\t\tproduct_category: product.category,\n\t\t\t\tproduct_variant : product.variant,\n\t\t\t\tproduct_price : product.price,\n\t\t\t\tproduct_quantity: product.quantity,\n\t\t\t\tproduct_brand : product.brand,\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tproduct_name : product.name,\n\t\t\t\tproduct_id : product.dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type],\n\t\t\t\tproduct_category: product.category,\n\t\t\t\tproduct_price : product.price,\n\t\t\t\tproduct_quantity: product.quantity,\n\t\t\t\tproduct_brand : product.brand,\n\t\t\t}\n\t\t}\n\t}\n\n\twpm.pinterestFormattedOrderItems = () => {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach((item) => {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tproduct_category: wpmDataLayer.products[item.id].category.join(\",\"),\n\t\t\t\t// product_brand : wpmDataLayer.products[key].brand,\n\t\t\t\tproduct_quantity: item.quantity,\n\t\t\t\tproduct_price : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.product_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type])\n\t\t\t\torderItem.product_name = wpmDataLayer.products[item.variation_id].name\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.product_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type])\n\t\t\t\torderItem.product_name = wpmDataLayer.products[item.id].name\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n\t// https://developers.pinterest.com/docs/tag/conversion/\n\twpm.loadPinterestPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.pinterest.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(e){if(!window.pintrk){window.pintrk=function(){window.pintrk.queue.push(\n\t\t\t\tArray.prototype.slice.call(arguments))};var\n\t\t\t\tn=window.pintrk;n.queue=[],n.version=\"3.0\";var\n\t\t\t\tt=document.createElement(\"script\");t.async=!0,t.src=e;var\n\t\t\t\tr=document.getElementsByTagName(\"script\")[0];r.parentNode.insertBefore(t,r)}}(\"https://s.pinimg.com/ct/core.js\");\n\n\t\t\twpm.pinterestLoadEvent();\n\t\t\tpintrk('page');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://help.pinterest.com/en/business/article/enhanced-match\n\twpm.pinterestLoadEvent = () => {\n\t\ttry {\n\t\t\tif (\n\t\t\t\t(\n\t\t\t\t\twpmDataLayer.general.userLoggedIn ||\n\t\t\t\t\t\"order_received_page\" === wpmDataLayer.shop.page_type\n\t\t\t\t)\n\t\t\t\t&& wpmDataLayer?.user?.email?.sha256\n\t\t\t) {\n\t\t\t\tpintrk(\"load\", wpmDataLayer.pixels.pinterest.pixel_id, {em: wpmDataLayer.user.email.sha256})\n\t\t\t} else {\n\t\t\t\tpintrk(\"load\", wpmDataLayer.pixels.pinterest.pixel_id)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://help.pinterest.com/en/business/article/pinterest-tag-parameters-and-cookies\n\twpm.getPinterestUserDataFromBrowser = () => {\n\n\t\tlet data = {}\n\n\t\tif (\n\t\t\twpm.getCookie(\"_pin_unauth\")\n\t\t\t|| wpm.getCookie(\"_pinterest_ct_rt\")\n\t\t\t|| wpm.getCookie(\"_pinterest_ct\")\n\t\t\t|| wpm.getCookie(\"_pinterest_ct_ua\")\n\t\t\t|| wpm.getCookie(\"_pinterest_sess\")\n\t\t) {\n\t\t\tdata.trackingPermitted = true\n\t\t}\n\n\t\t// https://developers.pinterest.com/docs/conversions/event/\n\t\t// Not 100% if this must be an array or not.\n\t\t// On https://developers.pinterest.com/docs/conversions/event/ it is specified as an array.\n\t\t// On the setup guide it is specified as a string: https://cln.sh/z5FZsDM8\n\n\t\t// If the epik parameter is present in the URL and is valid, add it to the click_id array\n\t\tif (\n\t\t\twpm.urlHasParameter(\"epik\")\n\t\t\t&& wpm.isValidEpikCookie(wpm.getUrlParameter(\"epik\"))\n\t\t) {\n\t\t\tdata.click_id = wpm.getUrlParameter(\"epik\")\n\t\t}\n\n\t\tif (\n\t\t\t!data.click_id\n\t\t\t&& wpm.getCookie(\"_epik\")\n\t\t\t&& wpm.isValidEpikCookie(wpm.getCookie(\"_epik\"))\n\t\t) {\n\t\t\tdata.click_id = wpm.getCookie(\"_epik\")\n\t\t}\n\n\t\tif (\n\t\t\t!data.click_id\n\t\t\t&& wpm.getCookie(\"_derived_epik\")\n\t\t\t&& wpm.isValidDerivedEpikCookie(wpm.getCookie(\"_derived_epik\"))\n\t\t) {\n\t\t\tdata.click_id = wpm.getCookie(\"_derived_epik\")\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\tif (wpmDataLayer?.pixels?.pinterest?.advanced_matching) {\n\t\t\tif (wpmDataLayer?.user?.email?.sha256) data.em = [wpmDataLayer.user.email.sha256]\n\t\t\tif (wpmDataLayer?.user?.phone?.pinterest) data.ph = [wpmDataLayer.user.phone.pinterest]\n\t\t\tif (wpmDataLayer?.user?.first_name?.pinterest) data.fn = [wpmDataLayer.user.first_name.pinterest]\n\t\t\tif (wpmDataLayer?.user?.last_name?.pinterest) data.ln = [wpmDataLayer.user.last_name.pinterest]\n\t\t\tif (wpmDataLayer?.user?.id?.sha256) data.external_id = [wpmDataLayer.user.id.sha256]\n\t\t\tif (wpmDataLayer?.user?.city?.pinterest) data.ct = [wpmDataLayer.user.city.pinterest]\n\t\t\tif (wpmDataLayer?.user?.state?.pinterest) data.st = [wpmDataLayer.user.state.pinterest]\n\t\t\tif (wpmDataLayer?.user?.postcode?.pinterest) data.zp = [wpmDataLayer.user.postcode.pinterest]\n\t\t\tif (wpmDataLayer?.user?.country?.pinterest) data.country = [wpmDataLayer.user.country.pinterest]\n\t\t}\n\n\t\treturn data\n\t}\n\n\twpm.isValidEpikCookie = (cookie) => {\n\n\t\t// The following are two valid _epik cookies. Create a regex that checks if a cookie is valid. The function should return true if the cookie is valid and false if it is not.\n\t\t// dj0yJnU9aUYyam5aN0N6SjhMZU1pTk1iRTdfUnlNcXRpdHJ1c2UmcD0xJm49QVJEX2VPajVWUWtramc4MUZTWlRfZyZ0PUFBQUFBR1JfV1BN\n\t\t// dj0yJnU9dms1bVZPSEFfWEJOazJjQ2pxemExX0NMVy0yUlV6M2EmcD0xJm49RFI4bjBfSjlheE9PMXhrWXltbmFhdyZ0PUFBQUFBR1JfVzVJ\n\n\t\t// Create a regex that checks if a cookie is valid. The function should return true if the cookie is valid and false if it is not.\n\t\t(/^dj0yJnU9[a-zA-Z0-9\\-\\_]{100}/).test(cookie)\n\t}\n\n\twpm.isValidDerivedEpikCookie = (cookie) => {\n\n\t\t// The following are valid _derived_epik cookies:\n\t\t// dj0yJnU9dkV4amp4ZkN4S3c2UzVXTXp3V09OeGVXZHg4WElPczQmbj1oOTBzWUZSZEJHYkNuUXU1TEpvamJRJm09MSZ0PUFBQUFBR1JfV1JnJnJtPTEmcnQ9QUFBQUFHUl9XUmcmc3A9NQ\n\t\t// dj0yJnU9VHNZZGQwM25sdXFNcEt6TzlXdFl6WGxraHZfaml1dHkmbj11Y3RHRXNQUzQwSjBIWnZla19HV0xBJm09MSZ0PUFBQUFBR1JfWEFrJnJtPTEmcnQ9QUFBQUFHUl9YQWsmc3A9NQ\n\n\t\t(/^dj0yJnU9[a-zA-Z0-9\\-\\_]{134}/).test(cookie)\n\t}\n\n\twpm.pinterestGetProductDataForCapiEvent = (product) => {\n\n\t\treturn {\n\t\t\tcurrency : product.currency,\n\t\t\tvalue : String(product.price * product.quantity),\n\t\t\tcontent_ids: [String(product.dyn_r_ids[wpmDataLayer.pixels.pinterest.dynamic_remarketing.id_type])],\n\t\t\tnum_items : 1,\n\t\t\tcontents : [{\n\t\t\t\titem_price: String(product.price),\n\t\t\t\tquantity : product.quantity,\n\t\t\t}],\n\t\t}\n\t}\n\n\twpm.getPinterestS2SBaseData = () => {\n\n\t\treturn {\n\t\t\taction_source : \"web\",\n\t\t\tevent_time : Math.round(Date.now() / 1000),\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\t// opt_out : false,\n\t\t\t// partner_name: \"direct\",\n\t\t\tuser_data: wpm.getPinterestUserDataFromBrowser(),\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Pinterest Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Reddit event listeners\n *\n * Basic info: https://redditinc.force.com/helpcenter/s/article/Install-the-Reddit-Pixel-on-your-website\n * Advanced matching: https://redditinc.force.com/helpcenter/s/article/Reddit-Pixel-Advanced-Matching\n * Event metadata: https://redditinc.force.com/helpcenter/s/article/Reddit-Pixel-Event-Metadata\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\tif (wpmDataLayer?.pixels?.reddit?.advertiser_id && !wpmDataLayer?.pixels?.reddit?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"reddit-ads\")) wpm.loadRedditPixel()\n\t}\n})\n\n// AddToCart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.reddit?.loaded) return\n\n\t\tlet data = {\n\t\t\tcurrency : product.currency,\n\t\t\titemCount: product.quantity,\n\t\t\tvalue : product.price * product.quantity,\n\t\t}\n\n\t\trdt(\"track\", \"AddToCart\", data)\n\t\twpm.consoleLog(\"Reddit Pixel: AddToCart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// ViewContent event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.reddit?.loaded) return\n\n\t\trdt(\"track\", \"ViewContent\")\n\t\twpm.consoleLog(\"Reddit Pixel: ViewContent event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.reddit?.loaded) return\n\n\t\trdt(\"track\", \"Search\")\n\t\twpm.consoleLog(\"Reddit Pixel: search event sent\")\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.reddit?.loaded) return\n\n\t\tlet data = {\n\t\t\tcurrency : product.currency,\n\t\t\titemCount: product.quantity,\n\t\t\tvalue : product.price * product.quantity,\n\t\t}\n\n\t\trdt(\"track\", \"AddToWishlist\", data)\n\t\twpm.consoleLog(\"Reddit Pixel: AddToWishlist event sent\", data)\n\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.reddit?.loaded) return\n\n\t\tlet data = {\n\t\t\ttransactionId: wpmDataLayer.order.number,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t}\n\n\t\t// Get order item count\n\t\t// Go through each order item and sum up the quantity\n\t\tif (wpmDataLayer.order.items) {\n\t\t\tlet itemCount = 0\n\t\t\twpmDataLayer.order.items.forEach(item => {\n\t\t\t\titemCount += parseInt(item.quantity)\n\t\t\t})\n\n\t\t\tdata.itemCount = itemCount\n\t\t}\n\n\t\trdt(\"track\", \"Purchase\", data)\n\t\twpm.consoleLog(\"Reddit Pixel: Purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Reddit functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getRedditAdvertiserId = () => {\n\t\treturn wpmDataLayer.pixels.reddit.advertiser_id\n\t}\n\n\t// https://redditinc.force.com/helpcenter/s/article/Reddit-Pixel-Advanced-Matching\n\twpm.redditInitEvent = () => {\n\t\ttry {\n\t\t\tif (\n\t\t\t\t(\n\t\t\t\t\twpmDataLayer.general.userLoggedIn\n\t\t\t\t\t|| \"order_received_page\" === wpmDataLayer?.shop?.page_type\n\t\t\t\t)\n\t\t\t\t&& wpmDataLayer?.pixels?.reddit?.advanced_matching\n\t\t\t) {\n\t\t\t\tlet data = {\n\t\t\t\t\toptOut : false,\n\t\t\t\t\tuseDecimalCurrencyValues: true,\n\t\t\t\t}\n\n\t\t\t\tif (wpmDataLayer?.user?.email?.sha256) {\n\t\t\t\t\tdata.email = wpmDataLayer.user.email.sha256\n\t\t\t\t}\n\n\t\t\t\tif (wpmDataLayer?.user?.id?.sha256) {\n\t\t\t\t\tdata.externalId = wpmDataLayer.user.id.sha256\n\t\t\t\t}\n\n\t\t\t\trdt(\"init\", wpm.getRedditAdvertiserId(), data)\n\n\t\t\t} else {\n\t\t\t\trdt(\"init\", wpm.getRedditAdvertiserId())\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.loadRedditPixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.reddit.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(w,d){if(!w.rdt){var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)};p.callQueue=[];var t=d.createElement(\"script\");t.src=\"https://www.redditstatic.com/ads/pixel.js\",t.async=!0;var s=d.getElementsByTagName(\"script\")[0];s.parentNode.insertBefore(t,s)}}(window,document);\n\n\t\t\twpm.redditInitEvent();\n\t\t\trdt('track', 'PageVisit');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Reddit Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","// TODO check all events and add more if there are any\n\n/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * All event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.snapchat?.pixel_id && !wpmDataLayer?.pixels?.snapchat?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"snapchat-ads\")) wpm.loadSnapchatPixel()\n\t}\n})\n\n// AddToCart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.snapchat?.loaded) return\n\n\t\tconst data = {\n\t\t\titem_ids: [product.dyn_r_ids[wpmDataLayer.pixels.snapchat.dynamic_remarketing.id_type]],\n\t\t}\n\n\t\tsnaptr(\"track\", \"ADD_CART\", data)\n\t\twpm.consoleLog(\"Snapchat Pixel: ADD_CART event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// VIEW_CONTENT event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.snapchat?.loaded) return\n\n\t\tlet data = {}\n\n\t\tif (product) {\n\t\t\tdata.item_ids = [product.dyn_r_ids[wpmDataLayer.pixels.snapchat.dynamic_remarketing.id_type]]\n\t\t}\n\n\t\tsnaptr(\"track\", \"VIEW_CONTENT\", data)\n\t\twpm.consoleLog(\"Snapchat Pixel: VIEW_CONTENT event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.snapchat?.loaded) return\n\n\t\tconst data = {\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tprice : wpmDataLayer.order.value.marketing,\n\t\t\ttransaction_id: wpmDataLayer.order.id,\n\t\t\titem_ids : wpm.getSnapchatOrderItemIds(),\n\t\t}\n\n\t\tsnaptr(\"track\", \"PURCHASE\", data)\n\t\twpm.consoleLog(\"Snapchat Pixel: PURCHASE event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Snapchat Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.snapchatGetEmail = () => {\n\n\t\tlet userInfo = {}\n\n\t\tif (wpmDataLayer?.user?.email?.sha256) {\n\t\t\tuserInfo.user_hashed_email = wpmDataLayer.user.email.sha256\n\t\t}\n\n\t\treturn userInfo\n\t}\n\n\twpm.loadSnapchatPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.snapchat.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(e,t,n){if(e.snaptr)return;var a=e.snaptr=function()\n\t\t\t{a.handleRequest?a.handleRequest.apply(a,arguments):a.queue.push(arguments)};\n\t\t\t\ta.queue=[];var s='script';r=t.createElement(s);r.async=!0;\n\t\t\t\tr.src=n;var u=t.getElementsByTagName(s)[0];\n\t\t\t\tu.parentNode.insertBefore(r,u);})(window,document,\n\t\t\t\t'https://sc-static.net/scevent.min.js');\n\n\t\t\tsnaptr(\"init\", wpmDataLayer.pixels.snapchat.pixel_id, wpm.snapchatGetEmail())\n\n\t\t\tsnaptr(\"track\", \"PAGE_VIEW\")\n\t\t\t// @formatter:on\n\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getSnapchatOrderItemIds = () => {\n\t\tlet contentIds = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tcontentIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.snapchat.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tcontentIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.snapchat.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t})\n\n\t\treturn contentIds\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Snapchat Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * All event listeners\n * */\n\n/**\n * Source: https://help.taboola.com/hc/en-us/articles/360009027493-Tracking-Dynamic-Conversion-Values-\n **/\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.taboola?.account_id && !wpmDataLayer?.pixels?.taboola?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"taboola-ads\")) wpm.loadTaboolaPixel()\n\t}\n})\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify: \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.search,\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: search event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add-to-cart event\n// No product value transmitted, as Taboola only supports the \"revenue\" field.\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify : \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.add_to_cart,\n\t\t\tquantity: product.quantity,\n\t\t\tcurrency: product.currency,\n\t\t\trevenue : product.quantity * product.price,\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: add_to_cart event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add-to-wishlist event\n// No product value transmitted, as Taboola only supports the \"revenue\" field.\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify : \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.add_to_wishlist,\n\t\t\tquantity: product.quantity,\n\t\t\tcurrency: product.currency,\n\t\t\trevenue : product.quantity * product.price,\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: add_to_wishlist event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// start-checkout event\n// No product value transmitted, as Taboola only supports the \"revenue\" field.\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify: \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.start_checkout,\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: start_checkout event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view-content event\n// No product value transmitted, as Taboola only supports the \"revenue\" field.\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify: \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.view_content,\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.currency = product.currency\n\t\t\tdata.quantity = product.quantity\n\t\t\tdata.revenue = product.quantity * product.price\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: view_content event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.taboola?.loaded) return\n\n\t\tlet data = {\n\t\t\tid : wpmDataLayer.pixels.taboola.account_id,\n\t\t\tnotify : \"event\",\n\t\t\tname : wpmDataLayer.pixels.taboola.event_names.purchase,\n\t\t\trevenue : wpmDataLayer.order.value.marketing,\n\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\torderid : wpmDataLayer.order.id,\n\t\t}\n\n\t\tif (wpmDataLayer.order.items) {\n\t\t\tlet itemCount = 0\n\t\t\twpmDataLayer.order.items.forEach(item => {\n\t\t\t\titemCount += parseInt(item.quantity)\n\t\t\t})\n\n\t\t\tdata.quantity = itemCount\n\t\t}\n\n\t\t_tfa.push(data)\n\t\twpm.consoleLog(\"Taboola: purchase event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Taboola Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.loadTaboolaPixel = () => {\n\n\t\tconst taboolaId = wpmDataLayer.pixels.taboola.account_id\n\n\t\ttry {\n\n\t\t\t// @formatter:off\n\t\t\t\twindow._tfa = window._tfa || [];\n\t\t\t\twindow._tfa.push({notify: 'event', name: 'page_view', id: taboolaId});\n\t\t\t\t!function (t, f, a, x) {\n\t\t\t\tif (!document.getElementById(x)) {\n\t\t\t\tt.async = 1;t.src = a;t.id=x;f.parentNode.insertBefore(t, f);\n\t\t\t}\n\t\t\t}(document.createElement('script'),\n\t\t\t\tdocument.getElementsByTagName('script')[0],\n\t\t\t\t`//cdn.taboola.com/libtrc/unip/${taboolaId}/tfa.js`,\n\t\t\t\t'tb_tfa_script');\n\t\t\t// @formatter:on\n\n\t\t\twpmDataLayer.pixels.taboola.loaded = true\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Taboola Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","// https://ads.tiktok.com/help/article?aid=10028\n// Deduplication: https://ads.tiktok.com/marketing_api/docs?id=1723170195197953\n// TODO check all events and add more if there are any\n\n/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load TikTok Ads event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.tiktok?.pixel_id && !wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"tiktok-ads\")) wpm.loadTikTokPixel()\n\t}\n})\n\nfunction handleTikTokEvent(eventName, event, payload) {\n try {\n if (!wpmDataLayer?.pixels?.tiktok?.loaded) return;\n\n ttq.track(\n payload.tiktok.event,\n payload.tiktok.properties,\n {event_id: payload.tiktok.event_id},\n );\n\n wpm.consoleLog(`TikTok Pixel: ${payload.tiktok.event} event sent`, payload.tiktok);\n\n } catch (e) {\n console.error(e);\n }\n}\n\nconst tikTokEvents = [\n \"wpmClientSideAddToCart\",\n \"wpmClientSideBeginCheckout\",\n \"wpmClientSideViewItem\",\n \"wpmClientSideAddToWishlist\",\n \"wpmClientSideSearch\",\n \"wpmClientPlaceOrder\",\n \"wpmClientSideOrderReceivedPage\"\n];\n\ntikTokEvents.forEach(eventName => {\n jQuery(document).on(eventName, handleTikTokEvent.bind(null, eventName));\n});\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load TikTok Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.loadTikTokPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.tiktok.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function (w, d, t) {\n\t\t\t\tw.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=[\"page\",\"track\",\"identify\",\"instances\",\"debug\",\"on\",\"off\",\"once\",\"ready\",\"alias\",\"group\",\"enableCookie\",\"disableCookie\"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach((item) => {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.content_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type])\n\t\t\t\torderItem.content_name = wpmDataLayer.products[item.variation_id].name\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.content_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type])\n\t\t\t\torderItem.content_name = wpmDataLayer.products[item.id].name\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n\twpm.getTikTokUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {\n\t\t\t\tuser: {},\n\t\t\t\tpage: {},\n\n\t\t\t}\n\n\t\tif (wpm.getCookie(\"_ttp\") && wpm.isValidTtp(wpm.getCookie(\"_ttp\"))) {\n\t\t\tdata.user.ttp = wpm.getCookie(\"_ttp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_ttclid\") && wpm.isValidTtclid(wpm.getCookie(\"_ttclid\"))) {\n\t\t\tdata.ad = {\n\t\t\t\t\"callback\": wpm.getCookie(\"_ttclid\"),\n\t\t\t}\n\t\t}\n\n\t\tif (window.location.href) {\n\n\t\t\t// Remove the parameters from the URL and save it to data.page.url\n\t\t\tdata.page.url = window.location.href.split(\"?\")[0]\n\t\t}\n\n\t\tif (wpm.retrieveData(\"referrer\")) {\n\t\t\tdata.page.referrer = wpm.retrieveData(\"referrer\")\n\n\t\t\t// If http is missing, add it\n\t\t\tif (!data.page.referrer.startsWith(\"http\")) data.page.referrer = \"https://\" + data.page.referrer\n\t\t}\n\n\t\tif (wpmDataLayer?.pixels?.tiktok?.advanced_matching) {\n\t\t\tif (wpmDataLayer?.user?.id?.sha256) data.user.external_id = wpmDataLayer.user.id.sha256\n\t\t\tif (wpmDataLayer?.user?.email?.sha256) data.user.sha256_email = wpmDataLayer.user.email.sha256\n\t\t\tif (wpmDataLayer?.user?.phone?.sha256?.e164) data.user.sha256_phone_number = wpmDataLayer.user.phone.sha256.e164\n\t\t\tif (navigator.userAgent) data.user_agent = navigator.userAgent\n\t\t}\n\n\t\t// If data.user is empty, remove it\n\t\tif (Object.keys(data.user).length === 0) delete data.user\n\n\t\treturn data\n\t}\n\n\twpm.isValidTtp = ttp => {\n\n\t\tlet re = new RegExp(/^[\\da-zA-Z-]{20,50}$/)\n\n\t\treturn re.test(ttp)\n\t}\n\n\twpm.isValidTtclid = ttclid => {\n\n\t\tlet re = new RegExp(/^[\\da-zA-z-]{5,600}$/)\n\n\t\treturn re.test(ttclid)\n\t}\n\n\twpm.tiktokGetPropertiesFromCart = () => {\n\n\t\tlet properties = {\n\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\tvalue : 0,\n\t\t\tcontents: [],\n\t\t}\n\n\n\t\tObject.values(wpmDataLayer.cart).forEach((item) => {\n\n\t\t\tlet content = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tproperties.value += item.price * item.quantity\n\n\t\t\tif (\n\t\t\t\t!wpmDataLayer?.general?.variationsOutput\n\t\t\t\t&& item.isVariation\n\t\t\t\t&& 0 !== item.id\n\t\t\t) {\n\t\t\t\tcontent.content_id = String(item.parentId_dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type])\n\t\t\t\tcontent.content_name = item.name\n\t\t\t} else {\n\n\t\t\t\tcontent.content_id = String(item.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type])\n\t\t\t\tcontent.content_name = item.name\n\t\t\t}\n\n\t\t\tproperties.contents.push(content)\n\t\t})\n\n\t\treturn properties\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * TikTok Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","// TODO implement AddPaymentInfo event\n// TODO check if more values can be passed to product and cart pages\n\n// https://business.twitter.com/en/help/campaign-measurement-and-analytics/conversion-tracking-for-websites.html\n\n/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Twitter Ads event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.twitter?.pixel_id && !wpmDataLayer?.pixels?.twitter?.loaded) {\n\t\tif (wpm.canIFire(\"ads\", \"twitter-ads\")) wpm.loadTwitterPixel()\n\t}\n})\n\n// add-to-cart event\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.add_to_cart) {\n\n\t\t\tconst data = {\n\t\t\t\tvalue : product.quantity * product.price,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_type : \"product\",\n\t\t\t\t\tcontent_id : wpmDataLayer.products[product.id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_name : product.name,\n\t\t\t\t\tcontent_price: product.price,\n\t\t\t\t\tnum_items : product.quantity,\n\t\t\t\t\t// content_group_id: null,\n\t\t\t\t}],\n\t\t\t}\n\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.add_to_cart, data)\n\t\t\twpm.consoleLog(\"Twitter Pixel: add_to_cart event sent\", data)\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"AddToCart\")\n\t\t\twpm.consoleLog(\"Twitter Pixel: add_to_cart event sent\")\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view product event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\t\tlet productData = {}\n\n\t\tif (product) {\n\t\t\tproductData = {\n\t\t\t\tvalue : product.quantity * product.price,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_type : \"product\",\n\t\t\t\t\tcontent_id : wpmDataLayer.products[product.id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_name : product.name,\n\t\t\t\t\tcontent_price: product.price,\n\t\t\t\t\tnum_items : product.quantity,\n\t\t\t\t\t// content_group_id: null,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.view_content) {\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.view_content, productData)\n\t\t\twpm.consoleLog(\"Twitter Pixel: view_content event sent\", productData)\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"ViewContent\")\n\t\t\twpm.consoleLog(\"Twitter Pixel: view_content event sent\")\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// // view category event\n// jQuery(document).on('wpmCategory', function () {\n//\n// \tif (!wpmDataLayer?.pixels?.twitter?.loaded) return;\n//\n// \t// twq('track', 'AddToWishlist');\n// });\n\n// add-to-wishlist event\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\t\tlet productData = {}\n\n\t\tif (product) {\n\t\t\tproductData = {\n\t\t\t\tvalue : product.quantity * product.price,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_type : \"product\",\n\t\t\t\t\tcontent_id : wpmDataLayer.products[product.id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_name : product.name,\n\t\t\t\t\tcontent_price: product.price,\n\t\t\t\t\tnum_items : product.quantity,\n\t\t\t\t\t// content_group_id: null,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.add_to_wishlist) {\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.add_to_wishlist, productData)\n\t\t\twpm.consoleLog(\"Twitter Pixel: add_to_wishlist event sent\", productData)\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"AddToWishlist\")\n\t\t\twpm.consoleLog(\"Twitter Pixel: add_to_wishlist event sent\")\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// start checkout event\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.initiate_checkout) {\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.initiate_checkout, {})\n\t\t\twpm.consoleLog(\"Twitter Pixel: initiate_checkout event sent\", {})\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"InitiateCheckout\")\n\t\t\twpm.consoleLog(\"Twitter Pixel: initiate_checkout event sent\")\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// View search event\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.search) {\n\n\t\t\tconst data = {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t}\n\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.search, data)\n\t\t\twpm.consoleLog(\"Twitter Pixel: search event sent\", data)\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"Search\")\n\t\t\twpm.consoleLog(\"Twitter Pixel: search event sent\")\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO find out under which circumstances to use different values in content_type\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.twitter?.loaded) return\n\n\n\t\tif (wpmDataLayer?.pixels?.twitter?.event_ids?.purchase) {\n\t\t\tconst data = {\n\t\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tconversion_id: wpmDataLayer.order.id,\n\t\t\t\tcontents : wpm.twitterGetOrderContentIdsV2(),\n\t\t\t}\n\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.purchase, data)\n\t\t\twpm.consoleLog(\"Twitter Pixel: purchase event sent\", data)\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\tconst data = {\n\t\t\t\torder_id: wpmDataLayer.order.id,\n\t\t\t\t// content_type: 'product',\n\t\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tnum_items : wpmDataLayer.order.quantity,\n\t\t\t\tcontent_ids: wpm.twitterGetOrderContentIdsV1(),\n\t\t\t}\n\n\t\t\ttwq(\"track\", \"Purchase\", data)\n\t\t\twpm.consoleLog(\"Twitter Pixel: purchase event sent\", data)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Load Twitter Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.loadTwitterPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.twitter.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);\n\t\t\t},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',\n\t\t\t\ta=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');\n\n\t\t\ttwq('config',wpmDataLayer.pixels.twitter.pixel_id);\n\t\t\t// @formatter:on\n\n\t\t\t// twq(\"track\", \"PageView\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.twitterGetOrderContentIdsV1 = () => {\n\t\tlet contentIds = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tcontentIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tcontentIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t})\n\n\t\treturn contentIds\n\t}\n\n\twpm.twitterGetOrderContentIdsV2 = () => {\n\n\t\tlet orderItems = []\n\n\t\tObject.values(wpmDataLayer.order.items).forEach(item => {\n\n\t\t\tlet orderItem = {\n\t\t\t\tcontent_type : \"product\",\n\t\t\t\tcontent_name : item.name,\n\t\t\t\tcontent_price: item.price,\n\t\t\t\tnum_items : item.quantity,\n\t\t\t\t// content_group_id: null,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\torderItem.content_id = wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type]\n\t\t\t} else {\n\t\t\t\torderItem.content_id = wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.twitter.dynamic_remarketing.id_type]\n\t\t\t}\n\n\n\t\t\torderItems.push(orderItem)\n\t\t})\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Twitter Ads loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","(function (wpm, $, undefined) {\n\n\tconst PMW_LIBRARY_VERSION = \"1.39.0\"\n\n\twpm.getLibraryVersion = () => {\n\t\treturn PMW_LIBRARY_VERSION\n\t}\n\n\twpm.checkLibraryVersion = () => {\n\n\t\tif (wpm.getLibraryVersion() !== wpmDataLayer?.version?.number) {\n\t\t\tconsole.error(`Pixel Manager: ${wpm.getLibraryVersion()} and wpmDataLayer.version.number ${wpmDataLayer.version.number} do not match. Delete the server-side cache and try again.`)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n\n","/**\n * Copyright SweetCode. All rights reserved.\n *\n * Load VWO event listeners\n * */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (wpmDataLayer?.pixels?.vwo?.account_id && !wpmDataLayer?.pixels?.vwo?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"vwo\")) wpm.loadVwoPixel()\n\t}\n})\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.vwo?.loaded) return\n\n\t\tconst data = [\n\t\t\t'track.revenueConversion',\n\t\t\twpmDataLayer.order.value.total,\n\t\t]\n\t\twindow.VWO.push(data);\n\t\twpm.consoleLog(\"VWO Pixel: track.revenueConversion event sent\", data)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright SweetCode. All rights reserved.\n *\n * Load VWO functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.loadVwoPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.vwo.loaded = true\n\n\t\t\tconst vwo_settings = wpmDataLayer.pixels.vwo || {}\n\n\t\t\t// @formatter:off\n\t\t\twindow._vwo_code=window._vwo_code || (function() {\n\n\t\t\t\tconst account_id = vwo_settings.account_id\n\t\t\t\tconst settings_tolerance = vwo_settings.settings_tolerance || 2000\n\t\t\t\tconst library_tolerance = vwo_settings.library_tolerance || 2500\n\t\t\t\tconst use_existing_jquery = vwo_settings.use_existing_jquery || false\n\t\t\t\tconst version = vwo_settings.version || 1.5\n\t\t\t\tconst is_spa = vwo_settings.is_spa || 1\n\t\t\t\tconst hide_element = vwo_settings.hide_element || \"body\"\n\t\t\t\tconst hide_element_style = vwo_settings.hide_element_style || \"opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important\"\n\n\t\t\t\t/* DO NOT EDIT BELOW THIS LINE */\n\t\t\t\tf=false,d=document,vwoCodeEl=d.querySelector('#vwoCode'),code={use_existing_jquery:function(){return use_existing_jquery},library_tolerance:function(){return library_tolerance},hide_element_style:function(){return'{'+hide_element_style+'}'},finish:function(){if(!f){f=true;var e=d.getElementById('_vis_opt_path_hides');if(e)e.parentNode.removeChild(e)}},finished:function(){return f},load:function(e){var t=d.createElement('script');t.fetchPriority='high';t.src=e;t.type='text/javascript';t.onerror=function(){_vwo_code.finish()};d.getElementsByTagName('head')[0].appendChild(t)},getVersion:function(){return version},getMatchedCookies:function(e){var t=[];if(document.cookie){t=document.cookie.match(e)||[]}return t},getCombinationCookie:function(){var e=code.getMatchedCookies(/(?:^|;)\\s?(_vis_opt_exp_\\d+_combi=[^;$]*)/gi);e=e.map(function(e){try{var t=decodeURIComponent(e);if(!/_vis_opt_exp_\\d+_combi=(?:\\d+,?)+\\s*$/.test(t)){return''}return t}catch(e){return''}});var i=[];e.forEach(function(e){var t=e.match(/([\\d,]+)/g);t&&i.push(t.join('-'))});return i.join('|')},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;window.settings_timer=setTimeout(function(){_vwo_code.finish()},settings_tolerance);var e=d.createElement('style'),t=hide_element?hide_element+'{'+hide_element_style+'}':'',i=d.getElementsByTagName('head')[0];e.setAttribute('id','_vis_opt_path_hides');vwoCodeEl&&e.setAttribute('nonce',vwoCodeEl.nonce);e.setAttribute('type','text/css');if(e.styleSheet)e.styleSheet.cssText=t;else e.appendChild(d.createTextNode(t));i.appendChild(e);var n=this.getCombinationCookie();this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&f='+ +is_spa+'&vn='+version+(n?'&c='+n:''));return settings_timer}};window._vwo_settings_timer = code.init();return code;}());\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * VWO loader\n */\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n\trequire(\"./event_listeners_premium\")\n}\n// #endif\n\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tconst getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tconst getCookieYesCookies = () => {\n\n\t\t/**\n\t\t * Process the new cookieyes-consent cookie that contains all the information\n\t\t */\n\n\t\tlet cookie = wpm.getCookie(\"cookieyes-consent\")\n\n\t\tif (cookie) {\n\n\t\t\t// This cookie has the following structure:\n\t\t\t// consentid:OERmMEJCSVQxRk1SRWVwZkJTUjFBZTJHSEhkdjhLbUI,consent:yes,action:yes,necessary:yes,functional:yes,analytics:yes,performance:yes,advertisement:yes\n\t\t\t// First split the comma-separated values into an array\n\t\t\t// Then split each array item into a key value pair. The key and the value are separated by a colon.\n\t\t\t// Then create an object from the key value pairs.\n\t\t\t// Then console.log the object to see what it looks like.\n\n\t\t\tcookie = cookie\n\t\t\t\t.split(\",\")\n\t\t\t\t.map(item => item.split(\":\"))\n\t\t\t\t.reduce((acc, [key, value]) => ({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[key]: value,\n\t\t\t\t}), {})\n\n\t\t\t// console.log(\"new cookie\", cookie)\n\n\t\t\treturn {\n\t\t\t\tanalytics : cookie.analytics && cookie.analytics === \"yes\",\n\t\t\t\tads : cookie.advertisement && cookie.advertisement === \"yes\",\n\t\t\t\tvisitorHasChosen: cookie.advertisement && cookie.advertisement === \"yes\",\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Process the old cookieyes-* cookies\n\t\t *\n\t\t * @param cookieNames\n\t\t * @returns {string|string|boolean}\n\t\t */\n\n\t\tfunction checkCookie(cookieNames) {\n\t\t\tfor (let name of cookieNames) {\n\n\t\t\t\tconst cookieValue = wpm.getCookie(name)\n\n\t\t\t\tif (cookieValue) {\n\t\t\t\t\treturn cookieValue\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tlet analyticsCookieNames = [\n\t\t\t\"cookielawinfo-checkbox-analytics\",\n\t\t\t\"cookielawinfo-checkbox-analytiques\",\n\t\t\t\"cookieyes-analytics\",\n\t\t]\n\n\t\tconst adsCookieNames = [\n\t\t\t\"cookielawinfo-checkbox-advertisement\",\n\t\t\t\"cookielawinfo-checkbox-performance\",\n\t\t\t\"cookielawinfo-checkbox-publicite\",\n\t\t\t\"cookieyes-advertisement\",\n\t\t]\n\n\t\tconst visitorHasChosenCookieNames = [\n\t\t\t\"CookieLawInfoConsent\",\n\t\t\t\"cky-action\",\n\t\t]\n\n\t\t// let analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\t// let adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\t// let visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tconst analyticsCookie = checkCookie(analyticsCookieNames)\n\t\tconst adsCookie = checkCookie(adsCookieNames)\n\t\tconst visitorHasChosen = checkCookie(visitorHasChosenCookieNames)\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Get the Iubenda cookie.\n\t * Then parse it and return the analytics and marketing values.\n\t *\n\t * 1 = Necessary\n\t * 2 = Functionality\n\t * 3 = n/a\n\t * 4 = Measurement\n\t * 5 = Marketing\n\t */\n\tconst getIubendaCookieInfo = () => {\n\n\t\t// Regex that matches _iub_cs-59340121 but not _iub_cs-59340121-granular\n\n\t\tlet regex = new RegExp(\"_iub_cs-\\\\d{8,}\")\n\n\t\t// let cookie = wpm.getCookieThatContainsRegex(\"_iub_cs-\")\n\t\tlet cookie = wpm.getCookieThatContainsRegex(regex)\n\n\t\t// Parse the cookie into an object\n\t\t// The structure looks like this:\n\t\t// %7B%22timestamp%22%3A%222023-07-11T06%3A43%3A40.886Z%22%2C%22version%22%3A%221.48.0%22%2C%22purposes%22%3A%7B%221%22%3Atrue%2C%222%22%3Atrue%2C%224%22%3Atrue%2C%225%22%3Atrue%7D%2C%22id%22%3A63374232%7D\n\n\t\tif (cookie) {\n\n\t\t\tcookie = decodeURIComponent(cookie)\n\n\t\t\t// Now the structure looks like this:\n\t\t\t// _iub_cs-63374232={\"timestamp\":\"2023-07-11T06:43:40.886Z\",\"version\":\"1.48.0\",\"purposes\":{\"1\":true,\"2\":true,\"4\":true,\"5\":true},\"id\":63374232}\n\t\t\t// Remove the _iub_cs- prefix until and with the equal sign. The rest is the object we want to keep and parse.\n\t\t\tcookie = cookie.replace(/_iub_cs-.*=/, \"\")\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\treturn {\n\t\t\t\tanalytics : cookie.purposes[\"4\"],\n\t\t\t\tads : cookie.purposes[\"5\"],\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tconst getTermlyCookies = () => {\n\n\t\t// Get Termly cookies from localStorage from termly_gtm_template_default_consents for ad_storage and for analytics_storage\n\t\tlet termlyConsent = localStorage.getItem(\"termly_gtm_template_default_consents\")\n\n\t\tif (termlyConsent) {\n\t\t\ttermlyConsent = JSON.parse(termlyConsent)\n\n\t\t\treturn {\n\t\t\t\tanalytics : termlyConsent.analytics_storage === \"granted\",\n\t\t\t\tads : termlyConsent.ad_storage === \"granted\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be processed before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t * https://support.cookiebot.com/hc/en-us/articles/360016047000-Cookiebot-and-Google-Consent-Mode\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP Consent API\n\t\t * https://github.com/rlankhorst/wp-consent-level-api\n\t\t * https://wordpress.org/plugins/wp-consent-api/\n\t\t */\n\n\t\t// if a at least one cookie exists that starts with wp_consent_ then the visitor has chosen\n\t\tif (wpm.getCookieThatContainsRegex(/^wp_consent_/)) {\n\t\t\t// console.log(\"WP Consent API settings detected\")\n\n\t\t\t// if the cookie wp_consent_statistics exists and is set to allow, then analytics is true\n\t\t\t// If it is set to deny, then analytics is false\n\t\t\twpmConsentValues.categories.analytics = wpm.getCookie(\"wp_consent_statistics\") === \"allow\"\n\t\t\twpmConsentValues.categories.ads = wpm.getCookie(\"wp_consent_marketing\") === \"allow\"\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t// console log the consent values\n\t\t\t// console.log(\"WP Consent API settings detected: \", wpmConsentValues)\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\t// if cookie.categories is not an array, but a string, parse it\n\t\t\tif (typeof cookie.categories === \"string\") cookie.categories = JSON.parse(cookie.categories)\n\n\t\t\tif (\n\t\t\t\tcookie.action\n\t\t\t\t&& cookie.action === \"reject\"\n\t\t\t) {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (\n\t\t\t\tcookie.categories\n\t\t\t\t&& cookie.categories.length > 0\n\t\t\t) {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieYesCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Iubenda\n\t\t * https://www.iubenda.com\n\t\t */\n\n\t\tif (cookie = getIubendaCookieInfo()) {\n\n\t\t\tcookie = cookie\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t// console.log(\"Iubenda settings detected: \", wpmConsentValues)\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\twpm.consoleLog(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", (event) => {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groupsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Termly\n\t\t *\n\t\t * https://www.termly.io/\n\t\t */\n\n\t\tif (cookie = getTermlyCookies()) {\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Real Cookie Banner\n\t\t *\n\t\t * https://devowl.io/wordpress-real-cookie-banner/\n\t\t */\n\t\tif (wpm.doesACookieForTheRealCookieBannerExist()) {\n\n\t\t\t// console.log(\"Real Cookie Banner settings detected\")\n\n\t\t\twpmConsentValues.mode = \"pixel\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\twpm.waitForLibrary(\"consentApi\")\n\n\t\t\t// console.log(\"Real Cookie Banner consentApi loaded\")\n\n\t\t\tif (!window.consentApi) {\n\t\t\t\twpm.consoleError(\"window.consentApi is not available\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst settings = [\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"adroll-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"__adroll_fpc\", \"_ar_v4\", \"_adroll\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"bing-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_uetsid\", \"_uetvid\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"facebook-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_fbp\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"google-analytics\",\n\t\t\t\t\t\"type\" : \"statistics\",\n\t\t\t\t\t\"cookies\": [\"_ga\", \"_gid\", \"_gat\", \"_gat_gtag_UA_*\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"google-optimize\",\n\t\t\t\t\t\"type\" : \"statistics\",\n\t\t\t\t\t\"cookies\": [\"_ga\", \"_gid\", \"_gat\", \"_gat_gtag_UA_*\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"google-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_gcl_au\", \"_gcl_aw\", \"_gcl_dc\", \"_gac_*\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"hotjar\",\n\t\t\t\t\t\"type\" : \"statistics\",\n\t\t\t\t\t\"cookies\": [\"_hj*\", \"_hjid\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"linkedin-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_li_ss\", \"_li_id\", \"_li_mk_*\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"microsoft-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_uetsid\", \"_uetvid\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"outbrain-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"pinterest-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_pinterest_ct_ua\", \"_pinterest_ct_rt\", \"_pin_unauth\", \"_derived_epik\", \"_pinterest_sess\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"reddit-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_rdt_uuid\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"snapchat-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"sc_at\", \"sc_anonymous_id\", \"sc_id\", \"_scid\", \"_scid_r\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"taboola-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"tiktok-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"_ttp\", \"_ttclid\", \"ttwid\"],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"service\": \"twitter-ads\",\n\t\t\t\t\t\"type\" : \"marketing\",\n\t\t\t\t\t\"cookies\": [\"twitter_ads_id\", \"twid\", \"_twclid\", \"muc_ads\"],\n\t\t\t\t},\n\t\t\t]\n\n\n\t\t\t// For each service in settings\n\t\t\t// and each cookie in service.cookies\n\t\t\t// check if consentApi.consentSync(\"http\", cookie, \"*\") returns an object that contains a not empty object called \"cookie\"\n\t\t\t// If one of the cookies returns true, then push service.service to wpmConsentValues.pixels\n\t\t\tsettings.forEach((service) => {\n\n\t\t\t\tservice.cookies.forEach((cookie) => {\n\n\t\t\t\t\tlet consent = window.consentApi.consentSync(\"http\", cookie, \"*\")\n\n\t\t\t\t\tif (consent?.cookie && consent?.cookieOptIn) {\n\n\t\t\t\t\t\twpmConsentValues.pixels.push(service.service)\n\n\t\t\t\t\t\tif (service.type === \"statistics\") {\n\t\t\t\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (service.type === \"marketing\") {\n\t\t\t\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// continue with the next service\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\treturn\n\t\t}\n\t}\n\n\twpm.doesACookieForTheRealCookieBannerExist = () => {\n\n\t\t// Find a cookie that has a prefix of real_cookie_banner\n\t\t// If one is found, then return true\n\t\t// If none is found, then return false\n\n\t\tlet cookies = document.cookie.split(\";\")\n\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tlet cookie = cookies[i].trim()\n\n\t\t\tif (cookie.startsWith(\"real_cookie_banner\")) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = () => {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.general?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\twpm.consoleLog(\"The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\twpm.consoleLog(\"The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.general.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.is_active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\twpm.updatePixelConsentForPixelTypeCMPs = () => {\n\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If the visitor accepts cookies in Borlabs Cookie unblock the scripts.\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updatePixelConsentForPixelTypeCMPs()\n\t})\n\n\t/**\n\t * Real Cookie Banner\n\t * If the visitor accepts cookies in Real Cookie Banner unblock the scripts.\n\t */\n\n\tdocument.addEventListener(\"RCB/OptIn/All\", () => {\n\t\twpm.consoleLog(\"consent given or changed, check again with consentSync...\")\n\n\t\twpm.updatePixelConsentForPixelTypeCMPs()\n\t})\n\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\twindow.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * WP Consent API\n\t * https://github.com/rlankhorst/wp-consent-level-api\n\t * https://wordpress.org/plugins/wp-consent-api/\n\t */\n\n\tdocument.addEventListener(\"wp_listen_for_consent_change\", e => {\n\n\t\tconst changedConsentCategory = e.detail\n\n\t\tfor (const key in changedConsentCategory) {\n\n\t\t\t// console.log(\"consent given or changed, check again with consentSync...\", key, changedConsentCategory[key])\n\n\t\t\t// if the key is marketing\n\t\t\tif (key === \"marketing\") {\n\t\t\t\twpmConsentValues.categories.ads = changedConsentCategory[key] === \"allow\"\n\t\t\t}\n\n\t\t\t// if the key is statistics\n\t\t\tif (key === \"statistics\") {\n\t\t\t\twpmConsentValues.categories.analytics = changedConsentCategory[key] === \"allow\"\n\t\t\t}\n\n\t\t}\n\n\t\t// console log the consent values\n\t\t// console.log(\"WP Consent API settings detected: \", wpmConsentValues)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Iubenda CMP\n\t *\n\t * https://www.iubenda.com/en/help/1205-how-to-configure-your-cookie-solution-advanced-guide\n\t *\n\t * If visitor accepts cookies in Iubenda CMP unblock the scripts\n\t *\n\t * This might not work as of now (11.07.2023) the Iubenda CMP does not trigger any events.\n\t *\n\t * We might have to use a mutation observer to detect changes in the DOM.\n\t * This is also risky because we might read out the values faster than Iubenda can update them.\n\t */\n\n\t// Load after the document is fully loaded\n\t// Check if a button with one of the following classes was clicked\n\t// iubenda-cs-btn-primary\n\t// If it was clicked, recheck the cookies and unblock the scripts\n\t// jQuery(document).ready(() => {\n\t//\n\t// \tjQuery(document).on(\"click\", \".iubenda-cs-btn-primary\", () => {\n\t// \t\twpm.updateConsentCookieValues()\n\t// \t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t// \t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t// \t})\n\t//\n\t// \t// if the event save-button-clicked is triggered, recheck the cookies and unblock the scripts\n\t// \tjQuery(document).on(\"iubenda-cs-btn-primary\", () => {\n\t// \t\t// wpm.updateConsentCookieValues()\n\t// \t\t// wpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t// \t\t// wpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t// \t\tconsole.log(\"iubenda-cs-btn-primary clicked\")\n\t// \t})\n\t//\n\t// })\n\t//\n\t// wpm.iubObserver = new MutationObserver(mutations => {\n\t// \tmutations.forEach(({addedNodes}) => {\n\t// \t\t[...addedNodes]\n\t// \t\t\t.forEach(node => {\n\t//\n\t// \t\t\t\t// console.log(node)\n\t//\n\t// \t\t\t\tif (node.id === \"iubenda-cs-banner\") {\n\t//\n\t// \t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t// \t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t// \t\t\t\t\tdocument.querySelector(\".iubenda-cs-btn-primary\").addEventListener(\"click\", () => {\n\t// \t\t\t\t\t\t// wpm.updateConsentCookieValues()\n\t// \t\t\t\t\t\t// wpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t// \t\t\t\t\t\t// wpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t//\n\t// \t\t\t\t\t\tconsole.log(\"iubenda-cs-btn-primary clicked\")\n\t// \t\t\t\t\t})\n\t// \t\t\t\t}\n\t// \t\t\t})\n\t// \t})\n\t// })\n\t//\n\t// if (window._iub) {\n\t// \twpm.iubObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t// }\n\n\t// doesn't work if the PMW is lazy loaded\n\t// checkIubendaLoaded = setInterval(function() {\n\t// \tif (window?._iub && window?._iub?.csConfiguration) {\n\t// \t\twindow._iub.csConfiguration.callback = {\n\t// \t\t\tonPreferenceExpressed: function (preference) {\n\t// \t\t\t\tconsole.log('onPreferenceExpressed after load', preference);\n\t// \t\t\t}\n\t// \t\t};\n\t// \t\tclearInterval(checkIubendaLoaded);\n\t// \t}\n\t// }, 100);\n\n\t// if (window?._iub && window?._iub?.csConfiguration) {\n\t// \twindow._iub.csConfiguration.callback = {\n\t// \t\tonPreferenceExpressed: function (preference) {\n\t// \t\t\tconsole.log('onPreferenceExpressed after load X', preference);\n\t// \t\t}\n\t// \t};\n\t// }\n\t//\n\t// console.log('iubenda loaded');\n\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", e => {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\twpm.consoleLog(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\twpm.consoleLog(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", event => {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\twpm.consoleLog(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", () => {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", () => {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", () => {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\t/**\n\t * Termly Event Listeners\n\t *\n\t * The event listener is within /sources/termly_web/resource-blocker/src/constants/lifeCycle.js\n\t */\n\n\tdocument.addEventListener(\"termlyConsent\", function (e) {\n\n\t\tconst consent = e.detail\n\n\t\tif (consent.advertising && consent.analytics) {\n\t\t\tpmw.consentAcceptAll()\n\t\t} else if (!consent.advertising && !consent.analytics) {\n\t\t\tpmw.consentRevokeAll()\n\t\t} else {\n\t\t\tpmw.consentAdjustSelectively({\n\t\t\t\tanalytics: consent.analytics,\n\t\t\t\tads : consent.advertising,\n\t\t\t})\n\t\t}\n\t})\n\n\twpm.updateGoogleConsentMode = (analytics = true, ads = true) => {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.general.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage : analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t\tad_user_data : ads ? \"granted\" : \"denied\",\n\t\t\t\tad_personalization: ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// if settings.marketing is set\n\t\t// write its value to settings.ads\n\t\t// and delete settings.marketing\n\t\tif (settings.marketing !== undefined) {\n\t\t\tsettings.ads = settings.marketing\n\t\t\tdelete settings.marketing\n\t\t}\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\t// console.log(\"settings\", settings)\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\tpmw.triggerPmwCookieConsentManagementLoaded = () => {\n\t\t// Trigger an event once the PMW consent management has been loaded\n\t\tdocument.dispatchEvent(new Event(\"pmw_cookie_consent_management_loaded\"))\n\t\tdocument.dispatchEvent(new Event(\"pmwCookieConsentManagementLoaded\"))\n\t}\n\n\tpmw.triggerPmwCookieConsentManagementLoaded()\n\n\t// Get that state for the statistics or marketing cookies\n\tpmw.getConsentValues = () => {\n\t\treturn wpm.getConsentValues()\n\t}\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\t// console.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t// \".checkout\", // this is too generic. It triggers on the checkout page on some themes fore each interaction with the checkout form.\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n\t\".xt_woofc-checkout\", // https://wordpress.org/plugins/woo-floating-cart-lite/\n\t\".fkcart-checkout--text\", // https://funnelkit.com/\n]\n\nconst checkoutButtonSelectors = wpm.prepareSelectors(checkoutButtonClasses, \"beginCheckout\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonSelectors, () => {\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\twpm.initCart()\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// If the referrer is already stored, then return\n\tif (wpm.retrieveData(\"referrer\")) {\n\t\treturn\n\t}\n\n\tif (document.referrer) {\n\t\tlet referrerUrl = new URL(document.referrer)\n\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\tif (referrerHostname !== window.location.host) {\n\t\t\twpm.storeData(\"referrer\", referrerHostname)\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"pmwEvent:Search\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tif (wpmDataLayer?.order && !wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id, wpmDataLayer.order.key)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\tif (wpm.retrieveData(\"restEndpointAvailable\") === false) wpm.consoleError(\"REST endpoint is not available. Using admin-ajax.php instead.\")\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.general?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\n/**\n * Add to cart event\n */\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\twpm.consoleLog(\"wpmAddToCart event fired\", {event, product})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// Pinterest\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://developers.pinterest.com/docs/api/v5/#operation/events/create\n\t// https://developers.pinterest.com/docs/conversions/event/\n\tif (wpmDataLayer?.pixels?.pinterest?.loaded) {\n\n\t\tpayload.pinterest = wpm.getPinterestS2SBaseData()\n\n\t\tpayload.pinterest.event_name = \"addtocart\"\n\t\tpayload.pinterest.custom_data = wpm.pinterestGetProductDataForCapiEvent(product)\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * Begin checkout event\n */\njQuery(document).on(\"wpmBeginCheckout\", (event) => {\n\n\twpm.consoleLog(\"wpmBeginCheckout event fired\", {event})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: wpm.tiktokGetPropertiesFromCart(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * Add to wishlist event\n */\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\twpm.consoleLog(\"wpmAddToWishlist event fired\", {event, product})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * View Item event\n */\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\twpm.consoleLog(\"wpmViewItem event fired\", {event, product})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// Pinterest\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://developers.pinterest.com/docs/api/v5/#operation/events/create\n\t// https://developers.pinterest.com/docs/conversions/event/\n\tif (wpmDataLayer?.pixels?.pinterest?.loaded) {\n\n\t\tpayload.pinterest = wpm.getPinterestS2SBaseData()\n\n\t\tpayload.pinterest.event_name = \"pagevisit\"\n\n\t\tif (product) {\n\t\t\tpayload.pinterest.custom_data = wpm.pinterestGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * View category event\n */\njQuery(document).on(\"wpmCategory\", (event, product = null) => {\n\n\twpm.consoleLog(\"wpmCategory event fired\", {event, product})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"viewCategory\",\n\t}\n\n\t// Pinterest\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://developers.pinterest.com/docs/api/v5/#operation/events/create\n\t// https://developers.pinterest.com/docs/conversions/event/\n\tif (wpmDataLayer?.pixels?.pinterest?.loaded) {\n\n\t\tpayload.pinterest = wpm.getPinterestS2SBaseData()\n\n\t\tpayload.pinterest.event_name = \"viewcategory\"\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewCategory\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * Search event\n */\njQuery(document).on(\"pmwEvent:Search\", (event) => {\n\n\twpm.consoleLog(\"pmwEvent:Search event fired\", {event})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// Pinterest\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://developers.pinterest.com/docs/api/v5/#operation/events/create\n\t// https://developers.pinterest.com/docs/conversions/event/\n\tif (wpmDataLayer?.pixels?.pinterest?.loaded) {\n\n\t\tpayload.pinterest = wpm.getPinterestS2SBaseData()\n\n\t\tpayload.pinterest.event_name = \"search\"\n\t\tpayload.pinterest.custom_data = {\n\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * Place order event\n */\njQuery(document).on(\"wpmPlaceOrder\", (event) => {\n\n\twpm.consoleLog(\"wpmPlaceOrder event fired\", {event})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: wpm.tiktokGetPropertiesFromCart(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\twpm.sendEventPayloadToServer(payload)\n})\n\n/**\n * Order received event\n */\njQuery(document).on(\"wpmOrderReceivedPage\", (event) => {\n\n\twpm.consoleLog(\"wpmOrderReceivedPage event fired\", {event})\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// Pinterest\n\t// https://developers.pinterest.com/docs/conversions/best/\n\t// https://developers.pinterest.com/docs/api/v5/#operation/events/create\n\t// https://developers.pinterest.com/docs/conversions/event/\n\tif (wpmDataLayer?.pixels?.pinterest?.loaded) {\n\n\t\tpayload.pinterest = wpm.getPinterestS2SBaseData()\n\n\t\tpayload.pinterest.event_name = \"checkout\"\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/help/article/standard-events-parameters\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value.marketing,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\njQuery(document).on(\"pmw:ready\", async () => {\n\n\t/**\n\t * Run as soon as wpm namespace is loaded\n\t */\n\n\t// Watch for products visible in viewport\n\twpm.startIntersectionObserverToWatch()\n\n\t// Watch for lazy loaded products\n\twpm.startProductsMutationObserverToWatch()\n})\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n *\n * Never add document or body selectors.\n * The document selector doesn't work.\n * The body selector will cause the events to fire twice and other erratic behavior if used along with other selectors.\n */\nconst addToCartSelectorsArray = [\n\t// \"document\",\n\t// \"body\",\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n]\n\nconst addToCartSelectors = wpm.prepareSelectors(addToCartSelectorsArray, \"addToCart\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event, data) => {\n\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\t// console.log('add to cart data', data)\n\t// console.log('add to cart event', event)\n\t// console.log('add to cart jQuery(event.target.dataset)', jQuery(event.target.dataset))\n\t// console.log(\"add to cart event.target.dataset\", event.target.dataset)\n\t// console.log(\"add to cart event.target.dataset.quantity\", event.target.dataset.quantity)\n\t// console.log(\"add to cart event.target.dataset.product_id\", event.target.dataset.product_id)\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = event?.target?.dataset?.quantity ? event.target.dataset.quantity : null\n\t\tlet productId = event?.target?.dataset?.product_id ? event.target.dataset.product_id : null\n\n\t\t// let quantity = event.target.dataset.quantity ? event.target.dataset.quantity : 1\n\t\t// let productId = event.target.dataset.product_id ? event.target.dataset.product_id : null\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (\n\t\t\t\ttypeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\"\n\t\t\t\t&& jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")\n\t\t\t) {\n\n\t\t\t\tif (!productId) {\n\t\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\t\t}\n\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tif (quantity === null) {\n\t\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val()) ? Number(jQuery(\".input-text.qty\").val()) : 1\n\t\t\t\t}\n\n\t\t\t\tif (!productId) {\n\t\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\t\t\t\t}\n\n\t\t\t\t// Fallback if the body selector is used\n\t\t\t\tif (!productId) {\n\t\t\t\t\t// get the product ID from the element that has the class .product\n\t\t\t\t\t// that element will also have an ID that start with product- and ends with the product ID\n\t\t\t\t\t// example: product-123\n\t\t\t\t\t// save the product ID in the variable productId\n\t\t\t\t\tproductId = jQuery(\".product\").attr(\"id\").replace(\"product-\", \"\")\n\t\t\t\t}\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tif (quantity === null) {\n\t\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val()) ? Number(jQuery(\".input-text.qty\").val()) : 1\n\t\t\t\t}\n\n\t\t\t\tif (!productId) {\n\t\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\t\t\t\t}\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\t// Can't rely on event.target.dataset as it always is sent with the parent product ID and the quantity 1\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val()) ? Number(jQuery(element).find(\".input-text.qty\").val()) : 1\n\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tif (quantity === null) {\n\t\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val()) ? Number(jQuery(\".input-text.qty\").val()) : 1\n\t\t\t\t}\n\n\t\t\t\tif (!productId) {\n\t\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\t\t\t\t}\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// everything else\n\t\t\tif (quantity === null) {\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val()) ? Number(jQuery(\".input-text.qty\").val()) : 1\n\t\t\t}\n\n\t\t\twpm.addProductToCart(productId, quantity)\n\n\t\t} else {\n\n\t\t\tif (quantity === null) {\n\t\t\t\tquantity = 1\n\t\t\t}\n\n\t\t\tif (!productId) {\n\t\t\t\t// console.log(\"add to cart event.currentTarget\", event.currentTarget)\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\") ? jQuery(event.currentTarget).data(\"product_id\") : null\n\t\t\t}\n\n\t\t\t// Another fallback to retrieve the product ID in case the ID is saved in the value attribute\n\t\t\tif (!productId) {\n\t\t\t\tproductId = jQuery(event.currentTarget).val() ? jQuery(event.currentTarget).val() : null\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tproductId\n\t\t\t\t&& quantity\n\t\t\t) {\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\t// console.log(\"update_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tconst productId = wpm.getProductIdByCartItemElement(element)\n\n\t\t\tif (!productId) {\n\t\t\t\tconsole.error(\"Pixel Manager: Wasn't able to retrieve a productId\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst quantity = wpm.getProductQuantityByCartItemElement(element)\n\n\t\t\tif (!quantity) {\n\t\t\t\tconsole.error(\"Pixel Manager: Wasn't able to retrieve a quantity\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// console.log(\"productId\", productId)\n\t\t\t// console.log(\"quantity\", quantity)\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n *\n * Automatic Conversion Recovery (ACR)\n */\njQuery(document).on(\"wpmLoadAlways\", async () => {\n\n\ttry {\n\t\t// Return if on purchase confirmation page\n\t\tif (wpmDataLayer?.shop?.page_type === \"order_received_page\") return\n\n\t\twpm.consoleLog(\"ACR check running\")\n\n\t\t// Return if ACR cookie has not been set\n\t\tif (!wpm.getCookie(\"pmw_automatic_conversion_recovery\")) return\n\n\t\twpm.consoleLog(\"ACR cookie found\")\n\n\t\tif (wpm.retrieveData(\"acr_attempted\")) return\n\n\t\twpm.consoleLog(\"ACR check not run in this session\")\n\n\t\t// Get the order details from the server\n\t\tawait wpm.getAcrOrderDetails()\n\n\t\tif (!wpmDataLayer?.order) {\n\t\t\twpm.consoleLog(\"Pixel Manager: ACR order details not retrieved\")\n\t\t\twpm.storeData(\"acr_attempted\", true)\n\t\t\treturn\n\t\t}\n\n\t\twpm.consoleLog(\"ACR order details retrieved\")\n\t\twpm.consoleLog(\"wpmDataLayer.order\", wpmDataLayer.order)\n\n\t\t// Fire the conversion pixels\n\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\n\t\t// Save the order ID on the server to prevent duplicate conversions\n\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id, wpmDataLayer.order.key, \"acr_full_auto\")\n\n\t\t// Delete the ACR cookie\n\t\twpm.deleteCookie(\"pmw_automatic_conversion_recovery\")\n\n\t} catch (error) {\n\t\twpm.storeData(\"acr_attempted\", true)\n\t\twpm.consoleError(error)\n\t}\n})\n\n/**\n * Scroll Tracker\n */\n\n// We only can load it once the pmwDataLayer is available\njQuery(document).on(\"wpmLoad\", function () {\n\n\t// Only initialize if the scroll tracker is enabled\n\tif (!wpmDataLayer?.general?.scrollTrackingThresholds || !wpmDataLayer.general.scrollTrackingThresholds.length > 0) return\n\n\t(function (wpm, $, undefined) {\n\n\t\twpm.scrollVisibilityThreshold = wpmDataLayer.general.scrollTrackingThresholds\n\n\t\t// Create an object that contains each key from visibilityBreakPoints and sets each value to false\n\t\twpm.scrollVisibilityThresholdStatus = wpm.scrollVisibilityThreshold.reduce((obj, item) => {\n\t\t\tobj[item] = false\n\t\t\treturn obj\n\t\t}, {})\n\n\t}(window.wpm = window.wpm || {}, jQuery))\n\n\t/**\n\t * Horizontal Scroll Tracking\n\t */\n\tjQuery(window).on(\"scroll\", (event) => {\n\n\t\tconst scrollPosition = jQuery(window).scrollTop()\n\n\t\t// If the scroll reaches a visibility threshold for each threshold in visibilityThresholdStatus that is set to false, trigger an event\n\t\tfor (const [threshold, value] of Object.entries(wpm.scrollVisibilityThresholdStatus)) {\n\t\t\tif (value === false) {\n\t\t\t\tconst visibilityBreakPoint = (jQuery(document).height() - jQuery(window).height()) * (threshold / 100)\n\t\t\t\tif (scrollPosition >= visibilityBreakPoint) {\n\t\t\t\t\tjQuery(document).trigger(\"pmwScrollDepth\", {\n\t\t\t\t\t\tdirection : \"vertical\",\n\t\t\t\t\t\tthreshold : threshold,\n\t\t\t\t\t\tposition : scrollPosition,\n\t\t\t\t\t\tpositionUnit: \"pixels\",\n\t\t\t\t\t})\n\t\t\t\t\twpm.scrollVisibilityThresholdStatus[threshold] = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n})\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"restEndpointAvailable\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\twpm.isBelowRestErrorThreshold = () => wpm.retrieveData(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\t// If we already tested the endpoint and have a stored value, return it\n\t\tif (wpm.retrieveData(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn wpm.retrieveData(wpmRestSettings.cookiePmwRestEndpointAvailable)\n\t\t}\n\n\t\treturn await wpm.testEndpoint()\n\t}\n\n\t/**\n\t * Tests a given endpoint by sending a POST request. If the response status is 200, it stores `true` in the dataStorage with given cookie name; else it stores `false`.\n\t *\n\t * @param {string} url - The URL of the endpoint to test. Defaults to concatenation of `wpm.root` and `wpmRestSettings.restEndpointPost`.\n\t * @param {string} cookieName - The name of the cookie where the test result will be stored. Defaults to `wpmRestSettings.cookiePmwRestEndpointAvailable`.\n\t * @returns {Promise} - Returns a promise that resolves to `true` if the response status is 200, and `false` otherwise.\n\t * @async\n\t */\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twpm.storeData(cookieName, true)\n\t\t\treturn true\n\t\t}\n\n\t\tif (response.status === 404) {\n\t\t\twpm.storeData(cookieName, false)\n\t\t\treturn false\n\t\t}\n\n\t\tif (response.status === 0) {\n\t\t\twpm.storeData(cookieName, false)\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.retrieveData(cookieName)\n\n\t/**\n\t * This function writes the provided orderId into storage. It will first retrieve the existing orderIds\n\t * from the storage if any, then add the new orderId into this existing array of orderIds and stores\n\t * the updated array back to the storage.\n\t * If the function wpm.storeOrderIdOnServer exists and orderDeduplication is set to true in wpmDataLayer,\n\t * this function will also store the orderId, orderKey and source on the server side using wpm.storeOrderIdOnServer.\n\t *\n\t * @param {String} orderId - The ID of the order to be stored.\n\t * @param {String} orderKey - The Key of the order to be stored.\n\t * @param {String} source - The source from which the order originated (default: 'thankyou_page').\n\t */\n\twpm.writeOrderIdToStorage = (orderId, orderKey, source = \"thankyou_page\") => {\n\n\t\t// Get existing order ids\n\t\tlet orderIds = wpm.retrieveData(\"orderIds\", true) || []\n\n\t\t// Add the new order id\n\t\torderIds.push(orderId)\n\n\t\t// Store the order ids\n\t\twpm.storeData(\"orderIds\", orderIds, true)\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer({\n\t\t\t\torderId : orderId,\n\t\t\t\torderKey: orderKey,\n\t\t\t\tsource : source,\n\t\t\t})\n\t\t}\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\t// If order deduplication is disabled, return false\n\t\tif (!wpmDataLayer.orderDeduplication) {\n\t\t\twpm.consoleLog(\"order duplication prevention is off\")\n\t\t\treturn false\n\t\t}\n\n\t\tconst orderIds = wpm.retrieveData(\"orderIds\", true) || []\n\t\treturn orderIds.includes(orderId)\n\t}\n\n\t/**\n\t * Check if the email address is valid\n\t *\n\t * https://stackoverflow.com/questions/201323/how-can-i-validate-an-email-address-using-a-regular-expression\n\t * https://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n\t * https://fightingforalostcause.net/content/misc/2006/compare-email-regex.php\n\t *\n\t * @param email\n\t * @returns {boolean}\n\t */\n\twpm.isEmail = email => {\n\n\t\t/**\n\t\t * GitHub Copilot generated RFC 5322 compliant regex\n\t\t * - Don't allow emails without a top-level domain like \"john@localhost\"\n\t\t * - Don't allow emails with dots at the end of the name like \"john.doe.@example.com\"\n\t\t */\n\t\tconst regex = new RegExp(\n\t\t\t\"^(([^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\\\"]+)*)|(\\\".+\\\"))\"\n\t\t\t+ \"@\"\n\t\t\t+ \"((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\])\"\n\t\t\t+ \"|(([a-zA-Z\\\\-0-9]+\\\\.)+[a-zA-Z]{2,}))$\",\n\t\t)\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = async (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (!wpmDataLayer.cart[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\t\t\t\tdelete wpmDataLayer.cart[productId]\n\t\t\t} else {\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\t\t\t}\n\n\t\t\twpm.storeCartData(wpmDataLayer.cart)\n\n\t\t} catch (e) {\n\t\t\twpm.consoleError(e)\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) return productId\n\n\t\t\tif (wpmDataLayer.products[productId].isVariation) return wpmDataLayer.products[productId].parentId\n\n\t\t\treturn productId\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.prepareSelectors = (selectors, type) => {\n\n\t\tif (wpmDataLayer?.shop?.selectors?.[type]) {\n\n\t\t\t// merge the selectors from the addToCartSelectors array with the selectors from the wpmDataLayer.shop.selectors.addToCart array\n\t\t\tselectors = selectors.concat(wpmDataLayer.shop.selectors[type])\n\n\t\t\t// Remove duplicates\n\t\t\tselectors = [...new Set(selectors)]\n\n\t\t\t// If one of the selectors is document, remove it\n\t\t\tif (selectors.indexOf(\"document\") >= 0) {\n\t\t\t\tselectors.splice(selectors.indexOf(\"document\"), 1)\n\t\t\t}\n\n\t\t\t// If one of the selectors is body, remove all others\n\t\t\tif (selectors.indexOf(\"body\") >= 0) {\n\t\t\t\tselectors = [\"body\"]\n\t\t\t}\n\t\t}\n\n\t\treturn selectors.join(\", \")\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = async (productId, quantity) => {\n\n\t\t// Cast quantity to number to make sure it's a number\n\t\tquantity = Number(quantity)\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (!wpmDataLayer?.products[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t} else {\n\n\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t}\n\n\t\t\twpm.storeCartData(wpmDataLayer.cart)\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.initCart = () => {\n\n\t\t// If the WC cart doesn't exist, eg. after a confirmed purchase,\n\t\t// and we still have a cart object in the storage, reset it.\n\t\tif (\n\t\t\t!wpm.doesWooCommerceCartExist()\n\t\t\t&& Object.keys(wpm.retrieveCartData()).length !== 0\n\t\t) {\n\t\t\twpm.storeCartData({})\n\t\t\treturn\n\t\t}\n\n\t\t// If the cart object is in the storage, use it\n\t\tif (wpm.retrieveCartData()) {\n\t\t\twpm.saveCartObjectToDataLayer(wpm.retrieveCartData())\n\t\t\treturn\n\t\t}\n\n\t\t// If the cart object is missing in the storage, create an empty one and get the cart items from the backend\n\t\twpm.storeCartData({})\n\t\twpm.getCartItemsFromBackend()\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\t\t\t\t\t\twpm.storeCartData(data.data[\"cart\"])\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"
\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\n\tconst getCommonIdentifiersToWatch = () => {\n\n\t\tlet listOfClassNames = {\n\t\t\tnested: [],\n\t\t\tflat : [],\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst haveSameNestingDepth = (element1, element2) => {\n\n\t\t\t\t// If both are the same, return the parent\n\t\t\t\treturn jQuery(element1).parents().length === jQuery(element2).parents().length\n\t\t\t}\n\n\t\t\tconst findCommonParentElement = (element1, element2) => {\n\t\t\t\t// If both are the same, return the parent\n\t\t\t\tif (jQuery(element1).parent().is(jQuery(element2).parent())) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnode: jQuery(element1).parent(),\n\t\t\t\t\t\ttype: \"flat\",\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tnode: jQuery(element1).parents().has(jQuery(element2).parents()).first(),\n\t\t\t\t\ttype: \"nested\",\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst countOfChildren = (element) => {\n\t\t\t\t// Return the count of \"wpmProductId\" elements\n\t\t\t\treturn jQuery(element).find(\".wpmProductId\").length\n\t\t\t}\n\n\t\t\tconst getCommonClass = (classes1, classes2) => {\n\n\t\t\t\t// console.log(\"classes1\", classes1);\n\t\t\t\t// console.log(\"classes2\", classes2);\n\t\t\t\t// classes 1 and 2 are arrays of classes\n\t\t\t\t// They may contain the same classes, but not in the same order\n\t\t\t\t// Return the first common class that's present in both arrays\n\n\t\t\t\treturn classes1.filter(value => classes2.includes(value))[0] || null\n\t\t\t}\n\n\t\t\tconst wpmProductIds = document.querySelectorAll(\".wpmProductId\")\n\n\t\t\t// If zero or only one product template is found, then we can't run the algorithm\n\t\t\tif (wpmProductIds.length === 1) {\n\t\t\t\t// console.log(\"No product or too few templates found\")\n\t\t\t\treturn listOfClassNames\n\t\t\t}\n\n\t\t\t// console.log(\"wpmProductIds\", wpmProductIds);\n\t\t\t// console.log(\"looping\")\n\n\t\t\tfor (let i = 0; i < wpmProductIds.length - 1; i++) {\n\n\t\t\t\t// console.log(\"i\", i)\n\n\t\t\t\tif (!haveSameNestingDepth(wpmProductIds[i], wpmProductIds[i + 1])) {\n\t\t\t\t\t// console.log(\"The nesting depth is not the same\")\n\t\t\t\t\ti++\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlet productsNode = findCommonParentElement(wpmProductIds[i], wpmProductIds[i + 1])\n\t\t\t\t// console.log(\"productsNode.node\", productsNode.node)\n\t\t\t\t// console.log(\"productsNode.type\", productsNode.type)\n\n\t\t\t\t// If the productsNode is nested, get the first class of the first child. Then console log the class\n\t\t\t\tif (productsNode.type === \"nested\") {\n\n\t\t\t\t\tlet firstChildClasses = productsNode.node.children().first().attr(\"class\").split(\" \")\n\t\t\t\t\tlet secondChildClasses = productsNode.node.children().first().next().attr(\"class\").split(\" \")\n\n\t\t\t\t\tconst commonClass = getCommonClass(firstChildClasses, secondChildClasses)\n\n\t\t\t\t\tlistOfClassNames.nested.push(commonClass)\n\t\t\t\t} else if (productsNode.type === \"flat\") {\n\n\t\t\t\t\t// If class is not found, continue\n\t\t\t\t\tif (!productsNode.node.children().first().attr(\"class\")) continue\n\n\t\t\t\t\t// firstProductTemplateClasses is the classes of the first child element of the productsNode\n\t\t\t\t\tlet firstProductTemplateClasses = productsNode.node.children().first().attr(\"class\").split(\" \")[0]\n\n\t\t\t\t\tlistOfClassNames.flat.push(firstProductTemplateClasses)\n\t\t\t\t}\n\n\t\t\t\t// which wpmProductIds is the last one in the productsNode? console log the index of the last wpmProductId in the productsNode\n\t\t\t\t// console.log(\"productsNode.children().length\", countOfChildren(productsNode));\n\n\t\t\t\ti = i + countOfChildren(productsNode.node) - 1\n\t\t\t}\n\n\t\t\t// Make the list of class names unique\n\t\t\tlistOfClassNames.nested = [...new Set(listOfClassNames.nested)]\n\t\t\tlistOfClassNames.flat = [...new Set(listOfClassNames.flat)]\n\n\t\t\treturn listOfClassNames\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\treturn listOfClassNames\n\t\t}\n\t}\n\n\n\tlet detectedProductTemplateClasses = {\n\t\tnested: [],\n\t\tflat : [],\n\t}\n\n\tconst isNestedClass = (elem) => {\n\t\tlet nestedClassNames = [\n\t\t\t\"product\",\n\t\t\t\"type-product\",\n\t\t\t\"product-item-inner\",\n\t\t\t...detectedProductTemplateClasses.nested,\n\t\t]\n\n\t\treturn nestedClassNames.some(className => jQuery(elem).closest(\".\" + className).length)\n\t}\n\n\tconst isFlatClass = (elem) => {\n\n\t\tlet flatClassNames = [\n\t\t\t\"wc-block-grid__product\",\n\t\t\t\"product\",\n\t\t\t\"product-small\",\n\t\t\t\"woocommerce-LoopProduct-link\",\n\t\t\t...detectedProductTemplateClasses.flat,\n\t\t]\n\n\t\treturn flatClassNames.some(className => jQuery(elem).prev().hasClass(className))\n\t}\n\n\tconst getAllElementsToWatch = () => {\n\n\t\tdetectedProductTemplateClasses = getCommonIdentifiersToWatch()\n\n\t\treturn jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (isNestedClass(elem)) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (isFlatClass(elem)) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\t// https://stackoverflow.com/questions/62084306/intersectionobserver-not-working-in-safari-or-ios\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\troot: null,\n\t\t\t\t// root : document.body,\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch().each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tconst productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each((i, node) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t// jQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\t// jQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\t// jQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t\t// jQuery(this).hasClass(\"type-product\")\n\t\t\t\t\t\tisNestedClass(node) || isFlatClass(node)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(node)) {\n\t\t\t\t\t\t\tjQuery(node).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\t/**\n\t * Sets a new cookie or updates an existing one with the provided name and value.\n\t *\n\t * @function setCookie\n\t * @global\n\t * @param {string} cookieName - The name of the cookie.\n\t * @param {string} [cookieValue=\"\"] - The value to set for the cookie. Default value is an empty string.\n\t * @param {number} [expiryDays=null] - The number of days until the cookie expires. If not provided, the cookie will last until the end of the session.\n\t * @returns {void}\n\t *\n\t * @example\n\t * // This will create a cookie \"username\" with the value \"JohnDoe\" that expires in 7 days\n\t * wpm.setCookie(\"username\", \"JohnDoe\", 7);\n\t */\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the value of a specific cookie from the document's cookie string.\n\t *\n\t * @param {String} cookieName - The name of the cookie to retrieve.\n\t * @returns {String} - The value of the cookie if found, an empty string otherwise.\n\t *\n\t * @example\n\t * // returns 'value' if 'cookieName=value' exists in document.cookie\n\t * wpm.getCookie('cookieName')\n\t */\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\t/**\n\t * Find and get the cookie with a name that contains the string.\n\t * If one is found, then return the cookie.\n\t * If none is found, then return false.\n\t *\n\t * @param string\n\t * @returns {boolean|string}\n\t *\n\t * @since 1.32.5\n\t */\n\twpm.getCookieThatContainsRegex = (regex) => {\n\n\t\tlet cookies = document.cookie.split(\";\")\n\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tlet cookie = cookies[i].trim()\n\n\t\t\tif (regex.test(cookie)) {\n\t\t\t\treturn cookie\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\t/**\n\t * Store data in the browser\n\t *\n\t * Try to store the data in the local storage (session or persistent) if available.\n\t * If not available, store the data in the cookie.\n\t *\n\t * Max cookie expiry is 400 days as specified by Google Chrome: https://developer.chrome.com/blog/cookie-max-age-expires/\n\t *\n\t * @param key\n\t * @param value\n\t * @param persistent\n\t * @param extension\n\t */\n\twpm.storeData = (key, value, persistent = false, extension = false) => {\n\n\t\tconst suffix = extension ? key : \"\"\n\n\t\tlet dataGetter = persistent ? wpm.getPersistentData : wpm.getSessionData\n\t\tlet dataSetter = persistent ? wpm.setPersistentData : wpm.setSessionData\n\n\t\tlet data = dataGetter(suffix)\n\t\textension ? data = value : data[key] = value\n\n\t\tdataSetter(data, suffix)\n\t}\n\n\twpm.retrieveData = (key, persistent = false, extension = false) => {\n\n\t\tconst suffix = extension ? key : \"\"\n\n\t\tlet data = persistent ? wpm.getPersistentData(suffix) : wpm.getSessionData(suffix)\n\n\t\treturn extension ? data : data[key]\n\t}\n\n\twpm.storeCartData = data => {\n\t\twpm.storeData(\"cart\", data, false, true)\n\t}\n\n\twpm.retrieveCartData = () => {\n\t\treturn wpm.retrieveData(\"cart\", false, true)\n\t}\n\n\twpm.getSessionDataKey = (suffix = \"\") => {\n\t\tconst defaultStorageKey = \"_pmw_session_data\"\n\n\t\tif (suffix) {\n\t\t\treturn defaultStorageKey + \"_\" + suffix\n\t\t}\n\n\t\treturn defaultStorageKey\n\t}\n\n\twpm.getPersistentDataKey = (storageKeySuffix) => {\n\n\t\tconst defaultStorageKey = \"_pmw_persistent_data\"\n\n\t\tif (storageKeySuffix) {\n\t\t\treturn defaultStorageKey + \"_\" + storageKeySuffix\n\t\t}\n\n\t\treturn defaultStorageKey\n\t}\n\n\twpm.getSessionData = (suffix = \"\") => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(wpm.getSessionDataKey(suffix))\n\n\t\t\treturn data !== null ? JSON.parse(data) : {}\n\t\t} else {\n\t\t\t// fallback to cookie\n\t\t\tlet data = wpm.getCookie(wpm.getSessionDataKey(suffix))\n\n\t\t\treturn data !== \"\" ? JSON.parse(data) : {}\n\t\t}\n\t}\n\n\twpm.setSessionData = (data, storageKeySuffix = \"\") => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(wpm.getSessionDataKey(storageKeySuffix), JSON.stringify(data))\n\t\t} else {\n\t\t\t// fallback to cookie\n\t\t\twpm.setCookie(wpm.getSessionDataKey(storageKeySuffix), JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.getPersistentData = (storageKeySuffix) => {\n\n\t\tif (window.localStorage) {\n\n\t\t\tlet data = window.localStorage.getItem(wpm.getPersistentDataKey(storageKeySuffix))\n\n\t\t\treturn data !== null ? JSON.parse(data) : {}\n\t\t} else {\n\t\t\t// fallback to cookie\n\t\t\tlet data = wpm.getCookie(wpm.getPersistentDataKey(storageKeySuffix))\n\n\t\t\treturn data !== \"\" ? JSON.parse(data) : {}\n\n\t\t}\n\t}\n\n\twpm.setPersistentData = (data, storageKeySuffix = \"\") => {\n\n\t\tif (window.localStorage) {\n\t\t\twindow.localStorage.setItem(wpm.getPersistentDataKey(storageKeySuffix), JSON.stringify(data))\n\t\t} else {\n\t\t\t// fallback to cookie\n\t\t\twpm.setCookie(wpm.getPersistentDataKey(storageKeySuffix), JSON.stringify(data), 400)\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async (orderDetails) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t// \"X-WP-Nonce\" : wpm.nonce_wp_rest,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\torder_id : orderDetails.orderId,\n\t\t\t\t\t\torder_key: orderDetails.orderKey,\n\t\t\t\t\t\tsource : orderDetails.source,\n\t\t\t\t\t\t// nonce : wpm.pmw_nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\n\t\t\t\twpm.consoleLog(\"REST API not available, falling back to AJAX\")\n\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\torder_id : orderDetails.orderId,\n\t\t\t\t\t\torder_key: orderDetails.orderKey,\n\t\t\t\t\t\tsource : orderDetails.source,\n\t\t\t\t\t\t// nonce_ajax: wpm.nonce_ajax,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\twpm.consoleLog(\"\", responseJson.data)\n\t\t\t} else {\n\t\t\t\twpm.consoleError(\"\", responseJson.data)\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemElement = element => {\n\n\t\tconst href = jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\")\n\t\tif (href) return wpm.getProductIdByCartItemKeyUrl(new URL(href))\n\n\t\tconst productId = jQuery(element).find(\"[data-product_id]\").first().attr(\"data-product_id\")\n\t\treturn productId ? productId : null\n\t}\n\n\twpm.getProductQuantityByCartItemElement = element => {\n\n\t\treturn jQuery(element).find(\".qty\").val() || null\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.consoleLogVersion = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t *\n\t * This code is .thenable\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setSessionData(data)\n\t}\n\n\twpm.pageLoaded = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tObject.keys(window.sessionStorage).forEach(key => {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\twpm.getUrlParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.get(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.pmwConsoleMessage = () => {\n\t\tlet message = \"Pixel Manager for WooCommerce: \"\n\t\tmessage += wpmDataLayer.version.pro ? \"pro\" : \"free\"\n\t\tmessage += \" | distro: \" + wpmDataLayer.version.distro\n\t\tif (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro) {\n\t\t\tmessage += \" | active license: \" + (wpmDataLayer.version.eligibleForUpdates ? \"yes\" : \"no\")\n\t\t}\n\t\tmessage += \" | version: \" + wpmDataLayer.version.number\n\n\t\tconsole.log(message)\n\t}\n\n\twpm.canLoadPremiumFeatures = () => {\n\t\treturn (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro && wpmDataLayer.version.eligibleForUpdates) || wpmDataLayer.version.distro === \"wcm\"\n\t}\n\n\tlet jQueryReadyFired = false\n\n\twpm.triggerDomReadyEvent = () => {\n\t\tif (jQueryReadyFired === false) {\n\t\t\tdocument.dispatchEvent(new Event(\"pmw:ready\"))\n\t\t}\n\t\tjQueryReadyFired = true\n\t}\n\n\t/**\n\t * jQuery ready event\n\t */\n\tjQuery(() => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\twpm.getEmailFromTarget = target => {\n\n\t\t// Only try to add the clicked email if href is set\n\t\tif (target.href) {\n\n\t\t\t// Get the email from the link\n\t\t\t// But only if there is a valid email address in the link\n\t\t\t// Also, the href may contain other parameters, so we need to check for that and remove them\n\t\t\tlet email = target.href.replace(\"mailto:\", \"\")\n\n\n\t\t\tif (email.indexOf(\"?\") > -1) {\n\t\t\t\temail = email.split(\"?\")[0]\n\t\t\t}\n\n\t\t\t// Trim the email and remove all whitespaces\n\t\t\temail = email.replace(/\\s/g, \"\")\n\n\t\t\t// If the email is not empty and valid, add it to the data object\n\t\t\tif (email && wpm.isEmail(email)) {\n\t\t\t\treturn email\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.sendEventPayloadToServer = payload => {\n\t\tif (typeof wpm.sendEventPayloadToServerPremium === \"function\") {\n\t\t\twpm.sendEventPayloadToServerPremium(payload)\n\t\t}\n\t}\n\n\tconst urlLoggerOn = () => {\n\n\t\tif (wpm.urlHasParameter(\"pmwloggeron\")) {\n\t\t\twpm.storeData(\"loggerEnabled\", true)\n\t\t}\n\n\t\treturn wpm.urlHasParameter(\"pmwloggeron\")\n\t}\n\n\tconst urlLoggerOff = () => {\n\n\t\tif (wpm.urlHasParameter(\"pmwloggeroff\")) {\n\t\t\twpm.storeData(\"loggerEnabled\", false)\n\t\t}\n\n\t\treturn wpm.urlHasParameter(\"pmwloggeroff\")\n\t}\n\n\tconst sessionLoggerEnabled = () => {\n\t\treturn wpm.retrieveData(\"loggerEnabled\")\n\t}\n\n\tconst isLoggerEnabled = () => {\n\n\t\tif (urlLoggerOff()) return false\n\n\t\tif (sessionLoggerEnabled()) return true\n\n\t\tif (urlLoggerOn()) return true\n\n\t\treturn !!wpmDataLayer?.general?.logger?.is_active\n\t}\n\n\t// create a wpm.log function that takes in a message and one or more objects and passes it to console.log\n\twpm.consoleLog = (message, ...objects) => {\n\n\t\tif (!isLoggerEnabled()) return\n\n\t\tif (objects.length) {\n\t\t\tconsole.log(\"Pixel Manager: \" + message, ...objects)\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager: \" + message)\n\t\t}\n\t}\n\n\twpm.consoleError = (message, ...objects) => {\n\n\t\t// if (!isLoggerEnabled()) return\n\n\t\tif (objects.length) {\n\t\t\tconsole.error(\"Pixel Manager: \" + message, ...objects)\n\t\t} else {\n\t\t\tconsole.error(\"Pixel Manager: \" + message)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\nrequire(\"./ip_check\")\n\n// #if process.env.TIER === 'premium'\nif (wpm.canLoadPremiumFeatures()) {\n\trequire(\"./functions_premium\")\n}\n// #endif\n","(function (wpm, $, undefined) {\n\n\twpm.jQueryExists = async () => new Promise(resolve => {\n\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.waitForLibrary = (library, timeout = 5000, interval = 100) => {\n\n\t\tconst startTime = Date.now()\n\t\twhile (typeof window[library] === \"undefined\") {\n\t\t\t// Check if timeout in milliseconds has passed\n\t\t\tif (Date.now() - startTime > timeout) {\n\t\t\t\tbreak // Maximum wait time reached, exit the loop\n\t\t\t}\n\t\t\t// Wait for the interval in milliseconds before checking again\n\t\t\tsetTimeout(() => {\n\t\t\t}, interval)\n\t\t}\n\t}\n\n\twpm.wpmDataLayerFullyLoaded = async () => {\n\n\t\t// Promise that checks if the nested object wpmDataLayer.version is defined.\n\t\t// If so, resolve.\n\t\t// We must check for the nested object wpmDataLayer.version,\n\t\t// because the wpmDataLayer object can be defined early by adding products to the data layer through\n\t\t// template inline scripts. So we need to wait until the wpmDataLayer configuration objects\n\t\t// are defined.\n\t\tlet checkVar = new Promise((resolve) => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\n\t\t\t\t\ttypeof wpmDataLayer !== \"undefined\"\n\t\t\t\t\t&& typeof wpmDataLayer.version !== \"undefined\"\n\t\t\t\t) {\n\t\t\t\t\treturn resolve()\n\t\t\t\t}\n\t\t\t\tsetTimeout(waitForVar, 100)\n\t\t\t})()\n\t\t})\n\n\t\t// Set a timeout to log a message after 6 seconds\n\t\tlet logTimeoutId = setTimeout(() => {\n\t\t\tconsole.error(\"Pixel Manager error: The wpmDataLayer is not defined. Please make sure that the wpmDataLayer script snippet is inserted and not modified by any third-party plugin, such as a consent management platform or a JavaScript optimizer.\")\n\n\t\t}, 6000)\n\n\t\tcheckVar.then(() => {\n\t\t\tclearTimeout(logTimeoutId)\n\t\t})\n\n\t\treturn checkVar\n\t}\n\n\twpm.wpHooksExists = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\n\t\t\t// Resolve if wp.hooks is defined\n\t\t\tif (typeof wp !== \"undefined\" && typeof wp.hooks !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\t/**\n\t * Load all WooCommerce hooks functions\n\t *\n\t * Includes safeguard in case the user changed the default load order for wp-hooks, or removed it completely.\n\t *\n\t * @returns {Promise}\n\t */\n\twpm.loadWcHooksFunctions = async () => {\n\t\t// Load all WooCommerce Blocks hooks\n\t\tawait wpm.wpHooksExists()\n\t\trequire(\"./wc_hooks\")\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Copyright 2024 SweetCode. All rights reserved.\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.sendEventPayloadToServerPremium = async payload => {\n\n\t\tconst isServerToServerEnabled = () => {\n\n\t\t\tif (wpmDataLayer?.general?.server2server?.active) return true\n\n\t\t\treturn false\n\t\t}\n\n\t\tconst isServerToServerDisabled = () => {\n\t\t\treturn !isServerToServerEnabled()\n\t\t}\n\n\t\tconst sendPayloadUsingFetch = payload => {\n\n\t\t\t// Send data to pmw public API with fetch API\n\t\t\tfetch(wpm.root + \"pmw/v1/sse/\", {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcredentials: \"same-origin\",\n\t\t\t\theaders : {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t\tbody : JSON.stringify(payload),\n\t\t\t\tkeepalive : true,\t// keep connection alive until request is finished\n\t\t\t})\n\t\t\t\t.then(response => response.json())\n\t\t\t\t.then(message => {\n\t\t\t\t\tmessage.success ? wpm.consoleLog(message) : wpm.consoleError(message)\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\twpm.consoleError(error)\n\t\t\t\t})\n\t\t}\n\n\t\tconst sendPayloadUsingNavigatorSendBeacon = data => {\n\t\t\t// https://css-tricks.com/send-an-http-request-on-page-exit/\n\t\t\tconst success = navigator.sendBeacon(wpm.root + \"pmw/v1/sse/\", data)\n\n\t\t\tsuccess ? wpm.consoleLog(\"navigator.sendBeacon success\") : wpm.consoleError(\"navigator.sendBeacon failed\")\n\t\t}\n\n\t\tconst isWcSessionActive = () => {\n\t\t\t// return true if a WooCommerce session cookie is set\n\t\t\t// The cookie has the name \"woocommerce_session_{hash}\"\n\t\t\t// The has can vary, so we need to check only for the first part of the cookie name\n\n\t\t\tconst cookies = document.cookie.split(\";\")\n\n\t\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\t\tconst cookie = cookies[i].trim()\n\n\t\t\t\tif (cookie.indexOf(\"woocommerce_cart_hash\") === 0) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\n\t\tconst storeIpv6InServerSession = async (ipv6) => {\n\n\t\t\twpm.consoleLog(`Storing IPv6 address in server session (${ipv6})`)\n\n\t\t\tjQuery.ajax({\n\t\t\t\ttype : \"post\",\n\t\t\t\tdataType: \"json\",\n\t\t\t\turl : wpm.ajax_url,\n\t\t\t\tdata : {\n\t\t\t\t\taction: \"pmw_store_ipv6_in_server_session\",\n\t\t\t\t\tdata : {ipv6},\n\t\t\t\t},\n\t\t\t\tsuccess : message => {\n\t\t\t\t\twpm.consoleLog(message)\n\t\t\t\t\twpm.storeData(\"store_ipv6_in_server_session\", true)\n\t\t\t\t},\n\t\t\t\terror : message => {\n\t\t\t\t\twpm.consoleError(message)\n\t\t\t\t\twpm.storeData(\"store_ipv6_in_server_session\", false)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\t// If server to server is disabled, do not send payload\n\t\t\tif (isServerToServerDisabled()) return\n\n\t\t\t// If IP is not allowed, do not send data\n\t\t\tif (await wpm.isIpNotAllowed()) return\n\n\t\t\t// If Facebook CAPI is enabled, additionally try to fetch and store the IPv6 address, if available\n\t\t\tif (wpmDataLayer?.pixels?.facebook?.capi) {\n\t\t\t\tawait wpm.getIp(\"6\")\n\n\n\t\t\t\t// If a WooCommerce session is active\n\t\t\t\t// and if we have not already sent the IPv6 address to the server\n\t\t\t\tif (\n\t\t\t\t\tisWcSessionActive()\n\t\t\t\t\t&& !wpm.retrieveData(\"store_ipv6_in_server_session\")\n\t\t\t\t) {\n\t\t\t\t\tif (wpm.retrieveData(\"ipv6\")) {\n\t\t\t\t\t\tawait storeIpv6InServerSession(wpm.retrieveData(\"ipv6\"))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twpm.consoleLog(\"Sending event to server\", payload)\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) { // Send data using REST API\n\n\t\t\t\t// console.log(\"Pixel Manager: Sending data using REST API\")\n\n\t\t\t\tconst blob = new Blob([JSON.stringify(payload)], {type: \"application/json; charset=UTF-8\"})\n\n\t\t\t\t// navigator.sendBeacon has a limit of 64kb. Fall back to fetch if the blob is too large.\n\t\t\t\tif (blob.size < 60000) {\n\t\t\t\t\tsendPayloadUsingNavigatorSendBeacon(blob)\n\t\t\t\t} else {\n\t\t\t\t\tsendPayloadUsingFetch(payload)\n\t\t\t\t}\n\t\t\t} else { // Send data using wp-ajax\n\n\t\t\t\tjQuery.ajax(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype : \"post\",\n\t\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\t\turl : wpm.ajax_url,\n\t\t\t\t\t\tdata : {\n\t\t\t\t\t\t\taction: \"pmw_server_to_server_event\",\n\t\t\t\t\t\t\tdata : payload,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess : message => {\n\t\t\t\t\t\t\twpm.consoleLog(message)\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror : message => {\n\t\t\t\t\t\t\twpm.consoleError(message)\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.acrRemoveCookie = () => {\n\n\t\t// Delete the pmw_checkout_order_created cookie\n\t\t// This cookie is used to verify that the purchase confirmation page has been reached\n\n\t\twpm.deleteCookie(\"pmw_automatic_conversion_recovery\")\n\t}\n\n\twpm.getAcrOrderDetails = async () => {\n\n\t\t// Get the order details from the pmw_automatic_conversion_recovery cookie\n\t\tconst acrOrderDetails = JSON.parse(wpm.getCookie(\"pmw_automatic_conversion_recovery\"))\n\n\t\tlet response\n\n\t\t// Get order details from the server using the REST API if the REST API is available\n\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/acr/order/\", {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcredentials: \"same-origin\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\theaders : {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\torder_id : acrOrderDetails.order_id,\n\t\t\t\t\torder_key: acrOrderDetails.order_key,\n\t\t\t\t}),\n\t\t\t})\n\n\t\t} else {\n\t\t\t// Get order details from the server using the wp-ajax API if the REST API is not available using jQuery\n\t\t\tresponse = await jQuery.ajax({\n\t\t\t\ttype : \"POST\",\n\t\t\t\tdataType: \"json\",\n\t\t\t\turl : wpm.ajax_url,\n\t\t\t\tdata : {\n\t\t\t\t\taction: \"get_acr_order_data_ajax\",\n\t\t\t\t\tdata : {\n\t\t\t\t\t\torder_id : acrOrderDetails.order_id,\n\t\t\t\t\t\torder_key: acrOrderDetails.order_key,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\n\t\t}\n\n\t\tconst responseJson = await response.json()\n\n\t\tif (responseJson.success) {\n\t\t\twpm.consoleLog(\"ACR order details retrieved successfully\")\n\t\t} else {\n\t\t\twpm.consoleLog(\"ACR order details could not be retrieved\", responseJson)\n\t\t}\n\n\t\twpmDataLayer.products = {...wpmDataLayer.products, ...responseJson.data.products}\n\t\twpmDataLayer.order = responseJson.data.order\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * IP functions\n */\n\n(function (wpm, $, undefined) {\n\n\tconst {isRange, isIP, isV4, isV6, version: getIpVersion} = require(\"range_check\")\n\n\tconst ipServices = {\n\t\t\"cloudflare\": {\n\t\t\t\"any\": \"https://www.cloudflare.com/cdn-cgi/trace\",\n\t\t},\n\t\t// icanhazip seems to regularly be added to malware databases, despite being a legitimate service run by Cloudflare\n\t\t// https://blog.apnic.net/2021/06/17/how-a-small-free-ip-tool-survived/\n\t\t// https://major.io/p/a-new-future-for-icanhazip/\n\t\t// https://major.io/p/extra-icanhaz-services-going-offline/\n\t\t\"icanhazip\" : {\n\t\t\t\"4\" : \"https://ipv4.icanhazip.com\",\n\t\t\t\"6\" : \"https://ipv6.icanhazip.com\",\n\t\t\t\"any\": \"https://icanhazip.com\",\n\t\t},\n\t\t\"ipinfo\" : {\n\t\t\t\"any\": \"https://ipinfo.io/ip\",\n\t\t},\n\t\t\"myexternalip\": {\n\t\t\t\"any\": \"https://myexternalip.com/raw\",\n\t\t\t// \"6\": \"https://api-ipv6.myexternalip.com/raw\", // This can return an IPv4 address, so we can't use it\n\t\t},\n\t\t\"ipify\" : {\n\t\t\t\"4\" : \"https://api4.ipify.org\",\n\t\t\t\"6\" : \"https://api6.ipify.org\",\n\t\t\t\"any\": \"https://api64.ipify.org\", // If IPv6 is available, AND the client is configured to prefer IPv6, this will return an IPv6 address\n\t\t},\n\t\t// Can't use amazon because its CORS policy blocks requests from the browser\n\t\t// \"amazon\" : {\n\t\t// \t\"any\": \"https://checkip.amazonaws.com/\",\n\t\t// },\n\t\t// Can't use ip.sb because its CORS policy blocks requests from the browser\n\t\t// \"ip.sb\" : {\n\t\t// \t\"any\": \"https://api.ip.sb/ip\",\n\t\t// },\n\t\t// Can't use seeip because its CORS policy blocks requests from the browser\n\t\t// \"seeip\" : {\n\t\t// \t\"any\": \"https://api.seeip.org\",\n\t\t// \t\"4\": \"https://ipv4.seeip.org\",\n\t\t// \t\"6\": \"https://ipv6.seeip.org\",\n\t\t// },\n\t}\n\n\twpm.isIpAllowed = async () => {\n\n\t\t// Check the cache if the IP is allowed\n\t\tif (wpm.retrieveData(\"ipAllowed\")) {\n\t\t\treturn !!JSON.parse(wpm.retrieveData(\"ipAllowed\"))\n\t\t}\n\n\t\tconst ip = await wpm.getIp()\n\n\t\t// If the IP is blacklisted, return false and store the result in the cache\n\t\tif (isOnBlacklist(ip)) {\n\t\t\twpm.storeData(\"ipAllowed\", false)\n\t\t\treturn false\n\t\t}\n\n\t\t// If the IP is not blacklisted, return true and store the result in the cache\n\t\twpm.storeData(\"ipAllowed\", true)\n\t\treturn true\n\t}\n\n\twpm.getIp = async (ipVersion = \"any\", maxServicesToCheck = 3) => {\n\n\t\tconst validVersions = [\"any\", \"4\", \"6\"]\n\n\t\t// return null if the version is not valid and console log an error\n\t\tif (!validVersions.includes(ipVersion)) {\n\t\t\tconsole.error(\"The version argument must be one of the following: \" + validVersions.join(\", \"))\n\t\t\treturn null\n\t\t}\n\n\t\tif (ipVersion === \"any\" && wpm.retrieveData(\"ip\")) {\n\t\t\treturn wpm.retrieveData(\"ip\")\n\t\t}\n\n\t\t// Get the ipv data from the cache\n\t\tconst ipv = wpm.retrieveData(`ipv${ipVersion}`)\n\n\t\t// Return it if it is not undefined\n\t\t// The value can be an IP\n\t\t// or null if we ran the test but no IP could be retrieved\n\t\t// It is undefined if the ipVersion was not tested yet\n\t\tif (ipv !== undefined) return ipv\n\n\t\twpm.consoleLog(\"Testing the IP address of the browser because one ore more server-to-server APIs are enabled and require the browser IP. It may trigger connection request errors in the console while testing the IP address. This is normal and expected behavior.\")\n\n\t\ttry {// Check the cache if the IP is already stored\n\n\t\t\tconst ip = await wpm.getIpFromAnyService(ipVersion, maxServicesToCheck)\n\n\t\t\t// if (!isIP(ip)) throw new Error(\"The returned value is not an IP address\")\n\n\t\t\t// Store the IP in the cache\n\t\t\tif (ipVersion === \"any\") {\n\t\t\t\twpm.storeData(\"ip\", ip)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tgetIpVersion(ip) === 4\n\t\t\t\t|| (ipVersion === \"4\" && ip === null)\n\t\t\t) {\n\t\t\t\twpm.storeData(\"ipv4\", ip)\n\t\t\t}\n\n\t\t\tif (getIpVersion(ip) === 6\n\t\t\t\t|| (ipVersion === \"6\" && ip === null)\n\t\t\t) {\n\t\t\t\twpm.storeData(\"ipv6\", ip)\n\t\t\t}\n\n\t\t\treturn ip\n\t\t} catch (error) {\n\t\t\t// console.error(error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\t/**\n\t * Get the IP from the visitor using different services.\n\t * Return the first valid IP address that can be retrieved the fastest.\n\t *\n\t * @returns {Promise}\n\t */\n\twpm.getIpFromAnyService = async (ipVersion = \"any\", maxServicesToCheck = 3) => {\n\n\t\t// start tracking time\n\t\tconst startTime = performance.now()\n\n\t\t// take the ipServices object and filter it to only contain objects with an ipVersion key that matches the ipVersion argument\n\t\t// keep the original order of the ipServices object\n\t\t// also keep only the first maxServicesToCheck objects\n\n\t\tconst ipServicesFiltered = Object.keys(ipServices)\n\t\t\t.filter(service => ipServices[service][ipVersion])\n\t\t\t.slice(0, maxServicesToCheck)\n\t\t\t.reduce((obj, key) => {\n\t\t\t\t\tobj[key] = ipServices[key]\n\t\t\t\t\treturn obj\n\t\t\t\t}\n\t\t\t\t, {})\n\n\t\tlet promises = []\n\n\t\tObject.keys(ipServicesFiltered).forEach(service => {\n\t\t\t// only push if the ipVersion is available for the service\n\t\t\tif (ipServicesFiltered[service][ipVersion]) {\n\t\t\t\t// console.log(`pushing ${service} to promises array with ipVersion ${ipVersion}`)\n\t\t\t\tpromises.push(wpm.getIpFromService(service, ipVersion))\n\t\t\t}\n\t\t})\n\n\t\t// If the promises array is not empty, return the first promise that resolves the fastest\n\t\t// Ignore the promises that reject\n\t\tif (promises.length > 0) {\n\n\t\t\ttry {\n\t\t\t\tconst data = await Promise.any(promises)\n\t\t\t\t// console.log(`The Pixel Manager retrieved the IP address ${data.ip} from ${data.service} using IP version ${data.ipVersion}`)\n\n\t\t\t\t// stop tracking time\n\t\t\t\tconst endTime = performance.now()\n\t\t\t\tconst timeTaken = (endTime - startTime).toFixed(2)\n\n\t\t\t\twpm.consoleLog(`Retrieved the IP address ${data.ip} from ${data.service} which took ${timeTaken} ms`)\n\t\t\t\treturn data.ip\n\t\t\t} catch (error) {\n\t\t\t\t// console.error(error)\n\t\t\t\twpm.consoleLog(`Could not retrieve an IP with version ${ipVersion} from any of the services.`)\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t} else {\n\t\t\twpm.consoleLog(\"No promises to resolve\")\n\t\t\treturn null\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the IP address from a specified service.\n\t *\n\t * @async\n\t * @param {string} service - The name of the service to fetch the IP from.\n\t * @param {string} [ipVersion=\"any\"] - The version of the IP (e.g., \"any\" for global).\n\t * @returns {Promise} A promise that resolves to an object containing the IP address, service name, and IP version.\n\t * @throws {Error} Will reject the promise with an error if the IP version is not available for the service, the response from the service is not OK, the returned value from the service is not an IP address, or any other error occurs.\n\t */\n\twpm.getIpFromService = async (service, ipVersion = \"any\") => {\n\t\ttry {\n\n\t\t\tlet data = {\n\t\t\t\tip : null,\n\t\t\t\tservice : service,\n\t\t\t\tipVersion: ipVersion,\n\t\t\t}\n\n\t\t\t// Return reject if the ipVersion is not available for the service\n\t\t\tif (!ipServices[service][ipVersion]) return Promise.reject(new Error(`The IP version ${ipVersion} is not available for the service ${service}`))\n\n\t\t\twpm.consoleLog(`Fetching IP from ${service} using IP version ${ipVersion}`)\n\n\t\t\tconst response = await fetch(ipServices[service][ipVersion])\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn Promise.reject(new Error(`The response from ${service} was not OK. Status: ${response.status}`))\n\t\t\t}\n\n\t\t\tlet serviceResponseData = await response.text()\n\n\t\t\tif (service === \"cloudflare\") {\n\t\t\t\t// Convert key-value pairs to JSON\n\t\t\t\tserviceResponseData = serviceResponseData\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.reduce((obj, pair) => {\n\t\t\t\t\t\tpair = pair.split(\"=\")\n\t\t\t\t\t\treturn (obj[pair[0]] = pair[1]), obj\n\t\t\t\t\t}, {})\n\n\t\t\t\tdata.ip = serviceResponseData.ip\n\t\t\t} else {\n\t\t\t\tdata.ip = serviceResponseData.trim()\n\t\t\t}\n\n\t\t\tif (!isIP(data.ip)) {\n\t\t\t\treturn Promise.reject(new Error(`The returned value from ${service} is not an IP address`))\n\t\t\t}\n\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error)\n\t\t}\n\t}\n\n\t/**\n\t * Cloudflare\n\t *\n\t * Response time: approx. 70ms\n\t * IPv: Returns IPv4 or IPv6 depending on the client\n\t * Dual stack: Doesn't offer dual stack detection\n\t *\n\t * @returns {Promise<*>}\n\t */\n\tconst getIpFromCloudflare = async () => {\n\n\t\tconst response = await fetch(\"https://www.cloudflare.com/cdn-cgi/trace\")\n\t\tlet data = await response.text()\n\n\t\t// Convert key-value pairs to JSON\n\t\t// https://stackoverflow.com/a/39284735/452587\n\t\tdata = data\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.reduce((obj, pair) => {\n\t\t\t\tpair = pair.split(\"=\")\n\t\t\t\treturn obj[pair[0]] = pair[1], obj\n\t\t\t}, {})\n\n\t\t// return the data.ip not a promise\n\t\treturn data.ip\n\t}\n\n\twpm.isIpNotAllowed = async () => {\n\t\treturn await wpm.isIpAllowed() === false\n\t}\n\n\tconst isOnBlacklist = ip => {\n\n\t\tconst {isInSubnet} = require(\"is-in-subnet\")\n\n\t\tfor (const ipName of getBlacklist()) {\n\n\t\t\tif (isCidr(ipName)) {\n\t\t\t\ttry {\n\t\t\t\t\tif (isInSubnet(ip, ipName)) return true\n\t\t\t\t} catch (e) {\n\t\t\t\t\twpm.consoleError(e)\n\t\t\t\t\twpm.consoleLog(\"IP: \" + ip)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (ip === ipName) return true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tconst isCidr = ipName => {\n\t\treturn isRange(ipName)\n\t}\n\n\tconst getBlacklist = () => {\n\n\t\tconst blacklist = [\n\t\t\t// \"91.190.12.52/32\", // for testing\n\t\t\t// \"91.190.12.52\", // for testing\n\t\t]\n\n\t\tconst google = [\n\t\t\t\"2001:4860:4801:10::/64\",\n\t\t\t\"2001:4860:4801:11::/64\",\n\t\t\t\"2001:4860:4801:12::/64\",\n\t\t\t\"2001:4860:4801:13::/64\",\n\t\t\t\"2001:4860:4801:14::/64\",\n\t\t\t\"2001:4860:4801:15::/64\",\n\t\t\t\"2001:4860:4801:16::/64\",\n\t\t\t\"2001:4860:4801:17::/64\",\n\t\t\t\"2001:4860:4801:18::/64\",\n\t\t\t\"2001:4860:4801:19::/64\",\n\t\t\t\"2001:4860:4801:1a::/64\",\n\t\t\t\"2001:4860:4801:1b::/64\",\n\t\t\t\"2001:4860:4801:20::/64\",\n\t\t\t\"2001:4860:4801:21::/64\",\n\t\t\t\"2001:4860:4801:22::/64\",\n\t\t\t\"2001:4860:4801:23::/64\",\n\t\t\t\"2001:4860:4801:24::/64\",\n\t\t\t\"2001:4860:4801:25::/64\",\n\t\t\t\"2001:4860:4801:26::/64\",\n\t\t\t\"2001:4860:4801:27::/64\",\n\t\t\t\"2001:4860:4801:28::/64\",\n\t\t\t\"2001:4860:4801:29::/64\",\n\t\t\t\"2001:4860:4801:2::/64\",\n\t\t\t\"2001:4860:4801:2a::/64\",\n\t\t\t\"2001:4860:4801:2b::/64\",\n\t\t\t\"2001:4860:4801:2c::/64\",\n\t\t\t\"2001:4860:4801:2d::/64\",\n\t\t\t\"2001:4860:4801:2e::/64\",\n\t\t\t\"2001:4860:4801:2f::/64\",\n\t\t\t\"2001:4860:4801:30::/64\",\n\t\t\t\"2001:4860:4801:31::/64\",\n\t\t\t\"2001:4860:4801:32::/64\",\n\t\t\t\"2001:4860:4801:33::/64\",\n\t\t\t\"2001:4860:4801:34::/64\",\n\t\t\t\"2001:4860:4801:35::/64\",\n\t\t\t\"2001:4860:4801:36::/64\",\n\t\t\t\"2001:4860:4801:37::/64\",\n\t\t\t\"2001:4860:4801:38::/64\",\n\t\t\t\"2001:4860:4801:39::/64\",\n\t\t\t\"2001:4860:4801:3::/64\",\n\t\t\t\"2001:4860:4801:3a::/64\",\n\t\t\t\"2001:4860:4801:3b::/64\",\n\t\t\t\"2001:4860:4801:3c::/64\",\n\t\t\t\"2001:4860:4801:3d::/64\",\n\t\t\t\"2001:4860:4801:3e::/64\",\n\t\t\t\"2001:4860:4801:40::/64\",\n\t\t\t\"2001:4860:4801:41::/64\",\n\t\t\t\"2001:4860:4801:42::/64\",\n\t\t\t\"2001:4860:4801:43::/64\",\n\t\t\t\"2001:4860:4801:44::/64\",\n\t\t\t\"2001:4860:4801:45::/64\",\n\t\t\t\"2001:4860:4801:46::/64\",\n\t\t\t\"2001:4860:4801:47::/64\",\n\t\t\t\"2001:4860:4801:48::/64\",\n\t\t\t\"2001:4860:4801:49::/64\",\n\t\t\t\"2001:4860:4801:4a::/64\",\n\t\t\t\"2001:4860:4801:50::/64\",\n\t\t\t\"2001:4860:4801:51::/64\",\n\t\t\t\"2001:4860:4801:53::/64\",\n\t\t\t\"2001:4860:4801:60::/64\",\n\t\t\t\"2001:4860:4801:61::/64\",\n\t\t\t\"2001:4860:4801:62::/64\",\n\t\t\t\"2001:4860:4801:63::/64\",\n\t\t\t\"2001:4860:4801:64::/64\",\n\t\t\t\"2001:4860:4801:65::/64\",\n\t\t\t\"2001:4860:4801:66::/64\",\n\t\t\t\"2001:4860:4801:67::/64\",\n\t\t\t\"2001:4860:4801:68::/64\",\n\t\t\t\"2001:4860:4801:69::/64\",\n\t\t\t\"2001:4860:4801:6a::/64\",\n\t\t\t\"2001:4860:4801:6b::/64\",\n\t\t\t\"2001:4860:4801:6c::/64\",\n\t\t\t\"2001:4860:4801:6d::/64\",\n\t\t\t\"2001:4860:4801:6e::/64\",\n\t\t\t\"2001:4860:4801:6f::/64\",\n\t\t\t\"2001:4860:4801:70::/64\",\n\t\t\t\"2001:4860:4801:71::/64\",\n\t\t\t\"2001:4860:4801:72::/64\",\n\t\t\t\"2001:4860:4801:73::/64\",\n\t\t\t\"2001:4860:4801:74::/64\",\n\t\t\t\"2001:4860:4801:75::/64\",\n\t\t\t\"2001:4860:4801:76::/64\",\n\t\t\t\"2001:4860:4801:77::/64\",\n\t\t\t\"2001:4860:4801:80::/64\",\n\t\t\t\"2001:4860:4801:81::/64\",\n\t\t\t\"2001:4860:4801:82::/64\",\n\t\t\t\"2001:4860:4801:83::/64\",\n\t\t\t\"2001:4860:4801:84::/64\",\n\t\t\t\"2001:4860:4801:85::/64\",\n\t\t\t\"2001:4860:4801:86::/64\",\n\t\t\t\"2001:4860:4801:90::/64\",\n\t\t\t\"2001:4860:4801:91::/64\",\n\t\t\t\"2001:4860:4801:92::/64\",\n\t\t\t\"2001:4860:4801::/64\",\n\t\t\t\"2001:4860:4801:c::/64\",\n\t\t\t\"2001:4860:4801:f::/64\",\n\t\t\t\"34.100.182.96/28\",\n\t\t\t\"34.101.50.144/28\",\n\t\t\t\"34.118.254.0/28\",\n\t\t\t\"34.118.66.0/28\",\n\t\t\t\"34.126.178.96/28\",\n\t\t\t\"34.146.150.144/28\",\n\t\t\t\"34.147.110.144/28\",\n\t\t\t\"34.151.74.144/28\",\n\t\t\t\"34.152.50.64/28\",\n\t\t\t\"34.154.114.144/28\",\n\t\t\t\"34.155.98.32/28\",\n\t\t\t\"34.165.18.176/28\",\n\t\t\t\"34.175.160.64/28\",\n\t\t\t\"34.176.130.16/28\",\n\t\t\t\"34.64.82.64/28\",\n\t\t\t\"34.65.242.112/28\",\n\t\t\t\"34.80.50.80/28\",\n\t\t\t\"34.88.194.0/28\",\n\t\t\t\"34.89.10.80/28\",\n\t\t\t\"34.89.198.80/28\",\n\t\t\t\"34.96.162.48/28\",\n\t\t\t\"35.247.243.240/28\",\n\t\t\t\"66.249.64.0/27\",\n\t\t\t\"66.249.64.128/27\",\n\t\t\t\"66.249.64.160/27\",\n\t\t\t\"66.249.64.192/27\",\n\t\t\t\"66.249.64.224/27\",\n\t\t\t\"66.249.64.32/27\",\n\t\t\t\"66.249.64.64/27\",\n\t\t\t\"66.249.64.96/27\",\n\t\t\t\"66.249.65.0/27\",\n\t\t\t\"66.249.65.128/27\",\n\t\t\t\"66.249.65.160/27\",\n\t\t\t\"66.249.65.192/27\",\n\t\t\t\"66.249.65.224/27\",\n\t\t\t\"66.249.65.32/27\",\n\t\t\t\"66.249.65.64/27\",\n\t\t\t\"66.249.65.96/27\",\n\t\t\t\"66.249.66.0/27\",\n\t\t\t\"66.249.66.128/27\",\n\t\t\t\"66.249.66.192/27\",\n\t\t\t\"66.249.66.32/27\",\n\t\t\t\"66.249.66.64/27\",\n\t\t\t\"66.249.68.0/27\",\n\t\t\t\"66.249.68.32/27\",\n\t\t\t\"66.249.68.64/27\",\n\t\t\t\"66.249.69.0/27\",\n\t\t\t\"66.249.69.128/27\",\n\t\t\t\"66.249.69.160/27\",\n\t\t\t\"66.249.69.192/27\",\n\t\t\t\"66.249.69.224/27\",\n\t\t\t\"66.249.69.32/27\",\n\t\t\t\"66.249.69.64/27\",\n\t\t\t\"66.249.69.96/27\",\n\t\t\t\"66.249.70.0/27\",\n\t\t\t\"66.249.70.128/27\",\n\t\t\t\"66.249.70.160/27\",\n\t\t\t\"66.249.70.192/27\",\n\t\t\t\"66.249.70.224/27\",\n\t\t\t\"66.249.70.32/27\",\n\t\t\t\"66.249.70.64/27\",\n\t\t\t\"66.249.70.96/27\",\n\t\t\t\"66.249.71.0/27\",\n\t\t\t\"66.249.71.128/27\",\n\t\t\t\"66.249.71.160/27\",\n\t\t\t\"66.249.71.192/27\",\n\t\t\t\"66.249.71.32/27\",\n\t\t\t\"66.249.71.64/27\",\n\t\t\t\"66.249.71.96/27\",\n\t\t\t\"66.249.72.0/27\",\n\t\t\t\"66.249.72.128/27\",\n\t\t\t\"66.249.72.160/27\",\n\t\t\t\"66.249.72.192/27\",\n\t\t\t\"66.249.72.224/27\",\n\t\t\t\"66.249.72.32/27\",\n\t\t\t\"66.249.72.64/27\",\n\t\t\t\"66.249.72.96/27\",\n\t\t\t\"66.249.73.0/27\",\n\t\t\t\"66.249.73.128/27\",\n\t\t\t\"66.249.73.160/27\",\n\t\t\t\"66.249.73.192/27\",\n\t\t\t\"66.249.73.224/27\",\n\t\t\t\"66.249.73.32/27\",\n\t\t\t\"66.249.73.64/27\",\n\t\t\t\"66.249.73.96/27\",\n\t\t\t\"66.249.74.0/27\",\n\t\t\t\"66.249.74.32/27\",\n\t\t\t\"66.249.74.64/27\",\n\t\t\t\"66.249.74.96/27\",\n\t\t\t\"66.249.75.0/27\",\n\t\t\t\"66.249.75.128/27\",\n\t\t\t\"66.249.75.160/27\",\n\t\t\t\"66.249.75.192/27\",\n\t\t\t\"66.249.75.224/27\",\n\t\t\t\"66.249.75.32/27\",\n\t\t\t\"66.249.75.64/27\",\n\t\t\t\"66.249.75.96/27\",\n\t\t\t\"66.249.76.0/27\",\n\t\t\t\"66.249.76.128/27\",\n\t\t\t\"66.249.76.160/27\",\n\t\t\t\"66.249.76.192/27\",\n\t\t\t\"66.249.76.224/27\",\n\t\t\t\"66.249.76.32/27\",\n\t\t\t\"66.249.76.64/27\",\n\t\t\t\"66.249.76.96/27\",\n\t\t\t\"66.249.77.0/27\",\n\t\t\t\"66.249.77.128/27\",\n\t\t\t\"66.249.77.32/27\",\n\t\t\t\"66.249.77.64/27\",\n\t\t\t\"66.249.77.96/27\",\n\t\t\t\"66.249.79.0/27\",\n\t\t\t\"66.249.79.128/27\",\n\t\t\t\"66.249.79.160/27\",\n\t\t\t\"66.249.79.192/27\",\n\t\t\t\"66.249.79.224/27\",\n\t\t\t\"66.249.79.32/27\",\n\t\t\t\"66.249.79.64/27\",\n\t\t\t\"66.249.79.96/27\",\n\t\t]\n\n\t\tconst facebook = [\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"66.220.144.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"74.119.76.0/22\",\n\t\t\t\"69.171.255.0/24\",\n\t\t\t\"173.252.64.0/18\",\n\t\t\t\"69.171.224.0/19\",\n\t\t\t\"69.171.224.0/20\",\n\t\t\t\"103.4.96.0/22\",\n\t\t\t\"173.252.64.0/19\",\n\t\t\t\"31.13.64.0/18\",\n\t\t\t\"31.13.24.0/21\",\n\t\t\t\"66.220.152.0/21\",\n\t\t\t\"69.171.239.0/24\",\n\t\t\t\"69.171.240.0/20\",\n\t\t\t\"31.13.64.0/19\",\n\t\t\t\"31.13.64.0/24\",\n\t\t\t\"31.13.65.0/24\",\n\t\t\t\"31.13.67.0/24\",\n\t\t\t\"31.13.68.0/24\",\n\t\t\t\"31.13.69.0/24\",\n\t\t\t\"31.13.70.0/24\",\n\t\t\t\"31.13.71.0/24\",\n\t\t\t\"31.13.72.0/24\",\n\t\t\t\"31.13.73.0/24\",\n\t\t\t\"31.13.74.0/24\",\n\t\t\t\"31.13.75.0/24\",\n\t\t\t\"31.13.76.0/24\",\n\t\t\t\"31.13.77.0/24\",\n\t\t\t\"31.13.96.0/19\",\n\t\t\t\"31.13.66.0/24\",\n\t\t\t\"173.252.96.0/19\",\n\t\t\t\"69.63.178.0/24\",\n\t\t\t\"31.13.78.0/24\",\n\t\t\t\"31.13.79.0/24\",\n\t\t\t\"31.13.80.0/24\",\n\t\t\t\"31.13.82.0/24\",\n\t\t\t\"31.13.83.0/24\",\n\t\t\t\"31.13.84.0/24\",\n\t\t\t\"31.13.85.0/24\",\n\t\t\t\"31.13.86.0/24\",\n\t\t\t\"31.13.87.0/24\",\n\t\t\t\"31.13.88.0/24\",\n\t\t\t\"31.13.89.0/24\",\n\t\t\t\"31.13.91.0/24\",\n\t\t\t\"31.13.92.0/24\",\n\t\t\t\"31.13.93.0/24\",\n\t\t\t\"31.13.94.0/24\",\n\t\t\t\"31.13.95.0/24\",\n\t\t\t\"31.13.81.0/24\",\n\t\t\t\"179.60.192.0/22\",\n\t\t\t\"179.60.192.0/24\",\n\t\t\t\"179.60.193.0/24\",\n\t\t\t\"179.60.194.0/24\",\n\t\t\t\"179.60.195.0/24\",\n\t\t\t\"185.60.216.0/22\",\n\t\t\t\"45.64.40.0/22\",\n\t\t\t\"185.60.216.0/24\",\n\t\t\t\"185.60.217.0/24\",\n\t\t\t\"185.60.218.0/24\",\n\t\t\t\"185.60.219.0/24\",\n\t\t\t\"129.134.0.0/16\",\n\t\t\t\"157.240.0.0/16\",\n\t\t\t\"157.240.8.0/24\",\n\t\t\t\"157.240.0.0/24\",\n\t\t\t\"157.240.1.0/24\",\n\t\t\t\"157.240.2.0/24\",\n\t\t\t\"157.240.3.0/24\",\n\t\t\t\"157.240.5.0/24\",\n\t\t\t\"157.240.6.0/24\",\n\t\t\t\"157.240.7.0/24\",\n\t\t\t\"157.240.9.0/24\",\n\t\t\t\"157.240.10.0/24\",\n\t\t\t\"157.240.16.0/24\",\n\t\t\t\"157.240.19.0/24\",\n\t\t\t\"157.240.11.0/24\",\n\t\t\t\"157.240.12.0/24\",\n\t\t\t\"157.240.13.0/24\",\n\t\t\t\"157.240.14.0/24\",\n\t\t\t\"157.240.15.0/24\",\n\t\t\t\"157.240.17.0/24\",\n\t\t\t\"157.240.18.0/24\",\n\t\t\t\"157.240.20.0/24\",\n\t\t\t\"157.240.21.0/24\",\n\t\t\t\"157.240.22.0/24\",\n\t\t\t\"157.240.23.0/24\",\n\t\t\t\"157.240.0.0/17\",\n\t\t\t\"69.171.250.0/24\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"157.240.192.0/24\",\n\t\t\t\"157.240.198.0/24\",\n\t\t\t\"102.132.96.0/20\",\n\t\t\t\"102.132.96.0/24\",\n\t\t\t\"102.132.97.0/24\",\n\t\t\t\"157.240.26.0/24\",\n\t\t\t\"157.240.27.0/24\",\n\t\t\t\"157.240.28.0/24\",\n\t\t\t\"157.240.29.0/24\",\n\t\t\t\"157.240.30.0/24\",\n\t\t\t\"129.134.28.0/24\",\n\t\t\t\"129.134.29.0/24\",\n\t\t\t\"157.240.208.0/24\",\n\t\t\t\"157.240.193.0/24\",\n\t\t\t\"157.240.194.0/24\",\n\t\t\t\"157.240.195.0/24\",\n\t\t\t\"157.240.197.0/24\",\n\t\t\t\"157.240.196.0/24\",\n\t\t\t\"157.240.200.0/24\",\n\t\t\t\"157.240.201.0/24\",\n\t\t\t\"157.240.203.0/24\",\n\t\t\t\"157.240.204.0/24\",\n\t\t\t\"157.240.205.0/24\",\n\t\t\t\"157.240.206.0/24\",\n\t\t\t\"157.240.207.0/24\",\n\t\t\t\"157.240.209.0/24\",\n\t\t\t\"157.240.210.0/24\",\n\t\t\t\"157.240.211.0/24\",\n\t\t\t\"157.240.212.0/24\",\n\t\t\t\"157.240.213.0/24\",\n\t\t\t\"157.240.214.0/24\",\n\t\t\t\"157.240.215.0/24\",\n\t\t\t\"157.240.216.0/24\",\n\t\t\t\"157.240.222.0/24\",\n\t\t\t\"129.134.30.0/24\",\n\t\t\t\"129.134.31.0/24\",\n\t\t\t\"129.134.30.0/23\",\n\t\t\t\"129.134.25.0/24\",\n\t\t\t\"129.134.26.0/24\",\n\t\t\t\"129.134.27.0/24\",\n\t\t\t\"102.132.99.0/24\",\n\t\t\t\"102.132.101.0/24\",\n\t\t\t\"129.134.64.0/24\",\n\t\t\t\"129.134.65.0/24\",\n\t\t\t\"129.134.66.0/24\",\n\t\t\t\"129.134.67.0/24\",\n\t\t\t\"157.240.219.0/24\",\n\t\t\t\"157.240.217.0/24\",\n\t\t\t\"157.240.218.0/24\",\n\t\t\t\"157.240.199.0/24\",\n\t\t\t\"129.134.127.0/24\",\n\t\t\t\"157.240.223.0/24\",\n\t\t\t\"157.240.192.0/18\",\n\t\t\t\"157.240.221.0/24\",\n\t\t\t\"157.240.220.0/24\",\n\t\t\t\"173.252.88.0/21\",\n\t\t\t\"129.134.68.0/24\",\n\t\t\t\"129.134.69.0/24\",\n\t\t\t\"129.134.70.0/24\",\n\t\t\t\"157.240.24.0/24\",\n\t\t\t\"157.240.25.0/24\",\n\t\t\t\"102.132.100.0/24\",\n\t\t\t\"157.240.31.0/24\",\n\t\t\t\"157.240.224.0/24\",\n\t\t\t\"129.134.71.0/24\",\n\t\t\t\"157.240.225.0/24\",\n\t\t\t\"157.240.226.0/24\",\n\t\t\t\"157.240.227.0/24\",\n\t\t\t\"129.134.0.0/17\",\n\t\t\t\"129.134.72.0/24\",\n\t\t\t\"129.134.73.0/24\",\n\t\t\t\"129.134.74.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"157.240.228.0/24\",\n\t\t\t\"157.240.229.0/24\",\n\t\t\t\"129.134.76.0/24\",\n\t\t\t\"129.134.75.0/24\",\n\t\t\t\"157.240.239.0/24\",\n\t\t\t\"157.240.240.0/24\",\n\t\t\t\"157.240.241.0/24\",\n\t\t\t\"157.240.231.0/24\",\n\t\t\t\"157.240.232.0/24\",\n\t\t\t\"157.240.233.0/24\",\n\t\t\t\"157.240.234.0/24\",\n\t\t\t\"157.240.235.0/24\",\n\t\t\t\"157.240.236.0/24\",\n\t\t\t\"129.134.77.0/24\",\n\t\t\t\"129.134.78.0/24\",\n\t\t\t\"129.134.79.0/24\",\n\t\t\t\"157.240.237.0/24\",\n\t\t\t\"157.240.238.0/24\",\n\t\t\t\"157.240.242.0/24\",\n\t\t\t\"157.240.243.0/24\",\n\t\t\t\"129.134.112.0/24\",\n\t\t\t\"157.240.100.0/24\",\n\t\t\t\"157.240.98.0/24\",\n\t\t\t\"157.240.96.0/24\",\n\t\t\t\"157.240.99.0/24\",\n\t\t\t\"157.240.101.0/24\",\n\t\t\t\"129.134.113.0/24\",\n\t\t\t\"129.134.114.0/24\",\n\t\t\t\"157.240.97.0/24\",\n\t\t\t\"129.134.115.0/24\",\n\t\t\t\"157.240.244.0/24\",\n\t\t\t\"157.240.245.0/24\",\n\t\t\t\"157.240.246.0/24\",\n\t\t\t\"157.240.247.0/24\",\n\t\t\t\"157.240.248.0/24\",\n\t\t\t\"157.240.249.0/24\",\n\t\t\t\"157.240.250.0/24\",\n\t\t\t\"163.70.128.0/17\",\n\t\t\t\"163.77.128.0/17\",\n\t\t\t\"157.240.251.0/24\",\n\t\t\t\"157.240.252.0/24\",\n\t\t\t\"157.240.253.0/24\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"157.240.254.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"185.89.216.0/22\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"2620:0:1c00::/40\",\n\t\t\t\"2a03:2880::/32\",\n\t\t\t\"2a03:2880:fffe::/48\",\n\t\t\t\"2a03:2880:ffff::/48\",\n\t\t\t\"2620:0:1cff::/48\",\n\t\t\t\"2a03:2880:f001::/48\",\n\t\t\t\"2a03:2880:f003::/48\",\n\t\t\t\"2a03:2880:f004::/48\",\n\t\t\t\"2a03:2880:f005::/48\",\n\t\t\t\"2a03:2880:f006::/48\",\n\t\t\t\"2a03:2880:f007::/48\",\n\t\t\t\"2a03:2880:f008::/48\",\n\t\t\t\"2a03:2880:f00a::/48\",\n\t\t\t\"2a03:2880:f00c::/48\",\n\t\t\t\"2a03:2880:f00d::/48\",\n\t\t\t\"2a03:2880:f00e::/48\",\n\t\t\t\"2a03:2880:f00f::/48\",\n\t\t\t\"2a03:2880:f010::/48\",\n\t\t\t\"2a03:2880:f011::/48\",\n\t\t\t\"2a03:2880:f012::/48\",\n\t\t\t\"2a03:2880:f013::/48\",\n\t\t\t\"2a03:2880:f016::/48\",\n\t\t\t\"2a03:2880:f017::/48\",\n\t\t\t\"2a03:2880:f019::/48\",\n\t\t\t\"2a03:2880:f01b::/48\",\n\t\t\t\"2a03:2880:f01c::/48\",\n\t\t\t\"2a03:2880:f01f::/48\",\n\t\t\t\"2a03:2880:1000::/36\",\n\t\t\t\"2a03:2880:2000::/36\",\n\t\t\t\"2a03:2880:3000::/36\",\n\t\t\t\"2a03:2880:4000::/36\",\n\t\t\t\"2a03:2880:5000::/36\",\n\t\t\t\"2a03:2880:6000::/36\",\n\t\t\t\"2a03:2880:7000::/36\",\n\t\t\t\"2a03:2880:f021::/48\",\n\t\t\t\"2a03:2880:f023::/48\",\n\t\t\t\"2a03:2880:f024::/48\",\n\t\t\t\"2a03:2880:f027::/48\",\n\t\t\t\"2a03:2880:f028::/48\",\n\t\t\t\"2a03:2880:f029::/48\",\n\t\t\t\"2a03:2880:f02b::/48\",\n\t\t\t\"2a03:2880:f02c::/48\",\n\t\t\t\"2a03:2880:f02d::/48\",\n\t\t\t\"2a03:2880:f02e::/48\",\n\t\t\t\"2a03:2880:f02f::/48\",\n\t\t\t\"2a03:2880:f030::/48\",\n\t\t\t\"2a03:2880:f031::/48\",\n\t\t\t\"2a03:2880:f032::/48\",\n\t\t\t\"2a03:2880:f033::/48\",\n\t\t\t\"2a03:2880:f034::/48\",\n\t\t\t\"2a03:2880:f035::/48\",\n\t\t\t\"2a03:2880:f036::/48\",\n\t\t\t\"2a03:2880:f037::/48\",\n\t\t\t\"2a03:2880:f038::/48\",\n\t\t\t\"2a03:2880:f03a::/48\",\n\t\t\t\"2a03:2880:f03b::/48\",\n\t\t\t\"2a03:2880:f03d::/48\",\n\t\t\t\"2a03:2880:f03e::/48\",\n\t\t\t\"2a03:2880:f03f::/48\",\n\t\t\t\"2401:db00::/32\",\n\t\t\t\"2a03:2880::/36\",\n\t\t\t\"2a03:2880:f101::/48\",\n\t\t\t\"2a03:2880:f201::/48\",\n\t\t\t\"2a03:2880:f103::/48\",\n\t\t\t\"2a03:2880:f203::/48\",\n\t\t\t\"2a03:2880:f104::/48\",\n\t\t\t\"2a03:2880:f204::/48\",\n\t\t\t\"2a03:2880:f107::/48\",\n\t\t\t\"2a03:2880:f207::/48\",\n\t\t\t\"2a03:2880:f108::/48\",\n\t\t\t\"2a03:2880:f208::/48\",\n\t\t\t\"2a03:2880:f10a::/48\",\n\t\t\t\"2a03:2880:f20a::/48\",\n\t\t\t\"2a03:2880:f10d::/48\",\n\t\t\t\"2a03:2880:f20d::/48\",\n\t\t\t\"2a03:2880:f10e::/48\",\n\t\t\t\"2a03:2880:f20e::/48\",\n\t\t\t\"2a03:2880:f10f::/48\",\n\t\t\t\"2a03:2880:f20f::/48\",\n\t\t\t\"2a03:2880:f110::/48\",\n\t\t\t\"2a03:2880:f210::/48\",\n\t\t\t\"2a03:2880:f111::/48\",\n\t\t\t\"2a03:2880:f211::/48\",\n\t\t\t\"2a03:2880:f112::/48\",\n\t\t\t\"2a03:2880:f212::/48\",\n\t\t\t\"2a03:2880:f116::/48\",\n\t\t\t\"2a03:2880:f216::/48\",\n\t\t\t\"2a03:2880:f117::/48\",\n\t\t\t\"2a03:2880:f217::/48\",\n\t\t\t\"2a03:2880:f119::/48\",\n\t\t\t\"2a03:2880:f219::/48\",\n\t\t\t\"2a03:2880:f11f::/48\",\n\t\t\t\"2a03:2880:f21f::/48\",\n\t\t\t\"2a03:2880:f121::/48\",\n\t\t\t\"2a03:2880:f221::/48\",\n\t\t\t\"2a03:2880:f123::/48\",\n\t\t\t\"2a03:2880:f223::/48\",\n\t\t\t\"2a03:2880:f10c::/48\",\n\t\t\t\"2a03:2880:f20c::/48\",\n\t\t\t\"2a03:2880:f105::/48\",\n\t\t\t\"2a03:2880:f205::/48\",\n\t\t\t\"2a03:2880:f106::/48\",\n\t\t\t\"2a03:2880:f206::/48\",\n\t\t\t\"2a03:2880:f11b::/48\",\n\t\t\t\"2a03:2880:f21b::/48\",\n\t\t\t\"2a03:2880:f113::/48\",\n\t\t\t\"2a03:2880:f213::/48\",\n\t\t\t\"2a03:2880:f11c::/48\",\n\t\t\t\"2a03:2880:f21c::/48\",\n\t\t\t\"2a03:2880:f128::/48\",\n\t\t\t\"2a03:2880:f228::/48\",\n\t\t\t\"2a03:2880:f02a::/48\",\n\t\t\t\"2a03:2880:f12a::/48\",\n\t\t\t\"2a03:2880:f22a::/48\",\n\t\t\t\"2a03:2880:f12f::/48\",\n\t\t\t\"2a03:2880:f22f::/48\",\n\t\t\t\"2a03:2880:f124::/48\",\n\t\t\t\"2a03:2880:f127::/48\",\n\t\t\t\"2a03:2880:f129::/48\",\n\t\t\t\"2a03:2880:f12b::/48\",\n\t\t\t\"2a03:2880:f12c::/48\",\n\t\t\t\"2a03:2880:f12d::/48\",\n\t\t\t\"2a03:2880:f12e::/48\",\n\t\t\t\"2a03:2880:f130::/48\",\n\t\t\t\"2a03:2880:f131::/48\",\n\t\t\t\"2a03:2880:f132::/48\",\n\t\t\t\"2a03:2880:f133::/48\",\n\t\t\t\"2a03:2880:f134::/48\",\n\t\t\t\"2a03:2880:f135::/48\",\n\t\t\t\"2a03:2880:f136::/48\",\n\t\t\t\"2a03:2880:f137::/48\",\n\t\t\t\"2a03:2880:f138::/48\",\n\t\t\t\"2a03:2880:f13a::/48\",\n\t\t\t\"2a03:2880:f13b::/48\",\n\t\t\t\"2a03:2880:f13d::/48\",\n\t\t\t\"2a03:2880:f13e::/48\",\n\t\t\t\"2a03:2880:f13f::/48\",\n\t\t\t\"2a03:2880:f224::/48\",\n\t\t\t\"2a03:2880:f227::/48\",\n\t\t\t\"2a03:2880:f229::/48\",\n\t\t\t\"2a03:2880:f22b::/48\",\n\t\t\t\"2a03:2880:f22c::/48\",\n\t\t\t\"2a03:2880:f22d::/48\",\n\t\t\t\"2a03:2880:f22e::/48\",\n\t\t\t\"2a03:2880:f230::/48\",\n\t\t\t\"2a03:2880:f231::/48\",\n\t\t\t\"2a03:2880:f232::/48\",\n\t\t\t\"2a03:2880:f233::/48\",\n\t\t\t\"2a03:2880:f234::/48\",\n\t\t\t\"2a03:2880:f235::/48\",\n\t\t\t\"2a03:2880:f236::/48\",\n\t\t\t\"2a03:2880:f237::/48\",\n\t\t\t\"2a03:2880:f238::/48\",\n\t\t\t\"2a03:2880:f23a::/48\",\n\t\t\t\"2a03:2880:f23b::/48\",\n\t\t\t\"2a03:2880:f23d::/48\",\n\t\t\t\"2a03:2880:f23e::/48\",\n\t\t\t\"2a03:2880:f23f::/48\",\n\t\t\t\"2a03:2880:f0ff::/48\",\n\t\t\t\"2a03:2880:f1ff::/48\",\n\t\t\t\"2a03:2880:f2ff::/48\",\n\t\t\t\"2a03:2880:f044::/48\",\n\t\t\t\"2a03:2880:f144::/48\",\n\t\t\t\"2a03:2880:f244::/48\",\n\t\t\t\"2a03:2880:f042::/48\",\n\t\t\t\"2a03:2880:f043::/48\",\n\t\t\t\"2a03:2880:f045::/48\",\n\t\t\t\"2a03:2880:f046::/48\",\n\t\t\t\"2a03:2880:f047::/48\",\n\t\t\t\"2a03:2880:f048::/48\",\n\t\t\t\"2a03:2880:f04a::/48\",\n\t\t\t\"2a03:2880:f04c::/48\",\n\t\t\t\"2a03:2880:f04b::/48\",\n\t\t\t\"2a03:2880:f04d::/48\",\n\t\t\t\"2a03:2880:f259::/48\",\n\t\t\t\"2a03:2880:f258::/48\",\n\t\t\t\"2a03:2880:f257::/48\",\n\t\t\t\"2a03:2880:f256::/48\",\n\t\t\t\"2a03:2880:f255::/48\",\n\t\t\t\"2a03:2880:f254::/48\",\n\t\t\t\"2a03:2880:f253::/48\",\n\t\t\t\"2a03:2880:f252::/48\",\n\t\t\t\"2a03:2880:f250::/48\",\n\t\t\t\"2a03:2880:f24f::/48\",\n\t\t\t\"2a03:2880:f24d::/48\",\n\t\t\t\"2a03:2880:f24e::/48\",\n\t\t\t\"2a03:2880:f24c::/48\",\n\t\t\t\"2a03:2880:f24b::/48\",\n\t\t\t\"2a03:2880:f24a::/48\",\n\t\t\t\"2a03:2880:f248::/48\",\n\t\t\t\"2a03:2880:f247::/48\",\n\t\t\t\"2a03:2880:f246::/48\",\n\t\t\t\"2a03:2880:f245::/48\",\n\t\t\t\"2a03:2880:f243::/48\",\n\t\t\t\"2a03:2880:f242::/48\",\n\t\t\t\"2a03:2880:f241::/48\",\n\t\t\t\"2a03:2880:f240::/48\",\n\t\t\t\"2a03:2880:f159::/48\",\n\t\t\t\"2a03:2880:f158::/48\",\n\t\t\t\"2a03:2880:f157::/48\",\n\t\t\t\"2a03:2880:f156::/48\",\n\t\t\t\"2a03:2880:f155::/48\",\n\t\t\t\"2a03:2880:f154::/48\",\n\t\t\t\"2a03:2880:f153::/48\",\n\t\t\t\"2a03:2880:f152::/48\",\n\t\t\t\"2a03:2880:f150::/48\",\n\t\t\t\"2a03:2880:f14f::/48\",\n\t\t\t\"2a03:2880:f14e::/48\",\n\t\t\t\"2a03:2880:f14d::/48\",\n\t\t\t\"2a03:2880:f14c::/48\",\n\t\t\t\"2a03:2880:f14b::/48\",\n\t\t\t\"2a03:2880:f14a::/48\",\n\t\t\t\"2a03:2880:f148::/48\",\n\t\t\t\"2a03:2880:f147::/48\",\n\t\t\t\"2a03:2880:f146::/48\",\n\t\t\t\"2a03:2880:f145::/48\",\n\t\t\t\"2a03:2880:f143::/48\",\n\t\t\t\"2a03:2880:f142::/48\",\n\t\t\t\"2a03:2880:f141::/48\",\n\t\t\t\"2a03:2880:f140::/48\",\n\t\t\t\"2a03:2880:f059::/48\",\n\t\t\t\"2a03:2880:f058::/48\",\n\t\t\t\"2a03:2880:f057::/48\",\n\t\t\t\"2a03:2880:f056::/48\",\n\t\t\t\"2a03:2880:f055::/48\",\n\t\t\t\"2a03:2880:f054::/48\",\n\t\t\t\"2a03:2880:f053::/48\",\n\t\t\t\"2a03:2880:f052::/48\",\n\t\t\t\"2a03:2880:f050::/48\",\n\t\t\t\"2a03:2880:f04f::/48\",\n\t\t\t\"2a03:2880:f04e::/48\",\n\t\t\t\"2a03:2880:ff0b::/48\",\n\t\t\t\"2a03:2880:ff0c::/48\",\n\t\t\t\"2a03:2880:f040::/48\",\n\t\t\t\"2a03:2880:f041::/48\",\n\t\t\t\"2a03:2880:f0fc::/48\",\n\t\t\t\"2a03:2880:f0fd::/48\",\n\t\t\t\"2a03:2880:f0fc::/47\",\n\t\t\t\"2a03:2880:f1fc::/48\",\n\t\t\t\"2a03:2880:f1fd::/48\",\n\t\t\t\"2a03:2880:f1fc::/47\",\n\t\t\t\"2a03:2880:ff08::/48\",\n\t\t\t\"2a03:2880:ff09::/48\",\n\t\t\t\"2a03:2880:ff0a::/48\",\n\t\t\t\"2a03:2880:f05e::/48\",\n\t\t\t\"2a03:2880:f15e::/48\",\n\t\t\t\"2a03:2880:f25e::/48\",\n\t\t\t\"2620:0:1cfa::/48\",\n\t\t\t\"2a03:2880:f05b::/48\",\n\t\t\t\"2a03:2880:f05a::/48\",\n\t\t\t\"2a03:2880:f25a::/48\",\n\t\t\t\"2a03:2880:f15c::/48\",\n\t\t\t\"2a03:2880:f000::/36\",\n\t\t\t\"2a03:2880:f05d::/48\",\n\t\t\t\"2a03:2880:f25c::/48\",\n\t\t\t\"2a03:2880:f05c::/48\",\n\t\t\t\"2a03:2880:f260::/48\",\n\t\t\t\"2a03:2880:f060::/48\",\n\t\t\t\"2a03:2880:f160::/48\",\n\t\t\t\"2a03:2880:f15d::/48\",\n\t\t\t\"2a03:2880:f25b::/48\",\n\t\t\t\"2a03:2880:f25d::/48\",\n\t\t\t\"2a03:2880:f15b::/48\",\n\t\t\t\"2a03:2880:f15a::/48\",\n\t\t\t\"2a03:2880:f161::/48\",\n\t\t\t\"2a03:2880:f061::/48\",\n\t\t\t\"2a03:2880:f261::/48\",\n\t\t\t\"2a03:2881::/32\",\n\t\t\t\"2a03:2881::/48\",\n\t\t\t\"2a03:2881:1::/48\",\n\t\t\t\"2a03:2881:2::/48\",\n\t\t\t\"2a03:2881:3::/48\",\n\t\t\t\"2a03:2880:f162::/48\",\n\t\t\t\"2a03:2880:f262::/48\",\n\t\t\t\"2a03:2881:4000::/48\",\n\t\t\t\"2a03:2881:4003::/48\",\n\t\t\t\"2a03:2881:4001::/48\",\n\t\t\t\"2a03:2881:4002::/48\",\n\t\t\t\"2a03:2880:f065::/48\",\n\t\t\t\"2a03:2880:f163::/48\",\n\t\t\t\"2a03:2880:f066::/48\",\n\t\t\t\"2a03:2880:f263::/48\",\n\t\t\t\"2a03:2880:f264::/48\",\n\t\t\t\"2a03:2880:f164::/48\",\n\t\t\t\"2a03:2880:f067::/48\",\n\t\t\t\"2a03:2880:f165::/48\",\n\t\t\t\"2a03:2880:f265::/48\",\n\t\t\t\"2a03:2880:f068::/48\",\n\t\t\t\"2a03:2881:4004::/48\",\n\t\t\t\"2a03:2880:f06a::/48\",\n\t\t\t\"2a03:2880:f266::/48\",\n\t\t\t\"2a03:2880:f166::/48\",\n\t\t\t\"2a03:2880:f267::/48\",\n\t\t\t\"2a03:2880:f06b::/48\",\n\t\t\t\"2a03:2880:f167::/48\",\n\t\t\t\"2a03:2881:4006::/48\",\n\t\t\t\"2a03:2881:7::/48\",\n\t\t\t\"2a03:2881:9::/48\",\n\t\t\t\"2a03:2881:8::/48\",\n\t\t\t\"2a03:2881:4::/48\",\n\t\t\t\"2a03:2881:6::/48\",\n\t\t\t\"2a03:2881:5::/48\",\n\t\t\t\"2a03:2881:a::/48\",\n\t\t\t\"2a03:2880:f268::/48\",\n\t\t\t\"2a03:2880:f06d::/48\",\n\t\t\t\"2a03:2880:f168::/48\",\n\t\t\t\"2a03:2881:b::/48\",\n\t\t\t\"2a03:2881:c::/48\",\n\t\t\t\"2a03:2881:4007::/48\",\n\t\t\t\"2a03:2880:f269::/48\",\n\t\t\t\"2a03:2880:f169::/48\",\n\t\t\t\"2a03:2880:f06f::/48\",\n\t\t\t\"2a03:2880:f26a::/48\",\n\t\t\t\"2a03:2880:f16a::/48\",\n\t\t\t\"2a03:2880:f070::/48\",\n\t\t\t\"2a03:2881:d::/48\",\n\t\t\t\"2a03:2881:e::/48\",\n\t\t\t\"2a03:2880:f071::/48\",\n\t\t\t\"2a03:2880:f16b::/48\",\n\t\t\t\"2a03:2880:f26b::/48\",\n\t\t\t\"2a03:2881:4008::/48\",\n\t\t\t\"2a03:2881:10::/48\",\n\t\t\t\"2a03:2881:f::/48\",\n\t\t\t\"2a03:2881:11::/48\",\n\t\t\t\"2a03:2880:f26c::/48\",\n\t\t\t\"2a03:2880:f16c::/48\",\n\t\t\t\"2a03:2880:f073::/48\",\n\t\t\t\"2a03:2880:f16d::/48\",\n\t\t\t\"2a03:2880:f074::/48\",\n\t\t\t\"2a03:2880:f26d::/48\",\n\t\t\t\"2a03:2881:4009::/48\",\n\t\t\t\"2a03:2880:f26e::/48\",\n\t\t\t\"2a03:2880:f16e::/48\",\n\t\t\t\"2a03:2880:f076::/48\",\n\t\t\t\"2a03:2880:f16f::/48\",\n\t\t\t\"2a03:2880:f26f::/48\",\n\t\t\t\"2a03:2880:f077::/48\",\n\t\t\t\"2a03:2881:12::/48\",\n\t\t\t\"2a03:2881:13::/48\",\n\t\t\t\"2a03:2881:17::/48\",\n\t\t\t\"2a03:2881:15::/48\",\n\t\t\t\"2a03:2881:18::/48\",\n\t\t\t\"2a03:2881:14::/48\",\n\t\t\t\"2a03:2881:16::/48\",\n\t\t\t\"2a03:2881:19::/48\",\n\t\t\t\"2a03:2881:4005::/48\",\n\t\t\t\"2a03:2880:f078::/48\",\n\t\t\t\"2a03:2880:f170::/48\",\n\t\t\t\"2a03:2880:f270::/48\",\n\t\t\t\"2a03:2881:400a::/48\",\n\t\t\t\"2a03:2881:400c::/48\",\n\t\t\t\"2a03:2881:400b::/48\",\n\t\t\t\"2a03:2881:400d::/48\",\n\t\t\t\"2a03:2881:1a::/48\",\n\t\t\t\"2a03:2881:1c::/48\",\n\t\t\t\"2a03:2881:1b::/48\",\n\t\t\t\"2a03:2880:f271::/48\",\n\t\t\t\"2a03:2880:f07d::/48\",\n\t\t\t\"2a03:2880:f171::/48\",\n\t\t\t\"2a03:2880:f07e::/48\",\n\t\t\t\"2a03:2880:f172::/48\",\n\t\t\t\"2a03:2880:f272::/48\",\n\t\t\t\"2a03:2880:f080::/48\",\n\t\t\t\"2a03:2880:f173::/48\",\n\t\t\t\"2a03:2880:f273::/48\",\n\t\t\t\"2a03:2880:f081::/48\",\n\t\t\t\"2a03:2880:f174::/48\",\n\t\t\t\"2a03:2880:f274::/48\",\n\t\t\t\"2a03:2880:f175::/48\",\n\t\t\t\"2a03:2880:f275::/48\",\n\t\t\t\"2a03:2880:f082::/48\",\n\t\t\t\"2a03:2880:f176::/48\",\n\t\t\t\"2a03:2880:f276::/48\",\n\t\t\t\"2a03:2880:f083::/48\",\n\t\t\t\"2a03:2880:f277::/48\",\n\t\t\t\"2a03:2880:f084::/48\",\n\t\t\t\"2a03:2880:f177::/48\",\n\t\t\t\"2a03:2881:1e::/48\",\n\t\t\t\"2a03:2880:f085::/48\",\n\t\t\t\"2a03:2880:f178::/48\",\n\t\t\t\"2a03:2880:f278::/48\",\n\t\t\t\"2a03:2880:f179::/48\",\n\t\t\t\"2a03:2880:f086::/48\",\n\t\t\t\"2a03:2880:f279::/48\",\n\t\t\t\"2a03:2880:f17a::/48\",\n\t\t\t\"2a03:2880:f08a::/48\",\n\t\t\t\"2a03:2880:f27a::/48\",\n\t\t\t\"2a03:2881:48::/45\",\n\t\t\t\"2a10:f781:10:cee0::/64\",\n\t\t\t\"2a03:83e0::/32\",\n\t\t]\n\n\t\tconst twitter = [\n\t\t\t\"199.16.156.0/22\",\n\t\t\t\"199.59.148.0/22\",\n\t\t\t\"192.133.76.0/22\",\n\t\t]\n\n\t\tconst bing = [\n\t\t\t\"157.55.39.0/24\",\n\t\t\t\"207.46.13.0/24\",\n\t\t\t\"40.77.167.0/24\",\n\t\t\t\"13.66.139.0/24\",\n\t\t\t\"13.66.144.0/24\",\n\t\t\t\"52.167.144.0/24\",\n\t\t\t\"13.67.10.16/28\",\n\t\t\t\"13.69.66.240/28\",\n\t\t\t\"13.71.172.224/28\",\n\t\t\t\"139.217.52.0/28\",\n\t\t\t\"191.233.204.224/28\",\n\t\t\t\"20.36.108.32/28\",\n\t\t\t\"20.43.120.16/28\",\n\t\t\t\"40.79.131.208/28\",\n\t\t\t\"40.79.186.176/28\",\n\t\t\t\"52.231.148.0/28\",\n\t\t\t\"20.79.107.240/28\",\n\t\t\t\"51.105.67.0/28\",\n\t\t\t\"20.125.163.80/28\",\n\t\t\t\"40.77.188.0/22\",\n\t\t\t\"65.55.210.0/24\",\n\t\t\t\"199.30.24.0/23\",\n\t\t\t\"40.77.202.0/24\",\n\t\t\t\"40.77.139.0/25\",\n\t\t\t\"20.74.197.0/28\",\n\t\t]\n\n\t\tconst pinterest = [\n\t\t\t\"54.236.1.1/32\",\n\t\t\t\"54.236.1.2/31\",\n\t\t\t\"54.236.1.4/30\",\n\t\t\t\"54.236.1.8/29\",\n\t\t\t\"54.236.1.16/28\",\n\t\t\t\"54.236.1.32/27\",\n\t\t\t\"54.236.1.64/26\",\n\t\t\t\"54.236.1.128/25\",\n\t\t]\n\n\t\tconst hotjar = [\n\t\t\t\"18.203.61.76\",\n\t\t\t\"18.203.176.135\",\n\t\t\t\"52.17.197.221\",\n\t\t]\n\n\t\tconst alexa = [\n\t\t\t\"204.236.235.245\",\n\t\t\t\"75.101.186.145\",\n\t\t]\n\n\t\tconst amazon = [\n\t\t\t\"18.207.141.103\",\n\t\t\t\"52.1.113.12\",\n\t\t]\n\n\t\tconst baidu = [\n\t\t\t\"180.76.15.0/24\",\n\t\t\t\"119.63.196.0/24\",\n\t\t\t\"115.239.212.0/24\",\n\t\t\t\"119.63.199.0/24\",\n\t\t\t\"122.81.208.0/22\",\n\t\t\t\"123.125.71.0/24\",\n\t\t\t\"180.76.4.0/24\",\n\t\t\t\"180.76.5.0/24\",\n\t\t\t\"180.76.6.0/24\",\n\t\t\t\"185.10.104.0/24\",\n\t\t\t\"220.181.108.0/24\",\n\t\t\t\"220.181.51.0/24\",\n\t\t\t\"111.13.102.0/24\",\n\t\t\t\"123.125.67.144/29\",\n\t\t\t\"123.125.67.152/31\",\n\t\t\t\"61.135.169.0/24\",\n\t\t\t\"123.125.68.68/30\",\n\t\t\t\"123.125.68.72/29\",\n\t\t\t\"123.125.68.80/28\",\n\t\t\t\"123.125.68.96/30\",\n\t\t\t\"202.46.48.0/20\",\n\t\t\t\"220.181.38.0/24\",\n\t\t\t\"123.125.68.80/30\",\n\t\t\t\"123.125.68.84/31\",\n\t\t\t\"123.125.68.0/24\",\n\t\t]\n\n\t\tconst duckduckgo = [\n\t\t\t\"20.191.45.212\",\n\t\t\t\"40.88.21.235\",\n\t\t\t\"40.76.173.151\",\n\t\t\t\"40.76.163.7\",\n\t\t\t\"20.185.79.47\",\n\t\t\t\"52.142.26.175\",\n\t\t\t\"20.185.79.15\",\n\t\t\t\"52.142.24.149\",\n\t\t\t\"40.76.162.208\",\n\t\t\t\"40.76.163.23\",\n\t\t\t\"40.76.162.191\",\n\t\t\t\"40.76.162.247\",\n\t\t]\n\n\t\tconst yahoo = [\n\t\t\t\"5.255.250.0/24\",\n\t\t\t\"37.9.87.0/24\",\n\t\t\t\"67.195.37.0/24\",\n\t\t\t\"67.195.50.0/24\",\n\t\t\t\"67.195.110.0/24\",\n\t\t\t\"67.195.111.0/24\",\n\t\t\t\"67.195.112.0/23\",\n\t\t\t\"67.195.114.0/24\",\n\t\t\t\"67.195.115.0/24\",\n\t\t\t\"68.180.224.0/21\",\n\t\t\t\"72.30.132.0/24\",\n\t\t\t\"72.30.142.0/24\",\n\t\t\t\"72.30.161.0/24\",\n\t\t\t\"72.30.196.0/24\",\n\t\t\t\"72.30.198.0/24\",\n\t\t\t\"74.6.254.0/24\",\n\t\t\t\"74.6.8.0/24\",\n\t\t\t\"74.6.13.0/24\",\n\t\t\t\"74.6.17.0/24\",\n\t\t\t\"74.6.18.0/24\",\n\t\t\t\"74.6.22.0/24\",\n\t\t\t\"74.6.27.0/24\",\n\t\t\t\"74.6.168.0/24\",\n\t\t\t\"77.88.5.0/24\",\n\t\t\t\"77.88.47.0/24\",\n\t\t\t\"93.158.161.0/24\",\n\t\t\t\"98.137.72.0/24\",\n\t\t\t\"98.137.206.0/24\",\n\t\t\t\"98.137.207.0/24\",\n\t\t\t\"98.139.168.0/24\",\n\t\t\t\"114.111.95.0/24\",\n\t\t\t\"124.83.159.0/24\",\n\t\t\t\"124.83.179.0/24\",\n\t\t\t\"124.83.223.0/24\",\n\t\t\t\"141.8.144.0/24\",\n\t\t\t\"183.79.63.0/24\",\n\t\t\t\"183.79.92.0/24\",\n\t\t\t\"203.216.255.0/24\",\n\t\t\t\"211.14.11.0/24\",\n\t\t]\n\n\t\tconst yandex = [\n\t\t\t\"100.43.90.0/24\",\n\t\t\t\"37.9.115.0/24\",\n\t\t\t\"37.140.165.0/24\",\n\t\t\t\"77.88.22.0/25\",\n\t\t\t\"77.88.29.0/24\",\n\t\t\t\"77.88.31.0/24\",\n\t\t\t\"77.88.59.0/24\",\n\t\t\t\"84.201.146.0/24\",\n\t\t\t\"84.201.148.0/24\",\n\t\t\t\"84.201.149.0/24\",\n\t\t\t\"87.250.243.0/24\",\n\t\t\t\"87.250.253.0/24\",\n\t\t\t\"93.158.147.0/24\",\n\t\t\t\"93.158.148.0/24\",\n\t\t\t\"93.158.151.0/24\",\n\t\t\t\"93.158.153.0/32\",\n\t\t\t\"95.108.128.0/24\",\n\t\t\t\"95.108.138.0/24\",\n\t\t\t\"95.108.150.0/23\",\n\t\t\t\"95.108.158.0/24\",\n\t\t\t\"95.108.156.0/24\",\n\t\t\t\"95.108.188.128/25\",\n\t\t\t\"95.108.234.0/24\",\n\t\t\t\"95.108.248.0/24\",\n\t\t\t\"100.43.80.0/24\",\n\t\t\t\"130.193.62.0/24\",\n\t\t\t\"141.8.153.0/24\",\n\t\t\t\"178.154.165.0/24\",\n\t\t\t\"178.154.166.128/25\",\n\t\t\t\"178.154.173.29\",\n\t\t\t\"178.154.200.158\",\n\t\t\t\"178.154.202.0/24\",\n\t\t\t\"178.154.205.0/24\",\n\t\t\t\"178.154.239.0/24\",\n\t\t\t\"178.154.243.0/24\",\n\t\t\t\"37.9.84.253\",\n\t\t\t\"199.21.99.99\",\n\t\t\t\"178.154.162.29\",\n\t\t\t\"178.154.203.251\",\n\t\t\t\"178.154.211.250\",\n\t\t\t\"178.154.171.0/24\",\n\t\t\t\"178.154.200.0/24\",\n\t\t\t\"178.154.244.0/24\",\n\t\t\t\"178.154.246.0/24\",\n\t\t\t\"95.108.181.0/24\",\n\t\t\t\"95.108.246.252\",\n\t\t\t\"5.45.254.0/24\",\n\t\t\t\"5.255.253.0/24\",\n\t\t\t\"37.140.141.0/24\",\n\t\t\t\"37.140.188.0/24\",\n\t\t\t\"100.43.81.0/24\",\n\t\t\t\"100.43.85.0/24\",\n\t\t\t\"100.43.91.0/24\",\n\t\t\t\"199.21.99.0/24\",\n\t\t\t\"2a02:6b8:b000::/32\",\n\t\t\t\"2a02:6b8:b010::/32\",\n\t\t\t\"2a02:6b8:b011::/32\",\n\t\t\t\"2a02:6b8:c0e::/32\",\n\t\t]\n\n\t\tconst sogou = [\n\t\t\t\"220.181.125.0/24\",\n\t\t\t\"123.126.51.64/27\",\n\t\t\t\"123.126.51.96/28\",\n\t\t\t\"123.126.68.25\",\n\t\t\t\"61.135.189.74\",\n\t\t\t\"61.135.189.75\",\n\t\t]\n\n\t\tconst youdao = [\n\t\t\t\"61.135.249.200/29\",\n\t\t\t\"61.135.249.208/28\",\n\t\t]\n\n\t\tlet customExclusionList = []\n\n\t\t// if wpmDataLayer.general.server2server.ipExcludeList is array\n\t\tif (Array.isArray(wpmDataLayer.general.server2server.ipExcludeList)) {\n\t\t\tcustomExclusionList = wpmDataLayer.general.server2server.ipExcludeList\n\t\t}\n\n\t\treturn blacklist.concat(\n\t\t\tgoogle,\n\t\t\tfacebook,\n\t\t\ttwitter,\n\t\t\tbing,\n\t\t\tpinterest,\n\t\t\thotjar,\n\t\t\talexa,\n\t\t\tamazon,\n\t\t\tbaidu,\n\t\t\tduckduckgo,\n\t\t\tyahoo,\n\t\t\tyandex,\n\t\t\tsogou,\n\t\t\tyoudao,\n\t\t\tcustomExclusionList,\n\t\t)\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/src/BlockTypes/AbstractProductGrid.php#L108\n * https://github.com/woocommerce/woocommerce-blocks/issues/3483\n * https://github.com/woocommerce/woocommerce-blocks/issues/1714\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/docs/third-party-developers/extensibility/hooks/actions.md#woocommerce_add_to_cart\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/docs/internal-developers/blocks/feature-flags-and-experimental-interfaces.md\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/docs/internal-developers/blocks/feature-flags-and-experimental-interfaces.md#usages-of-experimental-prefix\n *\n * experimental__woocommerce_blocks-product-list-render\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/a1a6eb2b574b7d39d19d67bafb747d38017289da/docs/internal-developers/blocks/feature-flags-and-experimental-interfaces.md/#usages-of-experimental-prefix\n */\n\n// TODO experimental__woocommerce_blocks-checkout-set-email-address\n// TODO experimental__woocommerce_blocks-product-view-link > selectItem\n// TODO maybe experimental__woocommerce_blocks-product-list-render, when product list is rendered send some list event\n// TODO maybe experimental__woocommerce_blocks-product-search, if the current event trigger doesn't work\n// TODO experimental__woocommerce_blocks-product-render > viewItem\n// TODO various events during entering checkout details, such as email, address, etc.\n// TODO find a way to keep view_item_list events working with the mutation observer\n\n// import {createHooks, addAction, doAction} from \"@wordpress/hooks\"\n// console.log(wp.hooks)\n// console.log(wp.hooks.applyFilters(\"ndx_change_string\", \"\"))\n\n/**\n * Add-to-cart button\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-add-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-add-item\", data)\n\n\t\t// Works on the all product page\n\t\t// TODO make it work with variable quantities on product page\n\t\twpm.addProductToCart(data.product.id, 1)\n\t},\n)\n\n/**\n * Change cart quantity\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-set-item-quantity\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-set-item-quantity\", data)\n\n\t\tif (data.quantity > data.product.quantity) {\n\t\t\twpm.addProductToCart(data.product.id, data.quantity - data.product.quantity)\n\t\t}\n\n\t\tif (data.quantity < data.product.quantity) {\n\t\t\twpm.removeProductFromCart(data.product.id, data.product.quantity - data.quantity)\n\t\t}\n\t},\n)\n\n/**\n * Remove from cart\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-remove-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-remove-item\", data)\n\t\twpm.removeProductFromCart(data.product.id, data.quantity)\n\t},\n)\n\n/**\n * Start checkout\n */\n\n// wp.hooks.addAction(\n// \t\"experimental__woocommerce_blocks-checkout-render-checkout-form\",\n// \t\"pixel-manager-for-woocommerce\",\n// \tdata => {\n// \t\tconsole.log(\"experimental__woocommerce_blocks-checkout-render-checkout-form\", data)\n// \t\tjQuery(document).trigger(\"wpmBeginCheckout\")\n// \t},\n// )\n\n/**\n * Checkout form submit\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-checkout-submit\",\n\t\"pixel-manager-for-woocommerce\",\n\t() => {\n\t\t// console.log(\"experimental__woocommerce_blocks-checkout-submit\")\n\t\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n\t},\n)\n\n\n/**\n * Only outputs an object with products. No other data or actions.\n */\n// wp.hooks.addAction(\n// \t\"experimental__woocommerce_blocks-product-list-render\",\n// \t\"pixel-manager-for-woocommerce\",\n// \t(value) => {\n//\n// \t\tif (value.products.length > 0) {\n// \t\t\tconsole.log(\"hello world 1\")\n// \t\t\tconsole.log(value)\n//\n// \t\t\tjQuery(\".add_to_cart_button\").on(\"click\", function (event) {\n//\n// \t\t\t\tconsole.log(jQuery(event.target.parentElement.parentElement))\n//\n// \t\t\t\t// console.log(\"hello world 5\");\n// \t\t\t\t//\n// \t\t\t\t// console.log(jQuery(this.parentElement.parentElement));\n// \t\t\t\t//\n// \t\t\t\t// console.log(\"hello world 6\");\n// \t\t\t\t//\n// \t\t\t\t// // element is part of a React component.\n// \t\t\t\t// // Get the parent element.\n// \t\t\t\t// const pe = event.target.parentElement.parentElement\n// \t\t\t\t// console.log(jQuery(pe)._reactInternalFiber.key)\n// \t\t\t\t//\n// \t\t\t\t// // pe is a react component. Get the key of that component.\n// \t\t\t\t// const key = pe.getAttribute(\"data-key\")\n// \t\t\t\t// console.log(key)\n//\n//\n// \t\t\t\t// console.log(element.currentTarget.dataset.key)\n// \t\t\t})\n// \t\t}\n// \t\treturn value\n// \t},\n// )\n\n// jQuery(document).on(\"pmw:ready\", () => {\n// \tjQuery(\".add_to_cart_button\").on(\"click\", function (element) {\n//\n// \t\tconsole.log(\"hello world 3\")\n// \t\t// element is part of a React component.\n// \t\t// Get the key of that component.\n// \t\tconsole.log(element.currentTarget.dataset.key)\n// \t})\n// })\n\n// wp.hooks.addAction(\n// \t'woocommerce_add_to_cart',\n// \t'pixel-manager-for-woocommerce',\n// \t( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data ) => {\n// \t\tconsole.log( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data );\n// \t},\n// \t()=>{\n// \t\tconsole.log(\"hello world 2\")\n// \t}\n// )\n\n/**\n * Product Search\n *\n * TODO: Make sure that it doesn't duplicate the event\n */\n// wp.hooks.addAction(\n// \t\"experimental__woocommerce_blocks-product-search\",\n// \t\"pixel-manager-for-woocommerce\",\n// \tdata => {\n// \t\t// console.log(\"experimental__woocommerce_blocks-product-search\", data)\n// \t\tjQuery(document).trigger(\"pmwEvent:Search\", data.searchTerm)\n// \t},\n// )\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Run PMW main loader\n */\n\nconst main = async () => {\n\n\trequire(\"./wpm/functions_main\")\n\trequire(\"./version.js\")\n\n\t// Wait until jQuery is loaded\n\tawait wpm.jQueryExists()\n\n\t// Wait until wpmDataLayer is loaded\n\tawait wpm.wpmDataLayerFullyLoaded()\n\n\t// wait 1000ms\n\t// await new Promise(resolve => setTimeout(resolve, 1000))\n\n\t// Load all essential scripts first\n\trequire(\"./wpm/functions_loader\")\n\n\t// Load all event listeners that depend on document ready\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\t// Load remaining event listeners\n\trequire(\"./wpm/event_listeners\")\n\n\twpm.loadWcHooksFunctions()\n\n\t// Output PMW console message\n\twpm.pmwConsoleMessage()\n\n\t// Check if domain is excluded from tracking\n\t// If so, return\n\tif (wpm.excludeDomainFromTracking()) return\n\n\t// Load free pixels\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t// #if process.env.TIER === 'premium'\n\t/**\n\t * Load all premium scripts\n\t */\n\tif (wpm.canLoadPremiumFeatures()) {\n\t\trequire(\"./wpm/event_listeners_premium\")\n\t\trequire(\"./adroll/loader\")\n\t\trequire(\"./linkedin/loader\")\n\t\trequire(\"./microsoft-ads/loader\")\n\t\trequire(\"./outbrain/loader\")\n\t\trequire(\"./pinterest/loader\")\n\t\trequire(\"./snapchat/loader\")\n\t\trequire(\"./taboola/loader\")\n\t\trequire(\"./tiktok/loader\")\n\t\trequire(\"./twitter/loader\")\n\t\trequire(\"./reddit/loader\")\n\t\trequire(\"./vwo/loader\")\n\t}\n\t// #endif\n\n\t// Preload pixels\n\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\n\t// Trigger wpmLoad event\n\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\n\t// Wait until page is loaded\n\tawait wpm.pageLoaded()\n\twpm.triggerDomReadyEvent()\n\n\t// Check if the library version matches the PMW version that's installed on the server\n\twpm.checkLibraryVersion()\n\n}\n\nmain()\n\n\n\n\n\n\n\n\n"],"names":["IPv4","require","exports","IPv6","util","util_1","isInSubnet","address","subnetOrSubnets","createChecker","Array","isArray","subnetsByVersion","reduce","acc","subnet","ip","split","isIP","push","length","Error","check4","check6","isIPv6","isIPv4MappedAddress","extractMappedIpv4","Object","enumerable","get","isIPv4","isPrivate","isLocalhost","isReserved","isSpecial","localhost","ipv4","ipv6","private","reserved","ipRange_1","ipv4ToLong","octets","parseInt","checks_1","map","createLongChecker","addressLong","some","check","_a","subnetAddress","prefixLengthString","prefixLength","Number","isInteger","subnetLong","specialNetsCache","default","__spreadArrays","dot","mappedIpv4","colon","doubleColon","getIpv6Segments","test","matches","match","prefix","parts","x","toString","mappedIpv4ToIpv6","beforeChunk","afterChunk","beforeParts","afterParts","missingSegments","concat","createSegmentChecker","segments","subnetSegments","addressSegments","i","bitCount","Math","min","Boolean","v4Seg","v4Str","IPv4Reg","RegExp","v6Seg","IPv6Reg","s","expandIPv6","ipaddr","ipv4Part","ipv4Regexes","ipv6Part","ipv6Regexes","matchCIDR","zoneIndex","module","this","first","second","partSize","cidrBits","part","shift","subnetMatch","rangeList","defaultName","k","len","rangeName","rangeSubnets","kind","apply","octet","prototype","join","toNormalizedString","toByteArray","slice","other","cidrRange","ref","SpecialRanges","unspecified","broadcast","multicast","linkLocal","loopback","carrierGradeNat","range","toIPv4MappedAddress","parse","prefixLengthFromSubnetMask","cidr","stop","zeros","zerotable","fourOctet","longValue","parser","string","parseIntAuto","value","results","reverse","zoneId","l","replace","toRFC5952String","bestMatchIndex","bestMatchLength","regex","exec","index","substring","bytes","addr","suffix","call","toFixedLengthString","padStart","uniqueLocal","ipv4Mapped","rfc6145","rfc6052","teredo","toIPv4Address","high","low","transitional","colonCount","lastColon","replacement","replacementCount","indexOf","lastIndexOf","substr","isValid","error1","isValidFourPartDecimal","parseCIDR","maskLength","parsed","defineProperty","subnetMaskFromPrefixLength","filledOctetCount","j","floor","pow","broadcastAddressFromCIDR","ipInterfaceOctets","subnetMaskOctets","networkAddressFromCIDR","fromByteArray","process","commonjsGlobal","normalize","a","_validate","nh","toLowerCase","sections","n","h","ns","hs","undefined","_leftPad","abbreviate","zPreviousFlag","zeroStartIndex","zeroLength","zStartIndex","zLength","section","zFlag","splice","d","p","padding","repeat","_bin2hex","bin","_addr2bin","binAddr","_bin2addr","binPart","hexSection","divideSubnet","mask0","mask1","limit","abbr","ret","binNetPart","binHostPart","numSubnets","binSubnet","hexAddr","binStartAddr","binEndAddr","start","end","size","randomSubnet","random","ptr","mask","version","err","isV4","isV6","isRange","inRange","check_range","ip6","range_data","parse_addr","parse_range","storeIP","displayIP","jQuery","document","on","wpmDataLayer","pixels","adroll","advertiser_id","pixel_id","loaded","wpm","canIFire","load_adroll_pixel","data","keywords","getSearchTermFromUrl","window","track","consoleLog","e","console","error","shop","page_type","event","product","arguments","product_id","dyn_r_ids","dynamic_remarketing","id_type","currency","products","quantity","price","order_id","order","id","conversion_value","marketing","adroll_purchase_items","$","adroll_adv_id","adroll_pix_id","adroll_version","w","o","__adroll_loaded","f","roundtripUrl","createElement","getElementsByTagName","async","src","parentNode","insertBefore","orderItems","values","items","forEach","item","orderItem","general","variationsOutput","variation_id","String","canLoadPremiumFeatures","facebook","doesUrlContainPatterns","exclusion_patterns","loadFacebookPixel","payload","fbq","custom_data","eventID","event_id","setFbUserData","fbUserData","fbeventsJsUrl","searchParams","URLSearchParams","location","search","has","fbevents_js_url","b","v","t","callMethod","queue","_fbq","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","mobile_bridge_app_id","user","raw","external_id","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","last_name","ln","billing_last_name","phone","ph","billing_phone","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","retrieveData","client_ip_address","fbGetProductDataForCapiEvent","content_type","content_name","name","content_ids","parseFloat","facebookContentIds","prodIds","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","href","fbGetContentIdsFromCart","key","cart","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","getGoogleAdsConversionIdentifiersWithLabel","getGoogleAdsRegularOrderItems","transaction_id","number","new_customer","ltv","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","conversionIdentifiers","entries","_ref","keys","analytics","eec","ga4","measurement_id","ga4GetFullProductItemData","item_list_name","list_name","item_list_id","list_id","getCartValue","getCartItemsGa4","cartValue","toFixed","search_term","mp_active","affiliation","total","tax","shipping","coupon","getGA4OrderItems","scrollEvent","threshold","phoneNumber","target","clicked_phone_number","log","getEmailFromTarget","clicked_email","page_load_time_tracking","timeToLoad","performance","now","page_load_time_seconds","item_name","item_category","category","item_id","item_variant","variant_name","item_brand","brand","ga4AddFormattedCategories","item_data","categories","from","Set","max","ga4GetBasicProductItemData","variant","ga4AddListNameToProduct","productPosition","position","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","is_active","getConsentValues","mode","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","ad_user_data","ad_personalization","fireGtagGoogleAds","enhanced_conversions","active","phone_conversion_label","phone_conversion_number","enhanced_conversion_data","fireGtagGoogleAnalyticsGA4","parameters","debug_mode","isGoogleActive","universal","property_id","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","tcf_support","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","consoleError","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","r","hj","q","_hjSettings","hjid","hjsv","appendChild","linkedin","partner_id","load_linkedin_pixel","conversion_ids","conversion_id","lintrk","view_content","add_to_list","add_to_cart","start_checkout","purchase","_linkedin_partner_id","_linkedin_data_partner_ids","bing","uet_tag_id","load_bing_pixel","ecomm_pagetype","ecomm_prodid","uetq","getBingDataLayerProducts","ecomm_query","bing_purchase_ecomm_prodids","revenue_value","bing_purchase_items","u","ti","UET","onload","onreadystatechange","readyState","productIds","outbrain","loadOutbrainPixel","obApi","event_names","orderValue","orderId","outbrainId","_window","_document","OB_ADV_ID","toArray","object","marketerId","api","dispatch","tag","pinterest","loadPinterestPixel","line_items","getPinterestProductData","pintrk","urlParams","search_query","order_quantity","pinterestFormattedOrderItems","isVariation","product_name","product_variant_id","parentId_dyn_r_ids","product_category","product_variant","product_price","product_quantity","product_brand","pinterestLoadEvent","userLoggedIn","sha256","getPinterestUserDataFromBrowser","trackingPermitted","urlHasParameter","isValidEpikCookie","getUrlParameter","click_id","isValidDerivedEpikCookie","cookie","pinterestGetProductDataForCapiEvent","num_items","contents","item_price","getPinterestS2SBaseData","action_source","event_time","round","getRandomEventId","reddit","loadRedditPixel","itemCount","rdt","transactionId","getRedditAdvertiserId","redditInitEvent","optOut","useDecimalCurrencyValues","externalId","sendEvent","callQueue","snapchat","loadSnapchatPixel","item_ids","snaptr","getSnapchatOrderItemIds","snapchatGetEmail","userInfo","user_hashed_email","handleRequest","contentIds","taboola","account_id","loadTaboolaPixel","notify","_tfa","revenue","add_to_wishlist","orderid","taboolaId","getElementById","handleTikTokEvent","tiktok","ttq","properties","loadTikTokPixel","bind","TiktokAnalyticsObject","methods","setAndDefer","instance","_i","load","_u","_t","_o","page","e164","identity","sha256_email","sha256_phone_number","identify","getTikTokOrderItemIds","content_id","getTikTokUserDataFromBrowser","isValidTtp","ttp","isValidTtclid","ad","url","referrer","startsWith","user_agent","ttclid","tiktokGetPropertiesFromCart","content","twitter","loadTwitterPixel","event_ids","content_price","twq","productData","initiate_checkout","search_string","twitterGetOrderContentIdsV2","twitterGetOrderContentIdsV1","exe","getLibraryVersion","checkLibraryVersion","vwo","loadVwoPixel","VWO","vwo_settings","_vwo_code","settings_tolerance","library_tolerance","use_existing_jquery","is_spa","hide_element","hide_element_style","vwoCodeEl","querySelector","code","finish","removeChild","finished","fetchPriority","onerror","getVersion","getMatchedCookies","getCombinationCookie","decodeURIComponent","init","URL","settings_timer","setAttribute","nonce","styleSheet","cssText","createTextNode","encodeURIComponent","_vwo_settings_timer","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","explicitConsent","JSON","visitorHasChosen","decodeURI","getCookieThatContainsRegex","action","consents","statistics","getComplianzCookies","cmplz_statistics","cmplz_marketing","getCookieYesCookies","advertisement","checkCookie","cookieNames","cookieValue","analyticsCookie","adsCookie","thirdparty","advanced","getIubendaCookieInfo","purposes","localStorage","getItem","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","groupsObject","group","groupArray","getTermlyCookies","termlyConsent","doesACookieForTheRealCookieBannerExist","waitForLibrary","consentApi","service","cookies","consent","consentSync","cookieOptIn","trim","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","cookie_consent_mgmt","explicit_consent","scriptTagObserver","MutationObserver","mutations","_ref2","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","updatePixelConsentForPixelTypeCMPs","updateGoogleConsentMode","Cookiebot","changedConsentCategory","detail","cmplzStatusChange","cmplzConsentData","huObserver","_ref3","hu","documentElement","body","consentRevokeAll","OneTrust","reload","advertising","duration","consentSetCookie","setCookie","stringify","triggerPmwCookieConsentManagementLoaded","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonSelectors","prepareSelectors","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","initCart","getAddToCartLinkProductIds","getProductsFromBackend","referrerHostname","hostname","host","storeData","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","context","sendEventPayloadToServer","query","startIntersectionObserverToWatch","startProductsMutationObserverToWatch","addToCartSelectors","dataset","addProductToCart","each","find","classes","getPostIdFromString","one","closest","origin","nextAll","getIdBasedOndVariationsOutputSetting","getProductDetailsFormattedForEvent","isEmail","emailSelected","getProductIdByCartItemElement","getProductQuantityByCartItemElement","getCartItemsFromBackend","variation","triggerViewItemEventPrep","getAcrOrderDetails","deleteCookie","scrollTrackingThresholds","scrollVisibilityThreshold","scrollVisibilityThresholdStatus","obj","scrollPosition","scrollTop","height","direction","positionUnit","wpmRestSettings","isBelowRestErrorThreshold","isRestEndpointAvailable","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","isWpmRestEndpointAvailable","orderKey","source","orderIds","storeOrderIdOnServer","orderDeduplication","quantityToRemove","storeCartData","parentId","selectors","doesWooCommerceCartExist","retrieveCartData","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","pageType","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","unobserve","timeout","clearTimeout","ioid","detectedProductTemplateClasses","nested","flat","isNestedClass","elem","className","isFlatClass","prev","hasClass","getAllElementsToWatch","getCommonIdentifiersToWatch","listOfClassNames","haveSameNestingDepth","element1","element2","parents","findCommonParentElement","parent","is","countOfChildren","getCommonClass","classes1","classes2","wpmProductIds","querySelectorAll","productsNode","commonClass","children","firstProductTemplateClasses","IntersectionObserver","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","expiryDays","setTime","getTime","expires","toUTCString","ca","c","charAt","persistent","extension","dataGetter","getPersistentData","getSessionData","dataSetter","setPersistentData","setSessionData","getSessionDataKey","defaultStorageKey","getPersistentDataKey","storageKeySuffix","sessionStorage","setItem","orderDetails","order_key","responseJson","cartItemKey","cartItemKeys","list_position","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","clientWidth","innerWidth","clientHeight","innerHeight","consoleLogVersion","options","dataType","ajax","getOrderItemPrice","total_tax","loginEventFired","pageLoaded","waitForVar","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Uint8Array","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","pmwConsoleMessage","message","pro","distro","eligibleForUpdates","jQueryReadyFired","triggerDomReadyEvent","sendEventPayloadToServerPremium","isLoggerEnabled","logger","_len","objects","_key","_len2","_key2","jQueryExists","waitForjQuery","library","interval","wpmDataLayerFullyLoaded","checkVar","logTimeoutId","wpHooksExists","wp","hooks","loadWcHooksFunctions","isServerToServerDisabled","server2server","isIpNotAllowed","capi","getIp","isWcSessionActive","storeIpv6InServerSession","blob","Blob","sendBeacon","credentials","catch","sendPayloadUsingFetch","acrOrderDetails","getIpVersion","ipServices","isIpAllowed","isOnBlacklist","ipVersion","maxServicesToCheck","validVersions","ipv","getIpFromAnyService","ipServicesFiltered","promises","getIpFromService","any","timeTaken","serviceResponseData","text","pair","ipName","getBlacklist","isCidr","customExclusionList","ipExcludeList","addAction","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","g","globalThis","Function","prop","hasOwnProperty","Symbol","toStringTag","main"],"sourceRoot":""}