{"version":3,"file":"wpm-public__premium_only.p1.min.js","mappings":"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BACA,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,kBACA,kBACA,kBACA,kBACA,kBACA,oBACA,kBACA,kBACA,iBACA,kBACA,iBACA,mBACA,qBACA,iBACA,kBACA,mBACA,mBACA,mBACA,mBACA,cACA,eACA,iBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,kBACA,iBACA,gBACA,iBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,qBACA,qBACA,qBACA,qBAGa,CACb,mBACA,mBACA,mBACA,gBACA,gBACA,iBAGc,CACd,oBACA,qBAyBAihC,EACA,CAGF,CAxnCA,CAwnCCv0B,OAAOH,IAAMG,OAAOH,KAAO,CAAC,EAAGT,O,WCjmCjCm0B,GAAGC,MAAMiB,UACR,iDACA,iCACA7zB,IAKCf,IAAIinB,iBAAiBlmB,EAAKF,QAAQa,GAAI,EAAE,IAO1CgyB,GAAGC,MAAMiB,UACR,0DACA,iCACA7zB,IAGKA,EAAKO,SAAWP,EAAKF,QAAQS,UAChCtB,IAAIinB,iBAAiBlmB,EAAKF,QAAQa,GAAIX,EAAKO,SAAWP,EAAKF,QAAQS,UAGhEP,EAAKO,SAAWP,EAAKF,QAAQS,UAChCtB,IAAIilB,sBAAsBlkB,EAAKF,QAAQa,GAAIX,EAAKF,QAAQS,SAAWP,EAAKO,SACzE,IAOFoyB,GAAGC,MAAMiB,UACR,oDACA,iCACA7zB,IAECf,IAAIilB,sBAAsBlkB,EAAKF,QAAQa,GAAIX,EAAKO,SAAS,IAO3DoyB,GAAGC,MAAMiB,UACR,mDACA,iCACA,KAECr1B,OAAOC,UAAUwJ,QAAQ,gBAAiB,CAAC,EAAE,G,GC7E3C6rB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB/4B,IAAjBg5B,EACH,OAAOA,EAAanmC,QAGrB,IAAIqG,EAAS2/B,EAAyBE,GAAY,CAGjDlmC,QAAS,CAAC,GAOX,OAHAomC,EAAoBF,GAAU/7B,KAAK9D,EAAOrG,QAASqG,EAAQA,EAAOrG,QAASimC,GAGpE5/B,EAAOrG,OACf,CCrBAimC,EAAoBn4B,EAAI,CAAC9N,EAASqmC,KACjC,IAAI,IAAI5rB,KAAO4rB,EACXJ,EAAoB3yB,EAAE+yB,EAAY5rB,KAASwrB,EAAoB3yB,EAAEtT,EAASya,IAC5EhZ,OAAOmK,eAAe5L,EAASya,EAAK,CAAE/Y,YAAY,EAAMC,IAAK0kC,EAAW5rB,IAE1E,ECNDwrB,EAAoBK,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOjgC,MAAQ,IAAIkgC,SAAS,cAAb,EAChB,CAAE,MAAO90B,GACR,GAAsB,iBAAXJ,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxB20B,EAAoB3yB,EAAI,CAACsmB,EAAK6M,IAAUhlC,OAAO8F,UAAUm/B,eAAev8B,KAAKyvB,EAAK6M,GCClFR,EAAoBrjB,EAAK5iB,IACH,oBAAX2mC,QAA0BA,OAAOC,aAC1CnlC,OAAOmK,eAAe5L,EAAS2mC,OAAOC,YAAa,CAAEz9B,MAAO,WAE7D1H,OAAOmK,eAAe5L,EAAS,aAAc,CAAEmJ,OAAO,GAAO,ECFjDyK,WAEZ7T,EAAQ,YAGFoR,IAAIkzB,qBAGJlzB,IAAIszB,0BAMV1kC,EAAQ,MAGR2Q,OAAOC,UAAUC,GAAG,aAAa,KAChC7Q,EAAQ,KAAiC,IAI1CA,EAAQ,MAERoR,IAAI4zB,uBAGJ5zB,IAAI2yB,oBAIA3yB,IAAIuyB,8BAGR3jC,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MAMJoR,IAAIuD,2BACP3U,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,KACRA,EAAQ,IACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,MACRA,EAAQ,KACRA,EAAQ,MACRA,EAAQ,OAKT4Q,SAAS4jB,cAAc,IAAIC,MAAM,qBAGjC7jB,SAAS4jB,cAAc,IAAIC,MAAM,kBAG3BrjB,IAAIsxB,aACVtxB,IAAIizB,uBAAsB,EAG3ByC,E","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/event_listeners_premium.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/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 2023 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\twindow.adroll.track(\"productSearch\", {\n\t\t\tkeywords: wpm.getSearchTermFromUrl(),\n\t\t\t// \"products\": [...]\n\t\t})\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} 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} 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\twindow.adroll.track(\"addToCart\", {\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} 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\twindow.adroll.track(\"purchase\", {\n\t\t\torder_id : wpmDataLayer.order.id,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tconversion_value: wpmDataLayer.order.value_filtered,\n\t\t\tproducts : wpm.adroll_purchase_items(),\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2023 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} 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} 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} 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} 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} 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} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Copyright 2023 SweetCode. All rights reserved.\n *\n * All event listeners\n * */\n\njQuery(document).on(\"wpmFbCapiEvent\", function (event, eventData) {\n\n\ttry {\n\t\tif (!wpmDataLayer.pixels.facebook.capi) return\n\n\t\t// Send data to pmw public API with fetch API\n\t\t// fetch(wpm.root + \"pmw/v1/facebook/capi/event/\", {\n\t\t// \tmethod : \"POST\",\n\t\t// \tcredentials: \"same-origin\",\n\t\t// \theaders : {\n\t\t// \t\t\"Content-Type\": \"application/json\",\n\t\t// \t},\n\t\t// \tbody : JSON.stringify(eventData),\n\t\t// \tkeepalive : true,\t// keep connection alive until request is finished\n\t\t// })\n\t\t// \t.then(response => response.json())\n\t\t// \t.then(message => {\n\t\t// \t\tif (!message.success) {\n\t\t// \t\t\tconsole.error(message)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.catch(error => {\n\t\t// \t\tconsole.error(error)\n\t\t// \t})\n\n\t\t// https://css-tricks.com/send-an-http-request-on-page-exit/\n\t\tconst blob = new Blob([JSON.stringify(eventData)], {type: \"application/json; charset=UTF-8\"})\n\t\tnavigator.sendBeacon(wpm.root + \"pmw/v1/facebook/capi/event/\", blob)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\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\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 2023 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})\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})\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})\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})\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})\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_filtered,\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})\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_filtered,\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?.clv_order_value_filtered) {\n\t\t\tdata.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\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})\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 = function () {\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\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\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\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 2023 SweetCode. All rights reserved.\n *\n * Load GA4 premium 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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_item_list\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t\t\titem_list_name: wpmDataLayer.shop.list_name, // doesn't make sense on mini_cart\n\t\t\t\titem_list_id : wpmDataLayer.shop.list_id, // doesn't make sense on mini_cart\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// 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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"select_item\", {\n\t\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\titems : [wpm.ga4GetFullProductItemData(product)],\n\t\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"add_to_cart\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\t// value: 0,\n\t\t\t\titems: [wpm.ga4GetFullProductItemData(product)],\n\t\t\t})\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})\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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"add_to_wishlist\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\t// value: 0,\n\t\t\t\titems: [wpm.ga4GetFullProductItemData(product)],\n\t\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"remove_from_cart\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\t// value: 0,\n\t\t\t\titems: [wpm.ga4GetFullProductItemData(product)],\n\t\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"begin_checkout\", {\n\t\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\t// coupon: \"\",\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\t// value: 0,\n\t\t\t\titems: wpm.getCartItemsGa4(),\n\t\t\t})\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\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_cart\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\tcurrency: wpmDataLayer.shop.currency,\n\t\t\t\tvalue : cartValue.toFixed(2),\n\t\t\t\titems : products,\n\t\t\t})\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 (!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\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"view_search_results\", {\n\t\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t\tsearch_term: wpm.getSearchTermFromUrl(),\n\t\t\t\titems : products,\n\t\t\t})\n\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\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\n\t\twpm.gtagLoaded().then(() => {\n\t\t\tgtag(\"event\", \"login\", {\n\t\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"scroll\", {\n\t\t\tsend_to: wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tvalue : scrollEvent.threshold,\n\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"phone_number_click\", {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tclicked_phone_number: phoneNumber,\n\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"email_click\", {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tclicked_email: wpm.getEmailFromTarget(event.target),\n\t\t})\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\twpm.gtagLoaded().then(() => {\n\t\tgtag(\"event\", \"page_load_time\", {\n\t\t\tsend_to : wpmDataLayer.pixels.google.analytics.ga4.measurement_id,\n\t\t\tpage_load_time_seconds: timeToLoad,\n\t\t})\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 2023 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\n// require(\"./ga3/loader\")\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 2023 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?.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) google_consent_settings.ad_storage = \"granted\"\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}\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\twpm.fireGtagGoogleAnalyticsUA = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.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// 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?.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\"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// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \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.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\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?.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) return reject()\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 2023 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 2023 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\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.search,\n\t\t})\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\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.view_content,\n\t\t})\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\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.add_to_list,\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 (!wpmDataLayer?.pixels?.linkedin?.loaded) return\n\t\tif (!wpmDataLayer?.pixels?.linkedin?.conversion_ids?.add_to_cart) return\n\n\t\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.add_to_cart,\n\t\t})\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\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.start_checkout,\n\t\t})\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\twindow.lintrk(\"track\", {\n\t\t\tconversion_id: wpmDataLayer.pixels.linkedin.conversion_ids.purchase,\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2023 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 2023 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\twindow.uetq.push(\"event\", \"add_to_cart\", {\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\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} 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} 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} 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 * */\n// view category event\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} 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\twindow.uetq.push(\"event\", \"purchase\", {\n\t\t\tecomm_pagetype: \"purchase\",\n\t\t\tecomm_prodid : wpm.bing_purchase_ecomm_prodids(),\n\t\t\trevenue_value : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\titems : wpm.bing_purchase_items(),\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2023 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 2023 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\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} 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} 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} 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\tobApi(\"track\", wpmDataLayer.pixels.outbrain.event_names.purchase, {\n\t\t\torderValue: String(wpmDataLayer.order.value_filtered),\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\torderId : String(wpmDataLayer.order.id),\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2023 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 2023 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\t// keep \"addtocart\" as this is the official browser event name\n\t\tpintrk(\"track\", \"addtocart\", {\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} 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} 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\tpintrk(\"track\", \"search\", {\n\t\t\tevent_id : payload.pinterest.event_id,\n\t\t\tsearch_query: urlParams.get(\"s\"),\n\t\t})\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\tpintrk(\"track\", \"viewcategory\", {\n\t\t\tevent_id: payload.pinterest.event_id,\n\t\t})\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\tpintrk(\"track\", \"checkout\", {\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\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} 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 2023 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 2023 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} 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} 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} 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} 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_filtered,\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} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2023 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 2023 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\tsnaptr(\"track\", \"ADD_CART\", {\n\t\t\titem_ids: [product.dyn_r_ids[wpmDataLayer.pixels.snapchat.dynamic_remarketing.id_type]],\n\t\t})\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} 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\tsnaptr(\"track\", \"PURCHASE\", {\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tprice : wpmDataLayer.order.value_filtered,\n\t\t\ttransaction_id: wpmDataLayer.order.id,\n\t\t\titem_ids : wpm.getSnapchatOrderItemIds(),\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2023 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 2023 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\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\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\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\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\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_filtered,\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\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2023 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 2023 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\n// AddToCart event\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// InitiateCheckout event\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// ViewContent event\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// AddToWishlist event\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// search event\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n\n})\n\n// PlaceAnOrder event\n// https://ads.tiktok.com/help/article/standard-events-parameters\njQuery(document).on(\"wpmClientPlaceOrder\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n\n})\n\n// view order received page event\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.tiktok?.loaded) return\n\n\t\tttq.track(\n\t\t\tpayload.tiktok.event,\n\t\t\tpayload.tiktok.properties,\n\t\t\t{event_id: payload.tiktok.event_id},\n\t\t)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Copyright 2023 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.getCookie(\"wpmReferrer\")) {\n\t\t\tdata.page.referrer = wpm.getCookie(\"wpmReferrer\")\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 2023 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\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.add_to_cart, {\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} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"AddToCart\")\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} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"ViewContent\")\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} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"AddToWishlist\")\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} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"InitiateCheckout\")\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\t\t\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.search, {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t})\n\t\t} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"Search\")\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\ttwq(\"event\", wpmDataLayer.pixels.twitter.event_ids.purchase, {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\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} else {\n\t\t\t// Legacy event\n\t\t\ttwq(\"track\", \"Purchase\", {\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_filtered,\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\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n","/**\n * Copyright 2023 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","/**\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\twindow.VWO.push([\n\t\t\t'track.revenueConversion',\n\t\t\twpmDataLayer.order.value_regular,\n\t\t]);\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 */\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\tconsole.log(\"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\tconsole.error(\"Pixel Manager for WooCommerce: 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?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: 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\tconsole.log(\"Pixel Manager for WooCommerce: 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.shop.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?.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\tconsole.log(\"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\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\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"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\tconsole.log(\"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.shop.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})\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// console.log(\"checkoutButtonSelectors\", checkoutButtonSelectors)\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonSelectors, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\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\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\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// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\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\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\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\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.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\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * Begin checkout event\n */\njQuery(document).on(\"wpmBeginCheckout\", () => {\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * Add to wishlist event\n */\njQuery(document).on(\"wpmAddToWishlist\", (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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * View Item event\n */\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * View category event\n */\njQuery(document).on(\"wpmCategory\", (event, product = null) => {\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * Search event\n */\njQuery(document).on(\"pmwEvent:Search\", () => {\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * Place order event\n */\njQuery(document).on(\"wpmPlaceOrder\", () => {\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\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\n/**\n * Order received event\n */\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\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_filtered,\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_filtered,\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\n\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 behaviour 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 2023 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\t// console.log(\"ACR 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\t// console.log(\"ACR cookie found\")\n\n\t\t// Return if window.sessionStorage is not supported\n\t\tif (!window.sessionStorage) return\n\n\t\t// console.log(\"window.sessionStorage available\")\n\n\t\t// Return if the check has already run in the current session\n\t\tif (window.sessionStorage.getItem(\"_pmw_acr_attempted\")) return\n\n\t\t// console.log(\"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\tconsole.error(\"ACR order details not retrieved\")\n\t\t\treturn\n\t\t}\n\n\t\t// console.log(\"ACR order details retrieved\")\n\n\t\t// console.log(\"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\tif (window.sessionStorage) window.sessionStorage.setItem(\"_pmw_acr_attempted\", JSON.stringify(true))\n\t\tconsole.error(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: \"_pmw_endpoint_available\",\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\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet 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\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, orderKey, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\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\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\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\tlet 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\n\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t} else {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\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\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(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.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\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\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(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\tconsole.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\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\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\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\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\tconsole.log(\"Pixel Manager for WooCommerce: 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\tconsole.log(\"Pixel Manager for WooCommerce: \" + responseJson.data)\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Pixel Manager for WooCommerce error: \", 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.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\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.version = () => {\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.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(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\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\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 for WooCommerce: 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\tjQuery(document).on(\"ready\", () => {\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\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 2023 SweetCode. All rights reserved.\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.sendEventPayloadToServer = 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\tif (!message.success) {\n\t\t\t\t\t\tconsole.error(message)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t})\n\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\tnavigator.sendBeacon(wpm.root + \"pmw/v1/sse/\", data)\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 blacklisted, do not send data\n\t\t\tif (await wpm.ipCheck() === false) return\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) { // Send 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\t// console.log(message)\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror : message => {\n\t\t\t\t\t\t\tconsole.error(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\tconsole.log(\"ACR order details retrieved successfully\")\n\t\t} else {\n\t\t\tconsole.error(\"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 Check\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.ipCheck = async () => {\n\n\t\t// Check the cache if the IP is valid\n\t\tif (window.sessionStorage && sessionStorage.getItem(\"pmw_ip_valid\")) {\n\t\t\treturn !!JSON.parse(sessionStorage.getItem(\"pmw_ip_valid\"))\n\t\t}\n\n\t\t// Cloudflare takes approx. 70ms to respond\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\tif (isOnBlacklist(data.ip)) {\n\t\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\n\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(true))\n\t\treturn true\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\tconsole.error(e)\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\n\t\tconst {isRange} = require(\"range_check\")\n\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 * 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 * 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","// 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 */\nconst main = async () => {\n\n\trequire(\"./wpm/functions_main\")\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\nmain()\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","window","track","keywords","getSearchTermFromUrl","e","console","error","shop","page_type","event","product","arguments","data","product_id","dyn_r_ids","dynamic_remarketing","id_type","currency","products","quantity","price","order_id","order","id","conversion_value","value_filtered","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","eventData","capi","blob","Blob","JSON","stringify","type","navigator","sendBeacon","root","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","userAgent","client_user_agent","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","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","conversionIdentifiers","entries","_ref","keys","analytics","ga4","measurement_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGA4OrderItems","eec","ga4GetFullProductItemData","item_list_name","list_name","item_list_id","list_id","getCartItemsGa4","cartValue","toFixed","search_term","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","consent_mode","active","getConsentValues","mode","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","universal","property_id","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","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","lintrk","conversion_id","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","uetq","ecomm_pagetype","ecomm_prodid","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","pintrk","line_items","getPinterestProductData","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","snaptr","item_ids","getSnapchatOrderItemIds","snapchatGetEmail","userInfo","user_hashed_email","handleRequest","contentIds","taboola","account_id","loadTaboolaPixel","notify","_tfa","revenue","add_to_wishlist","orderid","taboolaId","getElementById","tiktok","loadTikTokPixel","ttq","properties","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","twq","content_price","productData","initiate_checkout","search_string","twitterGetOrderContentIdsV2","twitterGetOrderContentIdsV1","exe","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","visitorHasChosen","decodeURI","getCookieThatContainsRegex","action","consents","statistics","marketing","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","triggerPmwCookieConsentManagementLoaded","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonSelectors","prepareSelectors","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","getAddToCartLinkProductIds","getProductsFromBackend","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","context","sendEventPayloadToServer","getCartValue","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","setItem","scrollTrackingThresholds","scrollVisibilityThreshold","scrollVisibilityThresholdStatus","obj","scrollPosition","scrollTop","height","direction","positionUnit","wpmDeduper","wpmRestSettings","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","cookieName","response","fetch","method","cache","keepalive","isWpmRestEndpointAvailable","orderKey","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","parentId","selectors","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","ca","c","charAt","getWpmSessionData","setWpmSessionData","orderDetails","order_key","responseJson","cartItemKey","cartItemKeys","list_position","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","clientWidth","innerWidth","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","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","jQueryExists","waitForjQuery","library","interval","wpmDataLayerFullyLoaded","checkVar","logTimeoutId","wpHooksExists","wp","hooks","loadWcHooksFunctions","isServerToServerDisabled","server2server","ipCheck","credentials","catch","sendPayloadUsingFetch","acrOrderDetails","text","pair","isOnBlacklist","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":""}