CINXE.COM
ImmunoSpot® Software | ImmunoSpot®
<!doctype html> <html lang="en"> <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> <script> var LOCALE = 'en\u002DUS'; var BASE_URL = 'https\u003A\u002F\u002Fimmunospot.com\u002F'; var require = { 'baseUrl': 'https\u003A\u002F\u002Fimmunospot.com\u002Fstatic\u002Fversion1728550059\u002Ffrontend\u002FForti\u002Fimmuno\u002Fen_US' };</script> <meta charset="utf-8"/><script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.eu01.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"322539704",accountID:"2918290",trustKey:"2918290",xpid:"Vg8GWVRaCBACUVBWBAgBXl0=",licenseKey:"NRJS-694e2d93d0829b3aaa4",applicationID:"251439689"};;/*! For license information please see nr-loader-spa-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>g,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function g(e,t){if(!e)throw new Error(f);var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.274.0",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{A4:()=>s,OF:()=>d,RI:()=>i,WN:()=>h,bv:()=>o,gm:()=>a,lR:()=>f,m:()=>u,mw:()=>c,sb:()=>l});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s="complete"===a?.document?.readyState,c=Boolean("hidden"===a?.document?.visibilityState),u=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),l=d&&"undefined"==typeof SharedWorker,f=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),h=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=g(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=v()[s[e]];p&&p.push([f,e,r,a]);return a},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>u});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}function c(){return s(16)}function u(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,u="addEventListener",d="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[u,d],"-",p)}function p(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),h(a.gm,f),h(c.prototype,f)),t.on(u+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n}));this.wrapped=e[1]=i}})),t.on(d+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,u);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,Zp:()=>i,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log",a=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>u});var n=r(9908),i=r(1863),o=r(860),a=r(3969),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function u(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>d,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>u,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},u={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},d=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>u,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function u(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>u,Rz:()=>d,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState",l=1e3},3962:(e,t,r)=>{"use strict";r.d(t,{AM:()=>o,O2:()=>s,Qu:()=>c,TZ:()=>a,ih:()=>u,tC:()=>i});var n=r(860);const i=["click","keydown","submit"],o="api",a=n.K7.softNav,s={INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},c={INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},u={IP:"in progress",FIN:"finished",CAN:"cancelled"}},7378:(e,t,r)=>{"use strict";r.d(t,{$p:()=>x,BR:()=>b,Kp:()=>R,L3:()=>y,Lc:()=>c,NC:()=>o,SG:()=>d,TZ:()=>i,U6:()=>p,UT:()=>m,d3:()=>w,dT:()=>f,e5:()=>A,gx:()=>v,l9:()=>l,oW:()=>h,op:()=>g,rw:()=>u,tH:()=>E,uP:()=>s,wW:()=>T,xq:()=>a});var n=r(384);const i=r(860).K7.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",l="remaining",f="interaction",h="spaNode",p="jsonpNode",g="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=(0,n.dV)().o.ST,w="-start",R="-end",x="-body",T="cb"+R,A="jsTime",E="fetch"},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},425:(e,t,r)=>{"use strict";r.d(t,{j:()=>j});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),h=r(384),p=r(6344);const g=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),w=r(3785),R=r(2646),x=r(3434);function T(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,x.YM)(i),a=new R.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function A(){const e=(0,h.pV)();g.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var S=r(9417),N=r(5603),O=r(5284);const _=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let I=!1;function j(e,t={},g,R){let{init:x,info:j,loader_config:P,runtime:C={},exposed:k=!0}=t;C.loaderType=g;const L=(0,h.pV)();j||(x=L.init,j=L.info,P=L.loader_config),(0,S.xN)(e.agentIdentifier,x||{}),(0,N.a)(e.agentIdentifier,P||{}),j.jsAttributes??={},d.bv&&(j.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,j);const H=(0,S.D0)(e.agentIdentifier),D=[j.beacon,j.errorBeacon];I||(H.proxy.assets&&(_(H.proxy.assets),D.push(H.proxy.assets)),H.proxy.beacon&&D.push(H.proxy.beacon),A(),(0,h.US)("activatedFeatures",O.B),e.runSoftNavOverSpa&&=!0===H.soft_navigations.enabled&&H.feature_flags.includes("soft_nav")),C.denyList=[...H.ajax.deny_list||[],...H.ajax.block_internal?D:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const g={};var R=s.ee.get(e),x=R.get("tracer");E[e]=b.g.OFF,R.on(p.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var A="api-",S=A+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(A,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}g.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,R),(0,w.R)(R,e,t,r)},g.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,R),T(R,e,t,{customAttributes:r,level:i})},m.forEach((e=>{g[e]=I(A,e,!0,"api")})),g.addPageAction=I(A,"addPageAction",!0,n.K7.genericEvents),g.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(A,"setPageViewName",!0)()},g.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},g.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},g.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},g.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,R),R.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},g[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,R),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,R)},g[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,R),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,R)},g.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const _=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,R),h||(0,a.p)(S+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,R),function(){if(x.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw x.emit("fn-err",[arguments,this,t],r),t}finally{x.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,R),i&&(0,a.p)(e+t,[(0,v.t)(),...arguments],r?null:this,i,R),r?void 0:this}}function j(){r.e(478).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),R.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{_[e]=I(S,e,void 0,h?n.K7.softNav:n.K7.spa)})),g.setCurrentRouteName=h?I(S,"routeName",void 0,n.K7.softNav):I(A,"routeName",!0,n.K7.spa),g.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,R),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,R)},d.RI?(0,u.GG)((()=>j()),!0):j(),g}(e.agentIdentifier,R,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),I=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({212:"nr-spa-compressor",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.274.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={478:"sha512-1vUqEfJPB8Pihje9mv5CfYgkitO1FWcS+UQb84DbXqP8oYctRv4/lzl/MzNLPlRhcY1WVDBGL20I8vm6s2VV7g==",249:"sha512-Y/BeZAh6VSTmUtUNmS5XdyKxL92s30Fyyj8xVW76HSPxcKItL4+x2+kGMZc8pMJnUpZDz1L4eftZQAJh3D8NnA==",212:"sha512-Gn2tQ3qog5Yhrx/gRutkSTYPp+7nkKFt4/mIXg99LxcNpMDAYJZDBYmAACdoHNM86+iq1F3cBcQotFNzjIX8bw=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={38:0,788:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(425);var l=i(1687),f=i(4234),h=i(5289),p=i(6154),g=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(478).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(478).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(478).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,g.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class w extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var R=i(384);var x=i(9908),T=i(2843),A=i(3878),E=i(782),S=i(1863);class N extends b{static featureName=E.T;constructor(e,t=!0){super(e,E.T,t),p.RI&&((0,T.u)((()=>(0,x.p)("docHidden",[(0,S.t)()],void 0,E.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,x.p)("winPagehide",[(0,S.t)()],void 0,E.T,this.ee))),this.importAggregator(e))}}var O=i(3969);class _ extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),j=i(3304);class P{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,j.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return H(e)?e:new P(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(H(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function L(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new P(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return H(e.error)?e.error:C(e)}function H(e){return e instanceof Error&&!!e.stack}class D extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(e=>{this.abortHandler&&(0,x.p)("ierr",[C(e),(0,S.t)(),!0,{},this.#r],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),p.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,x.p)("err",[k(e),(0,S.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),p.gm.addEventListener("error",(e=>{this.abortHandler&&(0,x.p)("err",[L(e),(0,S.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var M=i(8990);let K=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===p.gm?0:(0,M.I)(e,U,(function(){return K++}))}function G(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,j.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=p.gm.XMLHttpRequest,a=p.gm.MutationObserver,s=p.gm.Promise,c=p.gm.setInterval,u="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=p.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(u,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,d,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(g?g.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var g=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===u||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",J=["arrayBuffer","blob","json","text","formData"],Q=p.gm.Request,ee=p.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(Q&&ee&&p.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,J.forEach((e=>{r(Q[te],e,X),r(ee[te],e,X)})),r(p.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof p.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,j.A)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),ue=["load","error","abort","timeout"],de=ue.length,le=(0,R.dV)().o.REQ,fe=(0,R.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,x.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};p.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};pe(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=R,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){T(t,e)}),(0,A.jT)(!1)),p.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},pe(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,S.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof r.onload)&&"function"==typeof o.end)&&o.end(r)}catch(e){try{t.emit("internal-error",[e])}catch(e){}}};for(var s=0;s<de;s++)r.addEventListener(ue[s],this.listener,(0,A.jT)(!1))}function u(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function d(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,S.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function g(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,S.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,S.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&p.RI&&(t=""+p.gm.location.href):e[0]&&e[0].url?t=e[0].url:p.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function y(e,t){this.params={},this.metrics={},this.startTime=(0,S.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof le?r=i.url:p.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),pe(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function w(e,t){if(this.endTime=(0,S.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,S.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function R(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<de;t++)e.removeEventListener(ue[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,S.t)()-this.startTime,this.loadCazptureCalled||4!==e.readyState?null==t.status&&(t.status=0):T(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function T(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,x.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",u),t.on("xhr-load-added",d),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",g),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",w)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function pe(e,t){var r=(0,ie.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const ge={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!p.RI||ge[t.debugId]++||(ge[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:we,d3:Re,Kp:xe,TZ:Te,Lc:Ae,uP:Ee,Rz:Se}=be;class Ne extends b{static featureName=Te;constructor(e,t=!0){super(e,Te,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Ee,(function(e,t){this.bstStart=(0,S.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,x.p)("bst",[e[0],t,this.bstStart,(0,S.t)()],void 0,a.K7.sessionTrace,r)})),r.on(Se+Re,(function(e){this.time=(0,S.t)(),this.startPath=location.pathname+location.hash})),r.on(Se+xe,(function(e){(0,x.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,x.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:we,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class _e extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,g.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,x.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,g.Aw)(this.agentIdentifier)}#u=!1;async#c(e){if(!this.#u){this.#u=!0;try{const{Recorder:t}=await Promise.all([i.e(478),i.e(249)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3962);class je extends b{static featureName=Ie.TZ;constructor(e,t=!0){if(super(e,Ie.TZ,t),!p.RI||!(0,R.dV)().o.MO)return;const r=ve(this.ee);Ie.tC.forEach((e=>{(0,A.sp)(e,(e=>{a(e)}),!0)}));const n=()=>(0,x.p)("newURL",[(0,S.t)(),""+window.location],void 0,this.featureName,this.ee);r.on("pushState-end",n),r.on("replaceState-end",n);try{this.removeOnAbort=new AbortController}catch(e){}(0,A.sp)("popstate",(e=>(0,x.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)),!0,this.removeOnAbort?.signal);let i=!1;const o=new((0,R.dV)().o.MO)(((e,t)=>{i||(i=!0,requestAnimationFrame((()=>{(0,x.p)("newDom",[(0,S.t)()],void 0,this.featureName,this.ee),i=!1})))})),a=(0,v.s)((e=>{(0,x.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0})}),100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,{domObserver:o})}}var Pe=i(7378);const Ce={},ke=["appendChild","insertBefore","replaceChild"];function Le(e){const t=function(e){return(e||B.ee).get("jsonp")}(e);if(!p.RI||Ce[t.debugId])return t;Ce[t.debugId]=!0;var r=(0,W.YM)(t),n=/[?&](?:callback|cb)=([^&#]+)/,i=/(.*)\.([^.]+)/,o=/^(\w+)(\.|$)(.*)$/;function a(e,t){if(!e)return t;const r=e.match(o),n=r[1];return a(r[3],t[n])}return r.inPlace(Node.prototype,ke,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var o=(s=e.src,c=s.match(n),c?c[1]:null);var s,c;if(!o)return;var u=function(e){var t=e.match(i);if(t&&t.length>=3)return{key:t[2],parent:a(t[1],window)};return{key:e,parent:window}}(o);if("function"!=typeof u.parent[u.key])return;var d={};function l(){t.emit("jsonp-end",[],d),e.removeEventListener("load",l,(0,A.jT)(!1)),e.removeEventListener("error",f,(0,A.jT)(!1))}function f(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",l,(0,A.jT)(!1)),e.removeEventListener("error",f,(0,A.jT)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",l,(0,A.jT)(!1)),e.addEventListener("error",f,(0,A.jT)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}const He={};function De(e){const t=function(e){return(e||B.ee).get("promise")}(e);if(He[t.debugId])return t;He[t.debugId]=!0;var r=t.context,n=(0,W.YM)(t),i=p.gm.Promise;return i&&function(){function e(r){var o=t.context(),a=n(r,"executor-",o,null,!1);const s=Reflect.construct(i,[a],e);return t.context(s).getCtx=function(){return o},s}p.gm.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return i.toString()},Object.setPrototypeOf(e,i),["all","race"].forEach((function(r){const n=i[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=i[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=i.prototype;const o=i.prototype.then;i.prototype.then=function(...e){var i=this,a=r(i);a.promise=i,e[0]=n(e[0],"cb-",a,null,!1),e[1]=n(e[1],"cb-",a,null,!1);const s=o.apply(this,e);return a.nextPromise=s,t.emit("propagate",[i,!0],s,!1,!1),s},i.prototype.then[W.Jt]=o,t.on("executor-start",(function(e){e[0]=n(e[0],"resolve-",this,null,!1),e[1]=n(e[1],"resolve-",this,null,!1)})),t.on("executor-err",(function(e,t,r){e[1](r)})),t.on("cb-end",(function(e,r,n){t.emit("propagate",[n,!0],this.nextPromise,!1,!1)})),t.on("propagate",(function(e,r,n){this.getCtx&&!r||(this.getCtx=function(){if(e instanceof Promise)var r=t.context(e);return r&&r.getCtx?r.getCtx():this})}))}(),t}const Me={},Ke="setTimeout",Ue="setInterval",Ve="clearTimeout",Ge="-start",Fe=[Ke,"setImmediate",Ue,Ve,"clearImmediate"];function Be(e){const t=function(e){return(e||B.ee).get("timer")}(e);if(Me[t.debugId]++)return t;Me[t.debugId]=1;var r=(0,W.YM)(t);return r.inPlace(p.gm,Fe.slice(0,2),Ke+"-"),r.inPlace(p.gm,Fe.slice(2,3),Ue+"-"),r.inPlace(p.gm,Fe.slice(3),Ve+"-"),t.on(Ue+Ge,(function(e,t,n){e[0]=r(e[0],"fn-",null,n)})),t.on(Ke+Ge,(function(e,t,n){this.method=n,this.timerDuration=isNaN(e[1])?0:+e[1],e[0]=r(e[0],"fn-",this,n)})),t}const We={};function ze(e){const t=function(e){return(e||B.ee).get("mutation")}(e);if(!p.RI||We[t.debugId])return t;We[t.debugId]=!0;var r=(0,W.YM)(t),n=p.gm.MutationObserver;return n&&(window.MutationObserver=function(e){return this instanceof n?new n(r(e,"fn-")):n.apply(this,arguments)},MutationObserver.prototype=n.prototype),t}const{TZ:qe,d3:Ze,Kp:Ye,$p:Xe,wW:Je,e5:Qe,tH:$e,uP:et,rw:tt,Lc:rt}=Pe;class nt extends b{static featureName=qe;constructor(e,t=!0){if(super(e,qe,t),!p.RI)return;try{this.removeOnAbort=new AbortController}catch(e){}let r,n=0;const i=this.ee.get("tracer"),o=Le(this.ee),a=De(this.ee),s=Be(this.ee),c=Z(this.ee),u=this.ee.get("events"),d=ne(this.ee),l=ve(this.ee),f=ze(this.ee);function h(e,t){l.emit("newURL",[""+window.location,t])}function g(){n++,r=window.location.hash,this[et]=(0,S.t)()}function m(){n--,window.location.hash!==r&&h(0,!0);var e=(0,S.t)();this[Qe]=~~this[Qe]+e-this[et],this[rt]=e}function v(e,t){e.on(t,(function(){this[t]=(0,S.t)()}))}this.ee.on(et,g),a.on(tt,g),o.on(tt,g),this.ee.on(rt,m),a.on(Je,m),o.on(Je,m),this.ee.on("fn-err",((...t)=>{t[2]?.__newrelic?.[e.agentIdentifier]||(0,x.p)("function-err",[...t],void 0,this.featureName,this.ee)})),this.ee.buffer([et,rt,"xhr-resolved"],this.featureName),u.buffer([et],this.featureName),s.buffer(["setTimeout"+Ye,"clearTimeout"+Ze,et],this.featureName),c.buffer([et,"new-xhr","send-xhr"+Ze],this.featureName),d.buffer([$e+Ze,$e+"-done",$e+Xe+Ze,$e+Xe+Ye],this.featureName),l.buffer(["newURL"],this.featureName),f.buffer([et],this.featureName),a.buffer(["propagate",tt,Je,"executor-err","resolve"+Ze],this.featureName),i.buffer([et,"no-"+et],this.featureName),o.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),v(d,$e+Ze),v(d,$e+"-done"),v(o,"new-jsonp"),v(o,"jsonp-end"),v(o,"cb-start"),l.on("pushState-end",h),l.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,A.jT)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",h,(0,A.jT)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){h(0,n>1)}),(0,A.jT)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var it=i(3333);class ot extends b{static featureName=it.TZ;constructor(e,t=!0){super(e,it.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled];p.RI&&e.init.user_actions.enabled&&(it.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,x.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),it.qN.forEach((e=>(0,A.sp)(e,(e=>(0,x.p)("ua",[e],void 0,this.featureName,this.ee)))))),r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var at=i(993),st=i(3785);class ct extends b{static featureName=at.TZ;constructor(e,t=!0){super(e,at.TZ,t);const r=this.ee;this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,st.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,R.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(w),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,R.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[he,w,N,Ne,_e,_,D,ot,ct,je,nt],loaderType:"spa"})})()})();</script> <meta name="title" content=" ImmunoSpot® Software"/> <meta name="description" content=" ImmunoSpot® Software"/> <meta name="keywords" content=" ImmunoSpot® Software"/> <meta name="robots" content="INDEX,FOLLOW"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="format-detection" content="telephone=no"/> <title>ImmunoSpot® Software | ImmunoSpot®</title> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/mage/calendar.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/styles-m.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/jquery.fancybox.min.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/bootstrap.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/tiny-slider.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/chartist.min.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/fonts.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/MSP_LightGallery/css/lightgallery.min.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/StripeIntegration_Payments/css/stripe_payments.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/mage/gallery/gallery.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Itoris_DynamicProductOptions/css/main.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/autocomplete.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/grid.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/algolia-reset.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/instantsearch.v3.css" /> <link rel="stylesheet" type="text/css" media="all" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/recommend.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 768px)" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/styles-l.css" /> <link rel="stylesheet" type="text/css" media="print" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/css/print.css" /> <link rel="stylesheet" type="text/css" media="screen and (max-width: 1315px)" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/WeltPixel_NavigationLinks/css/navigation_mobile.css" /> <link rel="stylesheet" type="text/css" media="screen and (min-width: 1316px)" href="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/WeltPixel_NavigationLinks/css/navigation_desktop.css" /> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/requirejs/require.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/mage/requirejs/mixins.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/requirejs-config.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Itoris_DynamicProductOptions/js/minicart-option-images.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/StripeIntegration_Payments/js/stripe_payments.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/internals/common.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/instantsearch.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/insights.js"></script> <script type="text/javascript" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Algolia_AlgoliaSearch/recommend.js"></script> <link rel="canonical" href="https://immunospot.com/immunospot-software.html" /> <link rel="icon" type="image/x-icon" href="https://immunospot.com/media/favicon/stores/1/dots-immunos.png" /> <link rel="shortcut icon" type="image/x-icon" href="https://immunospot.com/media/favicon/stores/1/dots-immunos.png" /> <meta name="google-site-verification" content="5qPKu5n-naBtIlshpkYckT6SgonlH9oRKKBNBnGujuM" /> <meta name="p:domain_verify" content="yWzhCNk9m0a9DvwRvSe3gfhAKHNupdvi"/> <style> .mp-attachment-container li.mp-attachment-tab__item { max-width: fit-content; } .imu-related_prd_slider .slick-prev { top: 74px !important; left: -16px !important; width: 40px; height: 40px; border-radius: 50%; background-color: #027EC4 !important; cursor: pointer; } .imu-related_prd_slider .slick-next { top: 74px; left:unset; width: 40px; height: 40px; border-radius: 50%; background-color: #027EC4 !important; cursor: pointer; right: -20px; } .imu-related_prd_slider .slick-prev:before{ position: absolute; top: 11px !important; left: 9px; font-size: 20px; color: #ffffff; } .imu-related_prd_slider .slick-next:before { top: 11px; left: 7px; font-size: 20px; position: absolute; color: #ffffff; } .imu-related_prd_slider .col-md-2 .text-center{ word-break: break-all; white-space: normal; } .imu-related_prd_slider .slick-slide img { max-width: 144px; } .imu-related_prd_slider .slick-slide { margin: 0px 15px; max-width: 180px !important; } .product-options-bottom .box-tocart { margin-bottom: 62px; } @media only screen and (max-width: 1280px) and (min-width: 768px) { .imu-related_prd_slider .slick-prev{ left: 5px !important; } .imu-related_prd_slider .slick-next { right: 2px !important; } } @media only screen and (max-width: 1024px) and (min-width: 992px) { .imu-related_prd_slider .slick-prev{ top: 63px !important; } .imu-related_prd_slider .slick-next { top: 63px !important; } } @media only screen and (min-width:993px){ .catalog-product-view .col-lg-6.pt-0.pl-lg-3.pb-md-2.order-1.product-attributes-blocks { width: 60% !important; } .catalog-product-view .col-lg-6.cs-content.order-2.product-attributes-blocks { width: 40%; } .catalog-product-view .col-lg-6.order-2 .fotorama__stage__frame .fotorama__img { left: 50% !important; } } @media only screen and (min-width:768px) { .imu-products-related .products-list .product-item { word-break: break-all; white-space: normal; } } @media (min-width: 991px) and (max-width: 1024px){ .catalog-product-view .col-lg-6.order-2 .product.media { margin-left: 0% !important; } } .page-title-wrapper.product { width: 100% !important; } .catalog-category-view main#maincontent { position: relative; width: 100%; border-bottom: 0px solid #e0dfe6!important; } .field.choice.admin__field.admin__field-option.anti-ferret-size input { margin-top: 5px; } .catalog-product-view .page-footer { margin-top: 60px; } .catalog-product-view .block-static-block.widget{margin-bottom: 8px;} .field.choice.admin__field.admin__field-option.anti-ferret-size { margin-top: 5px !important; margin-left: 15px !important; } .mp-attachment-tab.b-cell-ferret-anti-doc-sec { padding-left: 10px; } .b-cell-ferret-anti-doc-sec span.mp-attachment-tab__item__name { font-size: 16px; } @media (min-width: 768px) and (max-width: 992px) { .algolia-instant-selector-results div#algolia_instant_selector{ margin-top: 45px !important; } } .pagebuilder-column.related_products_section-hum { display:none!important; } .catalog-product-view .product-info-main .mp-attachment-tab li.mp-attachment-tab__item span.mp-attachment-tab__item__name{ font-size: 16px; } .catalog-product-view .product-info-main .mp-attachment-tab li.mp-attachment-tab__item { margin-bottom: 0.5rem; } .mp-attachment-container h2 { font-weight: bolder; font-size: 26px; line-height: 34px; } .catalog-product-view .product-info-main .overview h3.font-weight-bold{ font-weight: bolder; font-size: 26px; line-height: 34px; } .catalog-product-view .product-info-main .overview{ margin-top: 35px !important; margin-bottom:0px !important; } .catalog-product-view .product-info-main .overview .py-5 { padding-bottom: 68px!important; } .mp-attachment-tab{ margin-bottom:0px !important;} .catalog-product-view .product-info-main .product.attribute.overview .bg-light .col-md-8.row p:empty { display: none; } .catalog-product-view .product-info-main .overview .py-5 .row:last-child p:last-child { margin-bottom: 0px; } .catalog-product-view .product.attribute.overview .bg-light { padding-top: 80px; } .catalog-product-view .product.attribute.overview table.table.table-bordered { margin-bottom: 0px; } .pagebuilder-column.related_products_section_c1 { width:50%!important; margin-left: 0px!important; } .pagebuilder-column.related_products_section_c2{ width:50%!important; } .service-products.row.mt-4.mb-4 { margin-left: -26px; } .catalog-product-view { .btn-primary { padding: 2px 20px!important; } } .product-ctl-tva-suite .modal-popup .modal-inner-wrap { width: 50% !important } @media only screen and (max-width: 767px){ .catalog-product-view .page-footer { margin-top: 42px !important; } .product-ctl-tva-suite .modal-popup.modal-slide .modal-inner-wrap { margin: 0 auto; max-height: 100%; height: auto; } .product-ctl-tva-suite .modal-popup .modal-inner-wrap { width: 100% !important; } button.us-demo.action.btn.btn-primary { margin-bottom: 40px; } .cross-reference .modal-body .mob-tab{ overflow: scroll; display: block; } .cross-reference .modal-body thead th{ display: table-cell; } .catalog-product-view .product-info-main .overview .py-5 { padding-bottom: 50px !important; padding-top: 30px !important; } body.catalog-product-view .product-info-main .product.attribute.overview { margin-top: 50px !important; } .catalog-product-view .product-info-main .product.attribute.overview .bg-light { margin-bottom: -30px; } body .col-lg-6.pt-0.pl-lg-3.pb-md-2.order-1.product-attributes-blocks{ margin-top: -30px!important;} .catalog-product-view .column.main.container .recommend-component{margin-bottom:0px;} .catalog-product-view .column.main.container {display:block;padding-bottom:0px} .mp-attachment-tab.b-cell-ferret-anti-doc-sec { padding-left: 3px; } .catalog-product-view .product-info-main{ margin-top: -60px;} .catalog-product-view .product.attribute.overview .bg-light { padding-top: 0px; } } @media only screen and (min-width: 768px) and (max-width: 1200px){ .product-ctl-tva-suite .modal-popup._show .modal-inner-wrap { width: auto !important; margin: 7rem 0px !important; position: initial; } } @media (min-width: 768px) and (max-width: 992px){ .header-product-row.row { width: 100%; margin-top: 0px !important; } } @media only screen and (max-width: 992px){ .col-lg-6.pt-0.pl-lg-3.pb-md-2.order-1.product-attributes-blocks{ margin-top: 0px!important;} } @media (min-width: 993px) and (max-width: 1100px) { .ais-RefinementList label.ais-RefinementList-label { white-space: unset !important; } } .filter_active .ais-Panel .ais-Panel-body li .ais-RefinementList-label { display: flex; line-height: 22px; } .filter_active .ais-Panel .ais-Panel-body li .ais-RefinementList-label:before { padding-right: 20px; } </style> <script> require(['jquery', 'slick'], function($) { $(document).ready(function($) { if ($(window).innerWidth() > 767) { $(".imu-products-related .imu-related_prd_slider").slick({ dots: false, infinite: false, speed: 300, slidesToShow: 6, slidesToScroll: 6, responsive: [ { breakpoint: 992, settings: { slidesToShow: 4, slidesToScroll: 4 } } ] }); var maxHt = Math.max.apply(null, $(".imu-related_prd_slider .col-md-2 .text-center").map(function() { return $(this).height(); }).get()); $("<style type='text/css'> .imu-related_prd_slider .col-md-2 .text-center{ min-height:" + (maxHt + 0) + "px;} </style>").appendTo("head"); if ($(".imu-related_prd_slider .slick-arrow").length > 0){ $('.imu-related_prd_slider').addClass('slide-active'); }else{ $('.imu-related_prd_slider').removeClass('slide-active'); } if ($(window).innerWidth() >= 768 && $(window).innerWidth() <= 1280) { $('.imu-products-related .imu-related_prd_slider').css('padding', '0px 40px 0 38px'); } else { $('.imu-products-related .imu-related_prd_slider').css('padding', '0'); } } }); }); </script> <script> window.getWpCookie = function(name) { match = document.cookie.match(new RegExp(name + '=([^;]+)')); if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; }; window.dataLayer = window.dataLayer || []; var dlObjects = [{"ecommerce":{"detail":{"products":[{"name":" ImmunoSpot\u00ae Software","id":"immunospot-software","price":"0.00","category":"Products\/Analyzers"}]},"currencyCode":"USD"}}]; for (var i in dlObjects) { window.dataLayer.push(dlObjects[i]); } var wpCookies = ['wp_customerId','wp_customerGroup']; wpCookies.map(function(cookieName) { var cookieValue = window.getWpCookie(cookieName); if (cookieValue) { var dlObject = {}; dlObject[cookieName.replace('wp_', '')] = cookieValue; window.dataLayer.push(dlObject); } }); </script> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KMGC5QQ');</script> <!-- End Google Tag Manager --><link rel="stylesheet" type="text/css" media="all" href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css"> <link rel="alternate" hreflang="en-us" href="https://immunospot.com/immunospot-software.html" /> <link rel="alternate" hreflang="en-de" href="https://immunospot.com/immunospot-software.html" /> <link rel="alternate" hreflang="en-gb" href="https://immunospot.com/immunospot-software.html" /> <link rel="alternate" hreflang="en-fr" href="https://immunospot.com/immunospot-software.html" /> <link rel="alternate" hreflang="en-za" href="https://immunospot.com/immunospot-software.html" /> <link rel="alternate" hreflang="en-se" href="https://immunospot.com/immunospot-software.html" /> <meta property="og:type" content="product" /> <meta property="og:title" content=" ImmunoSpot® Software" /> <meta property="og:image" content="https://immunospot.com/media/catalog/product/cache/8146892bfa0fc596f7d1ddb412c8a076/d/4/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg" /> <meta property="og:description" content="


Figure 2. Application of spot size gating for analysis of T cell ELISPOT results, here IFN-γ assay. In the top row (a) well images are shown for a test subject's PBMC with the media (negative) control well on the left, and a well containing the antigen on the right. In this test subject, like frequently in clinical samples, cytokine storms occurred resulting in a high medium IFN-γ background. Such background spots, produced by cells of the innate immune system are smaller than the antigen-induced spots produced by T cells. The scope of counting is to distinguish between the background spots and the antigen-induced spots, and to do so in an objective fashion. Counting all spots results in meaningless numbers (see mid panel, b). In the lower panel, c, the counts and overlays of counted spots with red outline) are shown after proper gating, using the ImmunoSpot® Software’s automated algorithm. The spot size/density distribution for the background spots is established, see the histogram on the left, and this is compared to the histogram of spot size/density distributions in the antigen-triggered well, see histogram on the right. The size/density distribution of spots exceeding the background distribution are subject to automated statistical analysis based upon which the upper and lower gates for counting are set automatically by the AutoGate™ function, assuming a log normal spot size/density distribution. We will detail in the following why the log normal assumption is valid for the scientific basis of objective gating and counting.


Figure 2 illustrates the challenge of T cell ELISPOT counting. In clinical samples, for example in IFN-γ ELISPOT assays, PBMC can exhibit substantial media background. This background is generated by cells of the innate immune system, in particular, activated macrophages and NK cells. Such background is elevated in diseased individuals undergoing cytokine storms. These spots are relatively small, compared to the signature of antigen-activated T cells. The scope of ELISPOT counting is to distinguish between this background noise and the antigen-induced T cell-derived spots, and to do so in an objective, reproducible way. This is done much like it would be done in flow cytometry. Counting spots without gating, as shown in the middle panel of Figure 2b, produces nonsensical numbers, much like flow cytometry results would without gating. With proper gating, however, the numbers of antigen-specific T cells can be identified (see lower panel, Figure 2c). In the following, we describe the scientific evidence that suggests that such gating can be done in an objective and scientifically-validated manner. CTL’s scientists, under the direction of Professor Paul V. Lehmann, have contributed over 200 publications to the field of ELISPOT research (see) helping among other contributions to establish the rules for accurate automatic counting of antigen-specific T cell ELISPOT assays. Highlights are summarized in the following. In essence, the counting parameters are set automatically by the AutoGate™ function of the ImmunoSpot® Software, assuming a log normal spot size/density distribution for T cell derived spots. Here we will detail why the log normal assumption is valid for the objective counting of T cell ELISPOT assays.




The ELISPOT signature of cloned individual T cells
CTL’s initial efforts focused on studying the secretory signature of defined T cell populations, i.e., T cell clones. Such studies revealed a wide dynamic range in both the sizes and intensities of spots detected [ref], (see Figure 3, extracted from that publication), that however followed a close to perfect log-normal size distribution. Importantly, it was necessary to count the full range of spots sizes per well to detect all T cells seeded into the well.



Figure 3. Secretory signature of a T cell clone reveals log normal ELISPOT size distribution. Even T cells with a uniform specificity, that are activated on a clonal population of antigen presenting cells (APC), and at a single concentration of peptide antigen, this wide range of spot sizes are generated that, as a population, however, follow a log-normal size distribution.




The ELISPOT signature of ex vivo isolated primary T cells
Follow-up studies focused attention on the less-defined, but more relevant, scenarios of cytokine signatures from T cells as seen in “normal ELISPOT assays”, studying cells from freshly isolated samples. We undertook a systematic study to verify whether log-normal size distributions were the rule in T cell ELISIPOT assays [ref]: we studied the spot morphologies of IFN-γ, IL-2, IL-4, IL-5 and IL-17 spots from ELISPOT assays using PBMC isolated from 172 healthy human donors following stimulation with 32 individual viral peptides representing defined HLA Class I-restricted epitopes for CD8 cell recall, and with protein antigens of CMV and EBV, activating CD4 cells. A total of 414 T cell recall responses were analyzed. In 99.7% of these cases, spot sizes followed log-normal distributions, firmly establishing log normal size distribution as a general rule for human T cell ELISPOT assay analysis.




Statistics-based objective ELISPOT counting
The above observations establishing log-normal spot size distribution as the rule in T cell ELISPOT assays allows the application of classic parametric statistics for objective ELISPOT counting [ref]. When spot sizes (in log scale) for a given T cell population are normally distributed, it follows that each spot within 3 SD of the mean is derived, with 99.73% probability, from an individual antigen-specific T cell, and should be counted as such. Spots that are 3 SD below the mean spot size for a given assay are, with 99.73% probability, caused by non-T cell bystander cytokine secretion, or by artifacts, and should be excluded from being counted, as they are when using the ImmunoSpot® AutoGate™ function. Spots above the maximum size gate (&gt; 3 SD above the mean spot size) are, with equivalent certainty, not produced by individual T cells, but rather result from cell clusters, and need to be counted as such. In this case, the Immunospot® Software automatically estimates the number of average sized individual spots required to form the oversized cluster in question, and the calculated number is included in the count for that well. ImmunoSpot® automatically establishes spot size distributions for both medium background (negative control) and antigen test wells, relying on user input and machine-learning tools to guide the statistical analysis for determining the minimum and maximum size gates. In this way, ImmunoSpot® provides objective, user-independent analysis of ELISPOT assays.




User- and ImmunoSpot® Reader- independent reproducibility of T cell ELISPOT counts
Nine independent laboratories were given, in turn, the exact same ELISPOT plate, which displayed a wide range and variance of spot counts between wells. These labs used their own ImmunoSpot® Readers (including different models) for image acquisition, but when relying on the SmartCount™ function (that includes SmartSpot® for objective setting of the counting parameters and SmartGate™ for objective gating) they all obtained essentially identical counts [ref].
For those who believe that subjective manual setting of counting parameters by experts might yet be more suitable for optimal counting, we would like to draw attention to a figure of the above publication that is reproduced here as Figure 4. In it, the ELISPOT experts in each of the nine laboratories were asked to recount the plate, but manually adjusting the counting parameters in an attempt to improve the accuracy of the machine-generated counts. Unsurprisingly, these subjectively counted results showed considerable inter-lab variation. However, the mean of the nine subjective counts corresponded precisely to the results generated by the ImmunoSpot® Software, that is, the latter corresponded to the consensus count of that subjectively established by the experts.





Figure 4. Comparison of counting results obtained from subjective/manual determination of counting parameters by 9 expert ELISPOT laboratories vs. the SmartCount™ statistics-based automated results generated by the ImmunoSpot® Software. The latter are shown in the thick black line. Results from the subjective counts are shown in grey with symbols to differentiate each of the 9 participating labs. Note that for each well the subjective counts for any given lab consistently either over- or under-estimate the counts generated automatically by SmartCount™. Also note that the automated results (in black) are close to identical for the 9 laboratories and correspond very closely to the average of all 9 subjective spot counts form all participating laboratories.




Advanced Quality Control features of the ImmunoSpot® Software
The statistics-based counting features described above enable objective automated counting. Over the ImmunoSpot® Software's &gt; 25-year continuous evolution, numerous modules have been added to accommodate the increasingly complex daily challenges encountered in high-throughput ELISPOT data analysis, for both regulated and academic studies. For example, there are dedicated Quality Control tools available that account for individual variations of spot size distributions, e.g., in samples from patients undergoing immunotherapy (Verify Gate™ function), as well as to document and account for complications in physical assay performance, such as leaking wells or high/variable background in assay wells.
Learn more about the regulatory compliance of the ImmunoSpot® Software.
Learn more about multi-color counting with CTL’s FluoroX Software.

" /> <meta property="og:url" content="https://immunospot.com/immunospot-software.html" /> <meta property="product:price:amount" content="0"/> <meta property="product:price:currency" content="USD"/> <script> window.algoliaConfig = {"instant":{"enabled":true,"selector":".column","isAddToCartEnabled":false,"addToCartParams":{"action":"https:\/\/immunospot.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw%2C\/","formKey":"jxubfNEdEYZ4my4F"},"infiniteScrollEnabled":true,"urlTrackedParameters":["query","attribute:*","index"]},"autocomplete":{"enabled":true,"selector":".algolia-search-input","sections":[{"name":"pages","label":"Resources","hitsPerPage":"6"}],"nbOfProductsSuggestions":6,"nbOfCategoriesSuggestions":0,"nbOfQueriesSuggestions":0,"isDebugEnabled":false},"landingPage":{"query":"","configuration":"[]"},"recommend":{"enabledFBT":false,"enabledRelated":false,"enabledFBTInCart":false,"enabledRelatedInCart":false,"limitFBTProducts":6,"limitRelatedProducts":6,"limitTrendingItems":6,"enabledTrendItems":0,"trendItemFacetName":null,"trendItemFacetValue":null,"isTrendItemsEnabledInPDP":0,"isTrendItemsEnabledInCartPage":0,"isAddToCartEnabledInFBT":false,"isAddToCartEnabledInRelatedProduct":false,"isAddToCartEnabledInTrendsItem":false,"addToCartParams":{"action":"https:\/\/immunospot.com\/checkout\/cart\/add\/uenc\/aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw%2C\/","formKey":"jxubfNEdEYZ4my4F"}},"extensionVersion":"3.9.1","applicationId":"82KWM3IOJP","indexName":"us_immunospot_live_default","apiKey":"MWM3OTQ1ODQ2MGU2MDc4MzhjNDFhMjQ5ZTU2Njg3YjRmYWVjYzRlMTViNzhjY2M5NTNlYTk4MzY3MTAyYTE5NXRhZ0ZpbHRlcnM9","attributeFilter":[],"facets":[{"attribute":"categories","type":"conjunctive","label":"Categories","searchable":"1","create_rule":"2"},{"attribute":"format","type":"conjunctive","label":"Format","searchable":"1","create_rule":"2"},{"attribute":"species","type":"conjunctive","label":"Species","searchable":"1","create_rule":"2"},{"attribute":"target","type":"conjunctive","label":"Target","searchable":"1","create_rule":"2"},{"attribute":"number_of_analytes","type":"conjunctive","label":"Number of Analytes","searchable":"1","create_rule":"2"},{"attribute":"analyte","type":"conjunctive","label":"Analytes","searchable":"1","create_rule":"2"}],"areCategoriesInFacets":true,"hitsPerPage":10,"sortingIndices":[{"attribute":"name","sort":"asc","sortLabel":"Product Name Asc","name":"us_immunospot_live_default_products_name_asc","label":"Product Name Asc","ranking":["asc(name)","typo","geo","words","filters","proximity","attribute","exact","custom"]},{"attribute":"name","sort":"desc","sortLabel":"Product Name Desc","name":"us_immunospot_live_default_products_name_desc","label":"Product Name Desc","ranking":["desc(name)","typo","geo","words","filters","proximity","attribute","exact","custom"]}],"isSearchPage":false,"isCategoryPage":false,"isLandingPage":false,"removeBranding":false,"productId":null,"priceKey":".USD.default","priceGroup":null,"origFormatedVar":"price.USD.default_original_formated","tierFormatedVar":"price.USD.default_tier_formated","currencyCode":"USD","currencySymbol":"$","priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"maxValuesPerFacet":30,"autofocus":true,"resultPageUrl":"https:\/\/immunospot.com\/catalogsearch\/result\/","request":{"query":"","refinementKey":"","refinementValue":"","categoryId":"","landingPageId":"","path":"","level":""},"showCatsNotIncludedInNavigation":true,"showSuggestionsOnNoResultsPage":true,"baseUrl":"https:\/\/immunospot.com","popularQueries":[],"useAdaptiveImage":false,"urls":{"logo":"https:\/\/immunospot.com\/static\/version1728550059\/frontend\/Forti\/immuno\/en_US\/Algolia_AlgoliaSearch\/images\/algolia-logo-blue.svg"},"ccAnalytics":{"enabled":false,"ISSelector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","conversionAnalyticsMode":null,"addToCartSelector":".action.primary.tocart","orderedProductIds":[]},"isPersonalizationEnabled":false,"personalization":{"enabled":false,"viewedEvents":{"viewProduct":{"eventName":"Viewed Product","enabled":false,"method":"viewedObjectIDs"}},"clickedEvents":{"productClicked":{"eventName":"Product Clicked","enabled":false,"selector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","method":"clickedObjectIDs"},"productRecommended":{"eventName":"Recommended Product Clicked","enabled":false,"selector":".products-upsell .product-item","method":"clickedObjectIDs"}},"filterClicked":{"eventName":"Filter Clicked","enabled":false,"method":"clickedFilters"}},"analytics":{"enabled":true,"delay":"3000","triggerOnUiInteraction":"1","pushInitialSearch":"0"},"now":1732665600,"queue":{"isEnabled":true,"nbOfJobsToRun":10,"retryLimit":3,"nbOfElementsPerIndexingJob":300},"isPreventBackendRenderingEnabled":false,"areOutOfStockOptionsDisplayed":false,"translations":{"to":"to","or":"or","go":"Go","popularQueries":"You can try one of the popular search queries","seeAll":"See all products","allDepartments":"All departments","seeIn":"See products in","orIn":"or in","noProducts":"No products for query","noResults":"No results","refine":"Refine","selectedFilters":"Selected Filters","clearAll":"Clear all","previousPage":"Previous page","nextPage":"Next page","searchFor":"Search for products","relevance":"Relevance","categories":"Categories","products":"Products","searchBy":"Search by","searchForFacetValuesPlaceholder":"Search for other ...","showMore":"Show more products"},"isContentPage":0}; </script> </head> <body data-container="body" data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/images/loader-2.gif"}}' id="html-body" itemtype="http://schema.org/Product" itemscope="itemscope" class="catalog-product-view product-immunospot-software page-layout-1column"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMGC5QQ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <script type="text/x-magento-init"> { "*": { "Magento_PageBuilder/js/widget-initializer": { "config": {"[data-content-type=\"slider\"][data-appearance=\"default\"]":{"Magento_PageBuilder\/js\/content-type\/slider\/appearance\/default\/widget":false},"[data-content-type=\"map\"]":{"Magento_PageBuilder\/js\/content-type\/map\/appearance\/default\/widget":false},"[data-content-type=\"row\"]":{"Magento_PageBuilder\/js\/content-type\/row\/appearance\/default\/widget":false},"[data-content-type=\"tabs\"]":{"Magento_PageBuilder\/js\/content-type\/tabs\/appearance\/default\/widget":false},"[data-content-type=\"slide\"]":{"Magento_PageBuilder\/js\/content-type\/slide\/appearance\/default\/widget":{"buttonSelector":".pagebuilder-slide-button","showOverlay":"hover","dataRole":"slide"}},"[data-content-type=\"banner\"]":{"Magento_PageBuilder\/js\/content-type\/banner\/appearance\/default\/widget":{"buttonSelector":".pagebuilder-banner-button","showOverlay":"hover","dataRole":"banner"}},"[data-content-type=\"buttons\"]":{"Magento_PageBuilder\/js\/content-type\/buttons\/appearance\/inline\/widget":false},"[data-content-type=\"products\"][data-appearance=\"carousel\"]":{"Magento_PageBuilder\/js\/content-type\/products\/appearance\/carousel\/widget":false}}, "breakpoints": {"desktop":{"label":"Desktop","stage":true,"default":true,"class":"desktop-switcher","icon":"Magento_PageBuilder::css\/images\/switcher\/switcher-desktop.svg","conditions":{"min-width":"1024px"},"options":{"products":{"default":{"slidesToShow":"5"}}}},"tablet":{"conditions":{"max-width":"1024px","min-width":"768px"},"options":{"products":{"default":{"slidesToShow":"4"},"continuous":{"slidesToShow":"3"}}}},"mobile":{"label":"Mobile","stage":true,"class":"mobile-switcher","icon":"Magento_PageBuilder::css\/images\/switcher\/switcher-mobile.svg","media":"only screen and (max-width: 768px)","conditions":{"max-width":"768px","min-width":"640px"},"options":{"products":{"default":{"slidesToShow":"3"}}}},"mobile-small":{"conditions":{"max-width":"640px"},"options":{"products":{"default":{"slidesToShow":"2"},"continuous":{"slidesToShow":"1"}}}}} } } } </script> <div class="cookie-status-message" id="cookie-status"> The store will not work correctly in the case when cookies are disabled.</div> <script type="text/javascript">document.querySelector("#cookie-status").style.display = "none";</script> <script type="text/x-magento-init"> { "*": { "cookieStatus": {} } } </script> <script type="text/x-magento-init"> { "*": { "mage/cookies": { "expires": null, "path": "\u002F", "domain": ".immunospot.com", "secure": true, "lifetime": "3600" } } } </script> <noscript> <div class="message global noscript"> <div class="content"> <p> <strong>JavaScript seems to be disabled in your browser.</strong> <span> For the best experience on our site, be sure to turn on Javascript in your browser. </span> </p> </div> </div> </noscript> <script> window.cookiesConfig = window.cookiesConfig || {}; window.cookiesConfig.secure = true; </script><script> require.config({ map: { '*': { wysiwygAdapter: 'mage/adminhtml/wysiwyg/tiny_mce/tinymce5Adapter' } } });</script><script> require.config({ paths: { googleMaps: 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D' }, config: { 'Magento_PageBuilder/js/utils/map': { style: '' }, 'Magento_PageBuilder/js/content-type/map/preview': { apiKey: '', apiKeyErrorMessage: 'You\u0020must\u0020provide\u0020a\u0020valid\u0020\u003Ca\u0020href\u003D\u0027https\u003A\u002F\u002Fimmunospot.com\u002Fadminhtml\u002Fsystem_config\u002Fedit\u002Fsection\u002Fcms\u002F\u0023cms_pagebuilder\u0027\u0020target\u003D\u0027_blank\u0027\u003EGoogle\u0020Maps\u0020API\u0020key\u003C\u002Fa\u003E\u0020to\u0020use\u0020a\u0020map.' }, 'Magento_PageBuilder/js/form/element/map': { apiKey: '', apiKeyErrorMessage: 'You\u0020must\u0020provide\u0020a\u0020valid\u0020\u003Ca\u0020href\u003D\u0027https\u003A\u002F\u002Fimmunospot.com\u002Fadminhtml\u002Fsystem_config\u002Fedit\u002Fsection\u002Fcms\u002F\u0023cms_pagebuilder\u0027\u0020target\u003D\u0027_blank\u0027\u003EGoogle\u0020Maps\u0020API\u0020key\u003C\u002Fa\u003E\u0020to\u0020use\u0020a\u0020map.' }, } }); </script> <script> require.config({ shim: { 'Magento_PageBuilder/js/utils/map': { deps: ['googleMaps'] } } }); </script> <div id="callforprice_modal" style="display:none"> <form id="callforprice_form" action="https://immunospot.com/callforprice/request/send/" method="post" data-hasrequired="* Required Fields" data-mage-init='{"validation":{}}'> <fieldset class="fieldset callforprice_request"> <input type="hidden" value="" name="product_ids" class="product_ids"/> <input type="hidden" value="" name="product_name" class="product_name"/> <input name="form_key" type="hidden" value="jxubfNEdEYZ4my4F" /> <div class="field required"> <label class="label">Name</label> <div class="control"> <input type="text" name="customer_name" data-validate="{required:true}"/> </div> </div> <div class="field required"> <label class="label">Email</label> <div class="control"> <input type="text" name="customer_email" data-validate="{required:true,'validate-email':true}"/> </div> </div> <div class="field"><label class="label" for="_1568027767844_844">Test</label><div class="control"><input type="text" name="_1568027767844_844" class="input-text" value=""/></div></div> </fieldset> </form> </div> <script type="text/x-magento-init"> { "*": { "Bss_AdvancedHidePrice/js/popup_modal": {} } } </script> <style type="text/css"> .product-item-details .action.tocart { display: none; } .action.tocart { display: none; } #product-addtocart-button { display: block; } .callforprice-container .callforprice_clickme { padding: 5px 10px; } </style> <div class="page-wrapper"><header class="page-header"><div class="panel wrapper"><div class="panel header"><a class="action skip contentarea" href="#contentarea"> <span> Skip to Content </span> </a> <ul class="header links"><script type="text/javascript">require(['jquery.bootstrap']);</script> <li class="greet welcome" data-bind="scope: 'customer'"> <!-- ko if: customer().fullname --> <span class="logged-in" data-bind="text: new String('Welcome, %1!').replace('%1', customer().fullname)"> </span> <!-- /ko --> <!-- ko ifnot: customer().fullname --> <span class="not-logged-in" data-bind='html:""'></span> <!-- /ko --> </li> <script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "customer": { "component": "Magento_Customer/js/view/customer" } } } } } </script> <li class="link authorization-link" data-label="or"> <a href="https://immunospot.com/customer/account/login/referer/aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw%2C/" >Sign In</a> </li> <li><a href="https://immunospot.com/customer/account/create/" id="idxb1SEZuj" >Create an Account</a></li></ul></div></div><div class="px-4 navbar navbar-expand sticky-top shadow"><span data-action="toggle-nav" class="action nav-toggle"><span>Toggle Nav</span></span> <a class="logo" href="https://immunospot.com/" title="" aria-label="store logo"> <img src="https://immunospot.com/media/logo/stores/1/logo_immunospot_by_ctl_official_2023_white_background_web_spotcloud-2023.png" title="" alt="" width="210" height="130" /> </a> <div class="sections nav-sections"> <div class="section-items nav-sections-items" data-mage-init='{"tabs":{"openedState":"active"}}'> <div class="section-item-title nav-sections-item-title" data-role="collapsible"> <a class="nav-sections-item-switch" data-toggle="switch" href="#store.menu"> Menu </a> </div> <div class="section-item-content nav-sections-item-content" id="store.menu" data-role="content"> <nav class="navigation" data-action="navigation"> <ul data-mage-init='{"menu":{"responsive":true, "expanded":true, "position":{"my":"left top","at":"left bottom"}}}'> <li class="megamenu level-top-boxed level0 nav-1 category-item first level-top parent" data-test="test"><a href="https://immunospot.com/products" class="level-top" ><span>Products</span></a><ul class="level0 submenu boxed hide-all-category has-menu-block top-block-child " style="display: none;"><li class="submenu-child"><div class="menu-block top-block block-container"><div class="row"> <div class="col-4"> <div class="menu-stacked-items"> <div class="px-4"> <div class="position-relative d-flex mb-2"> <img src="https://immunospot.com/media/images/menu/analyzer-software-blue.png" alt="ImmunoSpot® Analyzers"> <a class="ps-2" href="/products/analyzers">ImmunoSpot®<br>Analyzers</a> </div> <div class="position-relative d-flex mb-2"> <img src="https://immunospot.com/media/images/menu/kits-components-blue.png" alt="ImmunoSpot® Kits"> <a class="ps-2" href="/products/immunospot-kits-components">ImmunoSpot®<br>Kits</a> </div> <div class="position-relative d-flex"> <img src="https://immunospot.com/media/images/menu/support-blue.png" alt="Kit Scanning<br>& Analysis Services"> <a class="stretched-link ps-2" href="/products/kit-scanning-analysis">Kit Scanning<br>& Analysis Services</a> </div> </div> </div> </div> <div class="col-5"> <div class="menu-stacked-items"> <div class="px-4"> <div class="position-relative d-flex mb-2"><img src="https://immunospot.com/media/images/menu/epbmc-blue.png" alt="Cryopreserved PBMC"> <a class="stretched-link ps-2" href="/products/epbmc">Cryopreserved<br>PBMC</a></div> <div class="position-relative d-flex mb-2"><img src="https://immunospot.com/media/images/menu/serum-free-blue.png" alt="Serum-Free Media"> <a class="stretched-link ps-2" href="/products/serum-free-media">Serum-Free <br>Media</a></div> <div class="position-relative d-flex"><img src="https://immunospot.com/media/images/menu/positive-control-blue.png" alt="Positive Controls Antigen"> <a class="stretched-link ps-2" href="/products/positive-controls-tcell-activation">Positive Controls for <br>T cell Activation</a></div> </div> </div> </div> </div></div></li><!-- close submenu-child --><li class="submenu-child"><!-- re-open submenu-child --><ul class="columns-group starter" style="width: auto"><li class="megamenu level1 nav-1-1 category-item first disabled-link" data-test="test"><a href="javascript:void(0);" ><span>Anchor</span></a></li><li class="megamenu level1 nav-1-2 category-item" data-test="test"><a href="https://immunospot.com/immunospot-kits-components" ><span>ImmunoSpot® Kits & Components</span></a></li><li class="megamenu level1 nav-1-3 category-item" data-test="test"><a href="https://immunospot.com/products-filter/analyzers.html" ><span>Analyzers</span></a></li><li class="megamenu level1 nav-1-4 category-item last" data-test="test"><a href="https://immunospot.com/products-filter/software.html" ><span>Software</span></a></li><span class="close columns-group last"></span></ul></li><!-- end submenu-child --></ul><!-- end submenu --></li><li class="megamenu level-top-boxed level0 nav-2 category-item level-top parent" data-test="test"><a href="https://immunospot.com/services/contract-laboratory-services" class="level-top" ><span>Services</span></a><ul class="level0 submenu boxed hide-all-category has-menu-block top-block-child " style="display: none;"><li class="submenu-child"><div class="menu-block top-block block-container"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="row"> <div class="col-6 px-0"> <div class="menu-row-items h-100 text-start"> <div class="px-4"> <div class="pb-5 menu-stacked-items"><img src="https://immunospot.com/media/images/menu/contract-lab-services-blue.png" alt=""> <a class="ps-2" href="/services/contract-laboratory-services">Contract Laboratory <br>Services</a></div> <a href="/services/whole-blood-processing-to-cryopreserved-pbmc">Whole Blood Processing to Cryopreserved PBMC</a><br><a href="/services/t-cell-elispot-testing">T Cell ELISPOT Testing</a><br><a href="/services/b-cell-elispot-testing">B Cell ELISPOT Testing</a><br><a href="/services/elisa-testing">ELISA Testing</a><br><a href="/neutralizing-antibody-nab-assays.html">Neutralizing Antibody (NAb) assays</a><br><a href="/flow-cytometry-testing.html">Flow Cytometry Testing</a><br><a href="https://immunospot.com/sample-management.html">Sample Management</a><br><a href="/services/assay-standardization">Assay Standardization</a><br><a href="/services/contract-scanning-analysis">Scanning & Analysis Services</a></div> </div> </div> <div class="col-6 pr-0"> <div class="menu-row-items h-100 text-start"> <div class="px-0"> <div class="pb-5 menu-stacked-items"><img src="https://immunospot.com/media/images/menu/training-consulting-blue.png" alt=""> <a class="ps-2" href="/services/training-consultation">Training & <br>Consultation</a></div> <a href="/products/kit-scanning-analysis">Kit Scanning Services</a><br> <a href="/services/elispot-proficiency-testing">ELISPOT/FluoroSpot Proficiency Testing</a><br> <a href="/services/interactive-web-based-training">Interactive Web-based Training</a><br> <a href="/services/elispot-workshops">ELISPOT/FluoroSpot Workshops</a></div> </div> </div> </div></div></div></li><!-- close submenu-child --><li class="submenu-child"><!-- re-open submenu-child --><ul class="columns-group starter" style="width: auto"><li class="megamenu level1 nav-2-1 category-item first disabled-link" data-test="test"><a href="javascript:void(0);" ><span>Anchor</span></a></li><li class="megamenu level1 nav-2-2 category-item" data-test="test"><a href="https://immunospot.com/contract-laboratory-services" ><span>Contract Laboratory Services</span></a></li><li class="megamenu level1 nav-2-3 category-item last" data-test="test"><a href="https://immunospot.com/training-consultation" ><span>Training & Consultation</span></a></li><span class="close columns-group last"></span></ul></li><!-- end submenu-child --></ul><!-- end submenu --></li><li class="megamenu level-top-boxed level0 nav-3 category-item level-top parent" data-test="test"><a href="https://immunospot.com/resources" class="level-top" ><span>News & Resources</span></a><ul class="level0 submenu boxed hide-all-category has-menu-block top-block-child " style="display: none;"><li class="submenu-child"><div class="menu-block top-block block-container"><div class="row"> <div class="col-4"> <div class="menu-stacked-items"> <div class="px-4"> <div class="position-relative d-flex align-items-center mb-2"> <img src="https://immunospot.com/media/images/menu/news-blue.png" alt="News"> <a class="ps-2" href="/resources/news">News</a> </div> <div class="position-relative d-flex align-items-center"> <img src="https://immunospot.com/media/images/menu/publications-blue.png" alt="Publications<br>by Scientists"> <a class="ps-2" href="/resources/recent-publications">Publications<br>by Scientists</a> </div> </div> </div> </div> <div class="col-5"> <div class="menu-stacked-items"> <div class="px-4"> <div class="position-relative d-flex align-items-center mb-2"> <img src="https://immunospot.com/media/images/menu/video-blue.png" alt="Video Library"><a class="ps-2" href="/resources/video-library">Video Library</a> </div> <div class="position-relative d-flex align-items-center"><img src="https://immunospot.com/media/images/menu/compliance.png" alt=""> <a class="ps-2" href="/about-ctl/compliance">Compliance</a></div> </div> </div> </div> </div></div></li><!-- close submenu-child --><li class="submenu-child"><!-- re-open submenu-child --><ul class="columns-group starter" style="width: auto"><li class="megamenu level1 nav-3-1 category-item first last disabled-link" data-test="test"><a href="javascript:void(0);" ><span>Anchor</span></a></li><span class="close columns-group last"></span></ul></li><!-- end submenu-child --></ul><!-- end submenu --></li><li class="megamenu level-top-boxed level0 nav-4 category-item level-top parent" data-test="test"><a href="https://immunospot.com/about-ctl" class="level-top" ><span>About Us</span></a><ul class="level0 submenu boxed hide-all-category has-menu-block top-block-child " style="display: none;"><li class="submenu-child"><div class="menu-block top-block block-container"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="row"> <div class="pr-0"> <div class="menu-row-items h-100 text-start"> <div class="px-4"> <div class="pb-1 menu-stacked-items d-flex align-items-center"> <img src="https://immunospot.com/media/images/menu/about-us-blue.png" alt=""> <a class="ps-2" href="/about-ctl/our-company">About CTL</a> </div> <a href="/about-ctl/our-company">Our Company</a> <br> <a href="/about-ctl/first-in-elispot">Leading ELISPOT</a> <br> <a href="/about-ctl/about-elispot">About ELISPOT</a> <br> <a href="/about-ctl/about-fluorospot">About Fluorospot</a> <br> <a class="w-100" href="/about-ctl/why-immunospot">Why ImmunoSpot®</a> <br> <a href="/about-ctl/careers">Careers</a> </div> </div> </div> </div></div></div></li><!-- close submenu-child --><li class="submenu-child"><!-- re-open submenu-child --><ul class="columns-group starter" style="width: auto"><li class="megamenu level1 nav-4-1 category-item first last disabled-link" data-test="test"><a href="javascript:void(0);" ><span>Anchor</span></a></li><span class="close columns-group last"></span></ul></li><!-- end submenu-child --></ul><!-- end submenu --></li><li class="megamenu level-top-boxed level0 nav-5 category-item last level-top parent" data-test="test"><a href="https://immunospot.com/contact-support/contact-us" class="level-top" ><span>Contact</span></a><ul class="level0 submenu boxed hide-all-category has-menu-block top-block-child " style="display: none;"><li class="submenu-child"><div class="menu-block top-block block-container"><div class="row"> <div class="pr-0"> <div class="menu-row-items h-100 text-start"> <div class="px-4"> <div class="pb-1 menu-stacked-items d-flex align-items-center"><img src="https://immunospot.com/media/images/menu/contact-blue.png" alt=""> <a class="ps-2" href="/contact-support/contact-us">Contact Us</a></div><a href="/contact-support/customer-support">Customer Support</a> <br><a href="/contact-support/service-contracts">Service Contracts</a> </div> </div> </div> </div></div></li><!-- close submenu-child --><li class="submenu-child"><!-- re-open submenu-child --><ul class="columns-group starter" style="width: auto"><li class="megamenu level1 nav-5-1 category-item first last disabled-link" data-test="test"><a href="javascript:void(0);" ><span>Anchor</span></a></li><span class="close columns-group last"></span></ul></li><!-- end submenu-child --></ul><!-- end submenu --></li> </ul> </nav> <div class="nav-accordion" id="nav-accordion"> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingOne"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne"> Products </button> </h2> </div> <div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/products/analyzers"> <span>ImmunoSpot® Analyzers</span> </a><br> <a href="https://immunospot.com/products/immunospot-kits-components"> <span>ImmunoSpot® Kits</span> </a><br> <a href="https://immunospot.com/products/kit-scanning-analysis"> <span>Kit Scanning & Analysis Services</span> </a><br> <a href="https://immunospot.com/products/epbmc"> <span>Cryopreserved PBMC</span> </a><br> <a href="https://immunospot.com/products/serum-free-media"> <span>Serum-free Media</span> </a><br> <a href="https://immunospot.com/products/positive-controls-tcell-activation"> <span>Positive Controls for T cell Activation</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingTwo"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Services </button> </h2> </div> <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/services/contract-laboratory-services"> <span>Contract Laboratory Services</span> </a><br> <a href="https://immunospot.com/services/training-consultation"> <span>Training & Consultation</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingThree"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree"> News & Resources </button> </h2> </div> <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/resources/news"> <span>News</span> </a><br> <a href="https://immunospot.com/resources/recent-publications"> <span>Publications by Scientists</span> </a><br> <a href="https://immunospot.com/resources/video-library"> <span>Video Library</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingFour"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseFour" aria-expanded="false" aria-controls="collapseFour"> Contact </button> </h2> </div> <div id="collapseFour" class="collapse" aria-labelledby="headingFour" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/contact-support/contact-us"> <span>Contact Us & Distributors</span> </a><br> <a href="https://immunospot.com/services/elispot-workshops"> <span>Enroll in ELISPOT Workshop</span> </a><br> <a href="https://immunospot.com/customer-support"> <span>Customer Support</span> </a><br> <a href="https://immunospot.com/service-contracts"> <span>Service Contracts</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingFive"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseFive" aria-expanded="false" aria-controls="collapseFive"> CTL Support </button> </h2> </div> <div id="collapseFive" class="collapse" aria-labelledby="headingFive" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/contact-support/customer-support"> <span>Customer Support</span> </a><br> <a href="https://immunospot.com/contact-support/service-contracts"> <span>Service Contracts</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingSix"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSix" aria-expanded="false" aria-controls="collapseSix"> About CTL </button> </h2> </div> <div id="collapseSix" class="collapse" aria-labelledby="headingSix" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/about-ctl/our-company"> <span>Our Company</span> </a><br> <a href="https://immunospot.com/about-ctl/first-in-elispot"> <span>Leading ELISPOT</span> </a><br> <a href="https://immunospot.com/about-ctl/about-elispot"> <span>About ELISPOT</span> </a><br> <a href="https://immunospot.com/about-ctl/about-fluorospot"> <span>About Fluorospot</span> </a><br> <a href="https://immunospot.com/about-ctl/why-immunospot"> <span>Why ImmunoSpot®</span> </a> <br> <a href="https://immunospot.com/about-ctl/careers"> <span>Career Opportunities</span> </a> </div> </div> </div> <div class="card border-0"> <div class="card-header bg-transparent border-0" id="headingSeven"> <h2 class="mb-0"> <button class="btn btn-link collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSeven" aria-expanded="false" aria-controls="collapseSeven"> Compliance </button> </h2> </div> <div id="collapseSeven" class="collapse" aria-labelledby="headingSeven" data-bs-parent="#nav-accordion"> <div class="card-body"> <a href="https://immunospot.com/about-ctl/compliance"> <span>Regulatory and Quality Assurance</span> </a> </a> </div> </div> </div> </div> </div> <div class="section-item-title nav-sections-item-title" data-role="collapsible"> <a class="nav-sections-item-switch" data-toggle="switch" href="#store.links"> Account </a> </div> <div class="section-item-content nav-sections-item-content" id="store.links" data-role="content"> <!-- Account links --> </div> </div> </div> <div id="algoliaAutocomplete" class="block block-search algolia-search-block algolia-search-input"></div> <div data-block="minicart" class="minicart-wrapper"> <a class="action showcart" href="https://immunospot.com/checkout/cart/" data-bind="scope: 'minicart_content'"> <span class="text">My Cart</span> <span class="counter qty empty" data-bind="css: { empty: !!getCartParam('summary_count') == false && !isLoading() }, blockLoader: isLoading"> <span class="counter-number"> <!-- ko if: getCartParam('summary_count') --> <!-- ko text: getCartParam('summary_count').toLocaleString(window.LOCALE) --><!-- /ko --> <!-- /ko --> </span> <span class="counter-label"> <!-- ko if: getCartParam('summary_count') --> <!-- ko text: getCartParam('summary_count').toLocaleString(window.LOCALE) --><!-- /ko --> <!-- ko i18n: 'items' --><!-- /ko --> <!-- /ko --> </span> </span> </a> <div class="block block-minicart" data-role="dropdownDialog" data-mage-init='{"dropdownDialog":{ "appendTo":"[data-block=minicart]", "triggerTarget":".showcart", "timeout": "2000", "closeOnMouseLeave": false, "closeOnEscape": true, "triggerClass":"active", "parentClass":"active", "buttons":[]}}'> <div id="minicart-content-wrapper" data-bind="scope: 'minicart_content'"> <!-- ko template: getTemplate() --><!-- /ko --> </div> </div> <script>window.checkout = {"shoppingCartUrl":"https:\/\/immunospot.com\/checkout\/cart\/","checkoutUrl":"https:\/\/immunospot.com\/checkout\/","updateItemQtyUrl":"https:\/\/immunospot.com\/checkout\/sidebar\/updateItemQty\/","removeItemUrl":"https:\/\/immunospot.com\/checkout\/sidebar\/removeItem\/","imageTemplate":"Magento_Catalog\/product\/image_with_borders","baseUrl":"https:\/\/immunospot.com\/","minicartMaxItemsVisible":5,"websiteId":"1","maxItemsToDisplay":10,"storeId":"1","storeGroupId":"1","agreementIds":["1"],"customerLoginUrl":"https:\/\/immunospot.com\/customer\/account\/login\/referer\/aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw%2C\/","isRedirectRequired":false,"autocomplete":"off","captcha":{"user_login":{"isCaseSensitive":false,"imageHeight":50,"imageSrc":"","refreshUrl":"https:\/\/immunospot.com\/captcha\/refresh\/","isRequired":false,"timestamp":1732685193}}}</script> <script type="text/x-magento-init"> { "[data-block='minicart']": { "Magento_Ui/js/core/app": {"components":{"minicart_content":{"children":{"subtotal.container":{"children":{"subtotal":{"children":{"subtotal.totals":{"config":{"display_cart_subtotal_incl_tax":0,"display_cart_subtotal_excl_tax":1,"template":"Magento_Tax\/checkout\/minicart\/subtotal\/totals"},"children":{"subtotal.totals.msrp":{"component":"Magento_Msrp\/js\/view\/checkout\/minicart\/subtotal\/totals","config":{"displayArea":"minicart-subtotal-hidden","template":"Magento_Msrp\/checkout\/minicart\/subtotal\/totals"}}},"component":"Magento_Tax\/js\/view\/checkout\/minicart\/subtotal\/totals"}},"component":"uiComponent","config":{"template":"Magento_Checkout\/minicart\/subtotal"}}},"component":"uiComponent","config":{"displayArea":"subtotalContainer"}},"item.renderer":{"component":"Magento_Checkout\/js\/view\/cart-item-renderer","config":{"displayArea":"defaultRenderer","template":"Magento_Checkout\/minicart\/item\/default"},"children":{"item.image":{"component":"Magento_Catalog\/js\/view\/image","config":{"template":"Magento_Catalog\/product\/image","displayArea":"itemImage"}},"checkout.cart.item.price.sidebar":{"component":"uiComponent","config":{"template":"Magento_Checkout\/minicart\/item\/price","displayArea":"priceSidebar"}}}},"extra_info":{"component":"uiComponent","config":{"displayArea":"extraInfo"}},"promotion":{"component":"uiComponent","config":{"displayArea":"promotion"}}},"config":{"itemRenderer":{"default":"defaultRenderer","simple":"defaultRenderer","virtual":"defaultRenderer"},"template":"Magento_Checkout\/minicart\/content"},"component":"Magento_Checkout\/js\/view\/minicart"}},"types":[]} }, "*": { "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fimmunospot.com\u002Fstatic\u002Fversion1728550059\u002Ffrontend\u002FForti\u002Fimmuno\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" } } </script> </div> </div></header><main id="maincontent" class="page-main-full-width"><div id="algolia-autocomplete-container"></div><a id="contentarea" tabindex="-1"></a> <div class="page messages"><div data-placeholder="messages"></div> <div data-bind="scope: 'messages'"> <!-- ko if: cookieMessages && cookieMessages.length > 0 --> <div aria-atomic="true" role="alert" data-bind="foreach: { data: cookieMessages, as: 'message' }" class="messages"> <div data-bind="attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"> <div data-bind="html: $parent.prepareMessageForHtml(message.text)"></div> </div> </div> <!-- /ko --> <!-- ko if: messages().messages && messages().messages.length > 0 --> <div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { data: messages().messages, as: 'message' }"> <div data-bind="attr: { class: 'message-' + message.type + ' ' + message.type + ' message', 'data-ui-id': 'message-' + message.type }"> <div data-bind="html: $parent.prepareMessageForHtml(message.text)"></div> </div> </div> <!-- /ko --> </div> <script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "messages": { "component": "Magento_Theme/js/view/messages" } } } } } </script> </div><div class="columns"><div class="header-product-section"><div class="header-product-container container mt-5"><div class="breadcrumbs"> <ul class="items font-size-sm"> <li class="item category3"> <a class="link-crumb" href="https://immunospot.com/products-filter.html" title=""> Products </a> </li> <li class="item category85"> <a class="link-crumb" href="https://immunospot.com/products-filter/analyzers.html" title=""> Analyzers </a> </li> </ul> </div> <div class="header-product-row row"><div class="col-lg-6 pt-0 pl-lg-3 pb-md-2 order-1 product-attributes-blocks"><div class="page-title-wrapper col-md-10 p-0  product"> <h1 class="page-title font-weight-normal" > <span class="base" data-ui-id="page-title-wrapper" itemprop="name"> ImmunoSpot® Software</span> </h1> </div> <div class="additional-attributes-wrapper table-wrapper"> <table class="data table additional-attributes" id="product-attribute-specs-table"> <caption class="table-caption">More Information</caption> <div data-th="Description Extra"><h3>Objective, scientifically validated counting of ELISPOT assays</h3><p><a href="https://vimeo.com/283731189/74659d97d4" target="_blank">Learn about the scientific basics.</a></p> <p>The cytokine footprints of individual antigen-specific T cells, and the resulting ELISPOTs, vary significantly in both size and intensity <a href="https://pubmed.ncbi.nlm.nih.gov/25612115/" target="_blank" rel="noreferrer noopener">[ref].</a> This wide range of naturally occurring spot sizes complicates the distinction of true signal (spots) generated by single antigen-stimulated T cells vs. the background noise (analyte secreted by cells of the innate immune system) or by clusters of closely situated cells. Here we review key publications dealing with the basic principles of the ImmunoSpot® Software that enable objective, scientifically-validated ELISPOT counting.</p> </div> </table> </div> <div class="product-add-form"> <form autocomplete="off" data-product-sku="immunospot-software" action="https://immunospot.com/checkout/cart/add/uenc/aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw%2C/product/809/" method="post" id="product_addtocart_form"> <input type="hidden" name="product" value="809" /> <input type="hidden" name="selected_configurable_option" value="" /> <input type="hidden" name="related_product" id="related-products-field" value="" /> <input type="hidden" name="item" value="809" /> <input name="form_key" type="hidden" value="jxubfNEdEYZ4my4F" /> <script type="text/x-magento-init"> { "#product_addtocart_form": { "Magento_Catalog/js/validate-product": {} } } </script> </form> </div> <script type="text/x-magento-init"> { "[data-role=priceBox][data-price-box=product-id-809]": { "priceBox": { "priceConfig": {"productId":"809","priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"tierPrices":[]} } } } </script> <div class="product-social-links"><div class="product-addto-links" data-role="add-to-links"> <script type="text/x-magento-init"> { "body": { "addToWishlist": {"productType":"simple"} } } </script> </div> <div class="widget block block-static-block"> <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="w-50"> <p><div class="pc_form_widget_view_0"> <div class="pccf-customer-data-scope" style="display:none" data-bind="scope: 'PCContactFormData'"> <div id="pccf_form_20" class="pccf default labelabove pc-customer-logged-out" style=";"> <img class="pccf_loader" src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/PluginCompany_ContactForms/img/gears-anim.gif" style="position:absolute;left:50%;top:50%;margin-left:-90px;margin-top:-80px"> <div class="form-view pccformwrapper panel panel-default " style="position:relative;visibility:visible;opacity: 1;"> <div class="panel-heading" style="text-align:center"> <h3 class="panel-title">Request Demo</h3> </div> <div class="panel-body" style="padding-top:14px"> <div class="messages"></div> <div class="form-horizontal pccform" method="post" action="https://immunospot.com/contactforms/form/submit/" data-mage-init='{"validation":{}}'> <fieldset> <!-- Form Name --><div class="form-group "> <label class="col-md-3 control-label" for="visualcaptcha">Visual Captcha</label> <div class="col-md-8 col-lg-8 visualcaptcha"> <div class="vcaptcha"></div> </div></div><!-- Text input--><div class="form-group col-md-10"> <label class="col-md-3 control-label" for="textinput">Request demo for:</label> <div class="col-md-8"> <input id="textinput" name="textinput" type="text" placeholder="Request demo for" class="form-control " value=""> </div></div><!-- Select Basic --><div class="form-group col-md-10"> <label class="col-md-3 control-label" for="selectbasic">Title</label> <div class="col-md-5"> <select id="selectbasic" name="selectbasic" class="form-control "> <option value="">Select Title</option> <option value="Mr.">Mr.</option> <option value="Mrs.">Mrs.</option> <option value="Miss">Miss</option> <option value="Dr.">Dr.</option> <option value="Ms.">Ms.</option> <option value="Prof.">Prof.</option> </select> </div></div><!-- Text input--><div class="form-group required-control col-md-10"> <label class="col-md-3 control-label" for="name">Name</label> <div class="col-md-8"> <input id="name" name="name" type="text" placeholder="" class="form-control required-entry " value=""> </div></div><!-- Text input--><div class="form-group required-control col-md-10"> <label class="col-md-3 control-label" for="email">E-mail</label> <div class="col-md-8"> <input id="email" name="email" type="text" placeholder="" class="form-control required-entry validate-email " value=""> </div></div><!-- Text input--><div class="form-group col-md-10"> <label class="col-md-3 control-label" for="phone">Phone</label> <div class="col-md-8"> <input id="phone" name="phone" type="text" placeholder="" class="form-control " value=""> </div></div><!-- Text input--><div class="form-group col-md-10"> <label class="col-md-3 control-label" for="textinput">Company</label> <div class="col-md-8"> <input id="textinput" name="textinput" type="text" placeholder="" class="form-control " value=""> </div></div><!-- Textarea --><div class="form-group col-md-10"> <label class="col-md-3 control-label" for="message">Message</label> <div class="col-md-8"> <textarea id="message" name="message" class="form-control " placeholder="Drop us a line . . ."></textarea> </div></div><!-- Multiple Radios (inline) --><div class="form-group required-control col-md-10"> <label class="col-md-3 control-label" for="contact">Preferred Contact Method</label> <div class="col-md-6"> <label class="radio-inline" for="contact-0"> <input type="radio" name="contact" id="contact-0" value="E-mail" checked> E-mail </label> <label class="radio-inline" for="contact-1"> <input type="radio" name="contact" id="contact-1" value="Phone"> Phone </label> </div></div><!-- Button --><div class="form-group submit-alt col-md-10"> <label class="col-md-3 control-label" for="submitform"></label> <div class="col-md-6"> <button id="submitform" name="submitform" type="submit" class="btn btn-primary">Submit</button> </div></div></fieldset> </div> </div> </div> </div> </div> </div> <script type="text/x-magento-init"> { ".pc_form_widget_view_0": { "PluginCompany_ContactForms/js/popup": {"formId":"20","theme":"default","recaptchaKey":"6LfQJaQgAAAAAA_LapkE4NhvF1OtjaDW_wctYzC-","uploadUrl":"https:\/\/immunospot.com\/contactforms\/form\/upload\/form_id\/20\/","removeUrl":"https:\/\/immunospot.com\/contactforms\/form\/removeupload\/form_id\/20\/","hasVCaptcha":true,"visualCaptcha":{"mainUrl":"https:\/\/immunospot.com\/contactforms\/form_visualcaptcha","imgUrl":"https:\/\/immunospot.com\/static\/version1728550059\/frontend\/Forti\/immuno\/en_US\/PluginCompany_ContactForms\/js\/lib\/visualcaptcha\/img\/"},"hasReCaptcha":false,"invisibleReCaptcha":false,"invisibleReCaptchaPosition":"bottomright","hasUploadField":false,"hasDependendFields":false,"dependentFields":"[]","submitJs":"\/\/enter javascript here","beforeSubmitJs":"\/\/enter javascript here","pageloadJs":"\/\/enter javascript here","rtl":false,"widget":{"type":"PluginCompany\\ContactForms\\Block\\Form\\Widget\\View","form_id":"20","show_form_as":"popup","display_as_button":"1","link_title":"Inquire about demo","wrap_in_block":"0","auto_hide_popup":"0","store_id":"1","module_name":"PluginCompany_ContactForms"},"maxUploadSize":512,"locale":"en-us"} } } </script> <script> window.cssMinificationEnabled = false; </script> </p> </div></div></div> </div></div><div class="col-lg-6 cs-content order-2 product-attributes-blocks"><div class="product media"><a id="gallery-prev-area" tabindex="-1"></a> <div class="action-skip-wrapper"><a class="action skip gallery-next-area" href="#gallery-next-area"> <span> Skip to the end of the images gallery </span> </a> </div> <img itemprop="image" class="hideImage" src="https://immunospot.com/media/catalog/product/cache/7453958c3dfbf544ee76e18b24d63693/d/4/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg" /> <div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder"> <img alt="main product photo" class="gallery-placeholder__image" src="https://immunospot.com/media/catalog/product/cache/7453958c3dfbf544ee76e18b24d63693/d/4/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg" /> </div> <script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "mage/gallery/gallery": { "mixins":["magnifier/magnify"], "magnifierOpts": {"fullscreenzoom":"20","top":"","left":"","width":"","height":"","eventType":"hover","enabled":false,"mode":"outside"}, "data": [{"thumb":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/941dd63e82451ff1c0c124353a21ac9b\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","img":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/7453958c3dfbf544ee76e18b24d63693\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","full":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/52f835e06adcb7aa46a798ced6233627\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","caption":" ImmunoSpot\u00ae Software","position":"1","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/941dd63e82451ff1c0c124353a21ac9b\/2\/7\/270187d9dab1e060862c3f0d3bdf2052ec69e1b7fcd91b833b7692546f43ee99.jpeg","img":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/7453958c3dfbf544ee76e18b24d63693\/2\/7\/270187d9dab1e060862c3f0d3bdf2052ec69e1b7fcd91b833b7692546f43ee99.jpeg","full":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/52f835e06adcb7aa46a798ced6233627\/2\/7\/270187d9dab1e060862c3f0d3bdf2052ec69e1b7fcd91b833b7692546f43ee99.jpeg","caption":" ImmunoSpot\u00ae Software","position":"2","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/941dd63e82451ff1c0c124353a21ac9b\/e\/3\/e31620cd8ad2e076cb8dcdaf0dc54a6dbde5422afe41bd155a29e765c63ee888.jpeg","img":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/7453958c3dfbf544ee76e18b24d63693\/e\/3\/e31620cd8ad2e076cb8dcdaf0dc54a6dbde5422afe41bd155a29e765c63ee888.jpeg","full":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/52f835e06adcb7aa46a798ced6233627\/e\/3\/e31620cd8ad2e076cb8dcdaf0dc54a6dbde5422afe41bd155a29e765c63ee888.jpeg","caption":" ImmunoSpot\u00ae Software","position":"3","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/941dd63e82451ff1c0c124353a21ac9b\/b\/2\/b25196fd6d91abce0915dbfbecfe8090db75ddc89d1c61eaa73de52a177b43fc.jpeg","img":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/7453958c3dfbf544ee76e18b24d63693\/b\/2\/b25196fd6d91abce0915dbfbecfe8090db75ddc89d1c61eaa73de52a177b43fc.jpeg","full":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/52f835e06adcb7aa46a798ced6233627\/b\/2\/b25196fd6d91abce0915dbfbecfe8090db75ddc89d1c61eaa73de52a177b43fc.jpeg","caption":" ImmunoSpot\u00ae Software","position":"4","isMain":false,"type":"image","videoUrl":null}], "options": {"nav":"dots","loop":true,"keyboard":true,"arrows":true,"allowfullscreen":true,"showCaption":false,"width":700,"thumbwidth":88,"thumbheight":110,"height":400,"transitionduration":500,"transition":"slide","navarrows":true,"navtype":"slides","navdir":"horizontal"}, "fullscreen": {"nav":"thumbs","loop":true,"navdir":"horizontal","navarrows":false,"navtype":"slides","arrows":true,"showCaption":false,"transitionduration":500,"transition":"slide"}, "breakpoints": {"mobile":{"conditions":{"max-width":"992px"},"options":{"options":{"nav":"dots"}}}} } } } </script> <style type="text/css"> .hideImage { display: none; } </style><script type="text/x-magento-init"> { "[data-gallery-role=gallery-placeholder]": { "Magento_ProductVideo/js/fotorama-add-video-events": { "videoData": [{"mediaType":"image","videoUrl":null,"isBase":true},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false},{"mediaType":"image","videoUrl":null,"isBase":false}], "videoSettings": [{"playIfBase":"0","showRelated":"0","videoAutoRestart":"0"}], "optionsVideoData": [] } } } </script> <div class="action-skip-wrapper"><a class="action skip gallery-prev-area" href="#gallery-prev-area"> <span> Skip to the beginning of the images gallery </span> </a> </div><a id="gallery-next-area" tabindex="-1"></a> </div></div></div></div></div><div class="column main container"><div class="product-info-main"><div class="product-info-price"><div class="product-info-stock-sku"> </div></div> <div class="product attribute overview"> <div class="value" itemprop="description"><div class="row mt-4"> <div class="col-lg-4 p-5 bg-secondary"><img class="figure-img img-fluid" src="https://immunospot.com/media/images/software/immunospot-software/application-of-spot-size-gating.png" /></div> <div class="col-lg-6 py-4 px-5 bg-secondary"> <p><em>Figure 2. Application of spot size gating for analysis of T cell ELISPOT results, here IFN-γ assay. In the top row (a) well images are shown for a test subject's PBMC with the media (negative) control well on the left, and a well containing the antigen on the right. In this test subject, like frequently in clinical samples, cytokine storms occurred resulting in a high medium IFN-γ background. Such background spots, produced by cells of the innate immune system are smaller than the antigen-induced spots produced by T cells. The scope of counting is to distinguish between the background spots and the antigen-induced spots, and to do so in an objective fashion. Counting all spots results in meaningless numbers (see mid panel, b). In the lower panel, c, the counts and overlays of counted spots with red outline) are shown after proper gating, using the ImmunoSpot® Software’s automated algorithm. The spot size/density distribution for the background spots is established, see the histogram on the left, and this is compared to the histogram of spot size/density distributions in the antigen-triggered well, see histogram on the right. The size/density distribution of spots exceeding the background distribution are subject to automated statistical analysis based upon which the upper and lower gates for counting are set automatically by the AutoGate™ function, assuming a log normal spot size/density distribution. We will detail in the following why the log normal assumption is valid for the scientific basis of objective gating and counting.</em></p> </div> <div class="col-md-10 mt-3"> <p>Figure 2 illustrates the challenge of T cell ELISPOT counting. In clinical samples, for example in IFN-γ ELISPOT assays, PBMC can exhibit substantial media background. This background is generated by cells of the innate immune system, in particular, activated macrophages and NK cells. Such background is elevated in diseased individuals undergoing cytokine storms. These spots are relatively small, compared to the signature of antigen-activated T cells. The scope of ELISPOT counting is to distinguish between this background noise and the antigen-induced T cell-derived spots, and to do so in an objective, reproducible way. This is done much like it would be done in flow cytometry. Counting spots without gating, as shown in the middle panel of Figure 2b, produces nonsensical numbers, much like flow cytometry results would without gating. With proper gating, however, the numbers of antigen-specific T cells can be identified (see lower panel, Figure 2c). In the following, we describe the scientific evidence that suggests that such gating can be done in an objective and scientifically-validated manner. CTL’s scientists, under the direction of Professor Paul V. Lehmann, have contributed over 200 publications to the field of ELISPOT research <a href="/pub/media/mageplaza/product_attachments/attachment_file/p/a/paul_lehmann-cv-3-25-2024.pdf">(see)</a> helping among other contributions to establish the rules for accurate automatic counting of antigen-specific T cell ELISPOT assays. Highlights are summarized in the following. In essence, the counting parameters are set automatically by the AutoGate™ function of the ImmunoSpot® Software, assuming a log normal spot size/density distribution for T cell derived spots. Here we will detail why the log normal assumption is valid for the objective counting of T cell ELISPOT assays.</p> </div> </div> <div class="row mt-4"> <div class="col-md-10"> <h3>The ELISPOT signature of cloned individual T cells</h3> <p>CTL’s initial efforts focused on studying the secretory signature of defined T cell populations, i.e., T cell clones. Such studies revealed a wide dynamic range in both the sizes and intensities of spots detected <a href="https://www.jimmunol.org/content/167/3/1353" target="_blank" rel="noreferrer noopener">[ref]</a>, (see Figure 3, extracted from that publication), that however followed a close to perfect log-normal size distribution. Importantly, it was necessary to count the full range of spots sizes per well to detect all T cells seeded into the well.</p> </div> <div class="col-md-4 d-flex justify-content-center py-4 bg-secondary"><img src="https://immunospot.com/media/images/software/immunospot-software/spot-size-categories.png" alt="" width="200" /></div> <div class="col-md-6 p-5 bg-secondary d-flex align-items-center"> <p><em>Figure 3. Secretory signature of a T cell clone reveals log normal ELISPOT size distribution. Even T cells with a uniform specificity, that are activated on a clonal population of antigen presenting cells (APC), and at a single concentration of peptide antigen, this wide range of spot sizes are generated that, as a population, however, follow a log-normal size distribution.</em></p> </div> </div> <div class="row mt-4"> <div class="col-md-10"> <h3>The ELISPOT signature of ex vivo isolated primary T cells</h3> <p>Follow-up studies focused attention on the less-defined, but more relevant, scenarios of cytokine signatures from T cells as seen in “normal ELISPOT assays”, studying cells from freshly isolated samples. We undertook a systematic study to verify whether log-normal size distributions were the rule in T cell ELISIPOT assays <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4381209/" target="_blank" rel="noreferrer noopener">[ref]</a>: we studied the spot morphologies of IFN-γ, IL-2, IL-4, IL-5 and IL-17 spots from ELISPOT assays using PBMC isolated from 172 healthy human donors following stimulation with 32 individual viral peptides representing defined HLA Class I-restricted epitopes for CD8 cell recall, and with protein antigens of CMV and EBV, activating CD4 cells. A total of 414 T cell recall responses were analyzed. In 99.7% of these cases, spot sizes followed log-normal distributions, firmly establishing log normal size distribution as a general rule for human T cell ELISPOT assay analysis.</p> </div> </div> <div class="row mt-4"> <div class="col-md-10"> <h3>Statistics-based objective ELISPOT counting</h3> <p>The above observations establishing log-normal spot size distribution as the rule in T cell ELISPOT assays allows the application of classic parametric statistics for objective ELISPOT counting <a href="/pub/media/mageplaza/product_attachments/attachment_file/z/h/zhang-mmb-155-171-ch13.pdf">[ref]</a>. When spot sizes (in log scale) for a given T cell population are normally distributed, it follows that each spot within 3 SD of the mean is derived, with 99.73% probability, from an individual antigen-specific T cell, and should be counted as such. Spots that are 3 SD below the mean spot size for a given assay are, with 99.73% probability, caused by non-T cell bystander cytokine secretion, or by artifacts, and should be excluded from being counted, as they are when using the ImmunoSpot® AutoGate™ function. Spots above the maximum size gate (> 3 SD above the mean spot size) are, with equivalent certainty, not produced by individual T cells, but rather result from cell clusters, and need to be counted as such. In this case, the Immunospot® Software automatically estimates the number of average sized individual spots required to form the oversized cluster in question, and the calculated number is included in the count for that well. ImmunoSpot® automatically establishes spot size distributions for both medium background (negative control) and antigen test wells, relying on user input and machine-learning tools to guide the statistical analysis for determining the minimum and maximum size gates. In this way, ImmunoSpot® provides objective, user-independent analysis of ELISPOT assays.</p> </div> </div> <div class="row mt-4"> <div class="col-md-10"> <h3>User- and ImmunoSpot® Reader- independent reproducibility of T cell ELISPOT counts</h3> <p>Nine independent laboratories were given, in turn, the exact same ELISPOT plate, which displayed a wide range and variance of spot counts between wells. These labs used their own ImmunoSpot® Readers (including different models) for image acquisition, but when relying on the SmartCount™ function (that includes SmartSpot® for objective setting of the counting parameters and SmartGate™ for objective gating) they all obtained essentially identical counts <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4381207/" target="_blank" rel="noreferrer noopener">[ref]</a>.</p> <p>For those who believe that subjective manual setting of counting parameters by experts might yet be more suitable for optimal counting, we would like to draw attention to a figure of the above publication that is reproduced here as Figure 4. In it, the ELISPOT experts in each of the nine laboratories were asked to recount the plate, but manually adjusting the counting parameters in an attempt to improve the accuracy of the machine-generated counts. Unsurprisingly, these subjectively counted results showed considerable inter-lab variation. However, the mean of the nine subjective counts corresponded precisely to the results generated by the ImmunoSpot® Software, that is, the latter corresponded to the consensus count of that subjectively established by the experts.</p> </div> </div> <div class="row mt-4"> <div class="col-md-10 px-5 py-4 bg-secondary"><img src="https://immunospot.com/media/images/software/immunospot-software/comparison-of-counting-results.png" alt="" width="550" /></div> <div class="col-md-10 px-5 py-1 bg-secondary d-flex justify-content-center"> <p><em>Figure 4. Comparison of counting results obtained from subjective/manual determination of counting parameters by 9 expert ELISPOT laboratories vs. the SmartCount™ statistics-based automated results generated by the ImmunoSpot® Software. The latter are shown in the thick black line. Results from the subjective counts are shown in grey with symbols to differentiate each of the 9 participating labs. Note that for each well the subjective counts for any given lab consistently either over- or under-estimate the counts generated automatically by SmartCount™. Also note that the automated results (in black) are close to identical for the 9 laboratories and correspond very closely to the average of all 9 subjective spot counts form all participating laboratories.</em></p> </div> </div> <div class="row mt-4"> <div class="col-md-10"> <h3>Advanced Quality Control features of the ImmunoSpot® Software</h3> <p>The statistics-based counting features described above enable objective automated counting. Over the ImmunoSpot® Software's > 25-year continuous evolution, numerous modules have been added to accommodate the increasingly complex daily challenges encountered in high-throughput ELISPOT data analysis, for both regulated and academic studies. For example, there are dedicated Quality Control tools available that account for individual variations of spot size distributions, e.g., in samples from patients undergoing immunotherapy (Verify Gate™ function), as well as to document and account for complications in physical assay performance, such as leaking wells or high/variable background in assay wells.</p> <p><a href="/regulatory-compliance-of-ctl-software">Learn more</a> about the regulatory compliance of the ImmunoSpot® Software.</p> <p><a href="/fluorox-software-suite.html">Learn more</a> about multi-color counting with CTL’s FluoroX Software.</p> </div> </div></div> </div> <div class="mp-attachment-container"> <h2>Documents</h2> <div class="mp-attachment-tab"> <ul> <li class="mp-attachment-tab__item"> <a target="_blank" href="https://immunospot.com/mpattachments/file/viewonline/id/389/product_id/809/" title="microarray_presentation"> <img src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Mageplaza_ProductAttachments/media/icons/file-default.png" alt="microarray_presentation"/> <span class="mp-attachment-tab__item__name"> microarray_presentation (554.88 KB) </span> </a> </li> <li class="mp-attachment-tab__item"> <a target="_blank" href="https://immunospot.com/mpattachments/file/viewonline/id/390/product_id/809/" title="scanning_microarrays_10-3"> <img src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Mageplaza_ProductAttachments/media/icons/file-default.png" alt="scanning_microarrays_10-3"/> <span class="mp-attachment-tab__item__name"> scanning_microarrays_10-3 (218.12 KB) </span> </a> </li> <li class="mp-attachment-tab__item"> <a target="_blank" href="https://immunospot.com/mpattachments/file/viewonline/id/391/product_id/809/" title="96-well-counting"> <img src="https://immunospot.com/static/version1728550059/frontend/Forti/immuno/en_US/Mageplaza_ProductAttachments/media/icons/file-default.png" alt="96-well-counting"/> <span class="mp-attachment-tab__item__name"> 96-well-counting (245.32 KB) </span> </a> </li> </ul> </div> <style> .mp-attachment-tab { margin-bottom: 25px; } .mp-attachment-tab ul { list-style-type: none; padding: 0; margin: 0; } .mp-attachment-tab__item { position: relative; margin-bottom: 1.5rem; margin-left: 10px; } .mp-attachment-tab__item img { width: 25px; } .mp-attachment-tab__item__name { position: absolute; top: 14%; font-size: 13px; padding-left: 10px; } #mp-attachments-sidebar .block-content { overflow: hidden; } </style> </div> </div> <div class="product info detailed"> <div class="product data items" data-mage-init='{"tabs":{"openedState":"active"}}'> <div class="data item title" data-role="collapsible" id="tab-label-description"> <a class="data switch" tabindex="-1" data-toggle="trigger" href="#description" id="tab-label-description-title"> Details </a> </div> <div class="data item content" aria-labelledby="tab-label-description-title" id="description" data-role="content"> <div class="product attribute description"> <div class="value" ><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div id="well-soft-slider_wrapper" style="width: 24rem;"> <div class="well-soft-slider" id="well-soft-slider"> <div class="item"> <h3 class="delay-3 fade-in position-absolute caption">369 counted</h3> <img class="rounded" src="https://immunospot.com/media/images/software/immunospot-software/e6-raw-1.jpg" alt="E6" /> <h5 class="position-absolute caption bottom">E6 Raw</h5> </div> <div class="item"> <h3 class="delay-3 fade-in position-absolute caption">351 counted</h3> <img class="rounded" src="https://immunospot.com/media/images/software/immunospot-software/d6-raw-3.jpg" alt="D6" /> <h5 class="position-absolute caption bottom">D6 Raw</h5> </div> <div class="item"> <h3 class="delay-3 fade-in position-absolute caption">745 counted</h3> <img class="rounded" src="https://immunospot.com/media/images/software/immunospot-software/e7-raw-5.jpg" alt="E7" /> <h5 class="position-absolute caption bottom">E7 Raw</h5> </div> <div class="item"> <h3 class="delay-3 fade-in position-absolute caption">627counted</h3> <img class="rounded" src="https://immunospot.com/media/images/software/immunospot-software/d7-raw-7.jpg" alt="D7" /> <h5 class="position-absolute caption bottom">D7 Raw</h5> </div> </div> </div></div></div> </div> </div> </div> </div> <input name="form_key" type="hidden" value="jxubfNEdEYZ4my4F" /><div id="authenticationPopup" data-bind="scope:'authenticationPopup', style: {display: 'none'}"> <script>window.authenticationPopup = {"autocomplete":"off","customerRegisterUrl":"https:\/\/immunospot.com\/customer\/account\/create\/","customerForgotPasswordUrl":"https:\/\/immunospot.com\/customer\/account\/forgotpassword\/","baseUrl":"https:\/\/immunospot.com\/","customerLoginUrl":"https:\/\/immunospot.com\/customer\/ajax\/login\/"}</script> <!-- ko template: getTemplate() --><!-- /ko --> <script type="text/x-magento-init"> { "#authenticationPopup": { "Magento_Ui/js/core/app": {"components":{"authenticationPopup":{"component":"Magento_Customer\/js\/view\/authentication-popup","children":{"messages":{"component":"Magento_Ui\/js\/view\/messages","displayArea":"messages"},"captcha":{"component":"Magento_Captcha\/js\/view\/checkout\/loginCaptcha","displayArea":"additional-login-form-fields","formId":"user_login","configSource":"checkout"},"recaptcha":{"component":"Magento_ReCaptchaFrontendUi\/js\/reCaptcha","displayArea":"additional-login-form-fields","reCaptchaId":"recaptcha-popup-login","settings":{"rendering":{"sitekey":"6LeOT5EcAAAAAHi4oucEmcs91zYtY-3SsXHt2B5y","badge":"inline","size":"invisible","theme":"light","hl":""},"invisible":true}}}}}} }, "*": { "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fimmunospot.com\u002Fstatic\u002Fversion1728550059\u002Ffrontend\u002FForti\u002Fimmuno\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" } } </script> </div> <script type="text/x-magento-init"> { "*": { "Magento_Customer/js/section-config": { "sections": {"stores\/store\/switch":["*"],"stores\/store\/switchrequest":["*"],"directory\/currency\/switch":["*"],"*":["messages","ms-couponcode-content"],"customer\/account\/logout":["*","recently_viewed_product","recently_compared_product","persistent"],"customer\/account\/loginpost":["*"],"customer\/account\/createpost":["*"],"customer\/account\/editpost":["*"],"customer\/ajax\/login":["checkout-data","cart","captcha","pc-customer-data"],"catalog\/product_compare\/add":["compare-products","gtm"],"catalog\/product_compare\/remove":["compare-products"],"catalog\/product_compare\/clear":["compare-products"],"sales\/guest\/reorder":["cart"],"sales\/order\/reorder":["cart"],"checkout\/cart\/add":["cart","directory-data","gtm"],"checkout\/cart\/delete":["cart","gtm"],"checkout\/cart\/updatepost":["cart"],"checkout\/cart\/updateitemoptions":["cart"],"checkout\/cart\/couponpost":["cart"],"checkout\/cart\/estimatepost":["cart"],"checkout\/cart\/estimateupdatepost":["cart"],"checkout\/onepage\/saveorder":["cart","checkout-data","last-ordered-items"],"checkout\/sidebar\/removeitem":["cart","gtm"],"checkout\/sidebar\/updateitemqty":["cart"],"rest\/*\/v1\/carts\/*\/payment-information":["cart","last-ordered-items","captcha","instant-purchase","gtm"],"rest\/*\/v1\/guest-carts\/*\/payment-information":["cart","captcha","gtm"],"rest\/*\/v1\/guest-carts\/*\/selected-payment-method":["cart","checkout-data"],"rest\/*\/v1\/carts\/*\/selected-payment-method":["cart","checkout-data","instant-purchase"],"customer\/address\/*":["instant-purchase"],"customer\/account\/*":["instant-purchase"],"vault\/cards\/deleteaction":["instant-purchase"],"multishipping\/checkout\/overviewpost":["cart"],"paypal\/express\/placeorder":["cart","checkout-data"],"paypal\/payflowexpress\/placeorder":["cart","checkout-data"],"paypal\/express\/onauthorization":["cart","checkout-data"],"persistent\/index\/unsetcookie":["persistent"],"review\/product\/post":["review"],"wishlist\/index\/add":["wishlist","gtm"],"wishlist\/index\/remove":["wishlist"],"wishlist\/index\/updateitemoptions":["wishlist"],"wishlist\/index\/update":["wishlist"],"wishlist\/index\/cart":["wishlist","cart","gtm"],"wishlist\/index\/fromcart":["wishlist","cart"],"wishlist\/index\/allcart":["wishlist","cart","gtm"],"wishlist\/shared\/allcart":["wishlist","cart"],"wishlist\/shared\/cart":["cart"],"braintree\/paypal\/placeorder":["cart","checkout-data"],"braintree\/googlepay\/placeorder":["cart","checkout-data"],"checkout\/cart\/configure":["gtm"],"rest\/*\/v1\/guest-carts\/*\/shipping-information":["gtm"],"rest\/*\/v1\/carts\/*\/shipping-information":["gtm"]}, "clientSideSections": ["checkout-data","cart-data"], "baseUrls": ["https:\/\/immunospot.com\/"], "sectionNames": ["messages","customer","compare-products","last-ordered-items","cart","directory-data","captcha","instant-purchase","loggedAsCustomer","persistent","review","wishlist","ms-couponcode-content","pc-customer-data","gtm","recently_viewed_product","recently_compared_product","product_data_storage","paypal-billing-agreement"] } } } </script> <script type="text/x-magento-init"> { "*": { "Magento_Customer/js/customer-data": { "sectionLoadUrl": "https\u003A\u002F\u002Fimmunospot.com\u002Fcustomer\u002Fsection\u002Fload\u002F", "expirableSectionLifetime": 60, "expirableSectionNames": ["cart","persistent"], "cookieLifeTime": "3600", "updateSessionUrl": "https\u003A\u002F\u002Fimmunospot.com\u002Fcustomer\u002Faccount\u002FupdateSession\u002F" } } } </script> <script type="text/x-magento-init"> { "*": { "Magento_Customer/js/invalidation-processor": { "invalidationRules": { "website-rule": { "Magento_Customer/js/invalidation-rules/website-rule": { "scopeConfig": { "websiteId": "1" } } } } } } } </script> <script type="text/x-magento-init"> { "body": { "pageCache": {"url":"https:\/\/immunospot.com\/page_cache\/block\/render\/id\/809\/","handles":["default","catalog_product_view","catalog_product_view_type_simple","catalog_product_view_id_809","catalog_product_view_sku_immunospot-software","algolia_search_handle","algolia_search_handle_with_topsearch"],"originalRequest":{"route":"catalog","controller":"product","action":"view","uri":"\/immunospot-software.html"},"versionCookieName":"private_content_version"} } } </script> <script type="text/x-magento-init"> { "body": { "requireCookie": {"noCookieUrl":"https:\/\/immunospot.com\/cookie\/index\/noCookies\/","triggers":[".action.towishlist"],"isRedirectCmsPage":true} } } </script> <script type="text/x-magento-init"> { "*": { "Magento_Catalog/js/product/view/provider": { "data": {"items":{"809":{"add_to_cart_button":{"post_data":"{\"action\":\"https:\\\/\\\/immunospot.com\\\/checkout\\\/cart\\\/add\\\/uenc\\\/%25uenc%25\\\/product\\\/809\\\/\",\"data\":{\"product\":\"809\",\"uenc\":\"%uenc%\"}}","url":"https:\/\/immunospot.com\/checkout\/cart\/add\/uenc\/%25uenc%25\/product\/809\/","required_options":false},"add_to_compare_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/immunospot.com\\\/catalog\\\/product_compare\\\/add\\\/\",\"data\":{\"product\":\"809\",\"uenc\":\"aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw,\"}}","required_options":null},"price_info":{"final_price":0,"max_price":0,"max_regular_price":0,"minimal_regular_price":0,"special_price":null,"minimal_price":0,"regular_price":0,"formatted_prices":{"final_price":"<span class=\"price\">$0.00<\/span>","max_price":"<span class=\"price\">$0.00<\/span>","minimal_price":"<span class=\"price\">$0.00<\/span>","max_regular_price":"<span class=\"price\">$0.00<\/span>","minimal_regular_price":null,"special_price":null,"regular_price":"<span class=\"price\">$0.00<\/span>"},"extension_attributes":{"msrp":{"msrp_price":"<span class=\"price\">$0.00<\/span>","is_applicable":"","is_shown_price_on_gesture":"","msrp_message":"","explanation_message":"Our price is lower than the manufacturer's "minimum advertised price." As a result, we cannot show you the price in catalog or the product page. <br><br> You have no obligation to purchase the product once you know the price. You can simply remove the item from your cart."},"tax_adjustments":{"final_price":0,"max_price":0,"max_regular_price":0,"minimal_regular_price":0,"special_price":0,"minimal_price":0,"regular_price":0,"formatted_prices":{"final_price":"<span class=\"price\">$0.00<\/span>","max_price":"<span class=\"price\">$0.00<\/span>","minimal_price":"<span class=\"price\">$0.00<\/span>","max_regular_price":"<span class=\"price\">$0.00<\/span>","minimal_regular_price":null,"special_price":"<span class=\"price\">$0.00<\/span>","regular_price":"<span class=\"price\">$0.00<\/span>"}},"weee_attributes":[],"weee_adjustment":"<span class=\"price\">$0.00<\/span>"}},"images":[{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/5400799395efa676cdf8a9f2110724cf\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_viewed_products_grid_content_widget","height":300,"width":240,"label":" ImmunoSpot\u00ae Software","resized_width":240,"resized_height":300},{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/83fae886ac6bf3639f673f892954b468\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_viewed_products_list_content_widget","height":340,"width":270,"label":" ImmunoSpot\u00ae Software","resized_width":270,"resized_height":340},{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/ac53f6ae6524f4ecef925ce67835248f\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_viewed_products_images_names_widget","height":90,"width":75,"label":" ImmunoSpot\u00ae Software","resized_width":75,"resized_height":90},{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/5400799395efa676cdf8a9f2110724cf\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_compared_products_grid_content_widget","height":300,"width":240,"label":" ImmunoSpot\u00ae Software","resized_width":240,"resized_height":300},{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/83fae886ac6bf3639f673f892954b468\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_compared_products_list_content_widget","height":340,"width":270,"label":" ImmunoSpot\u00ae Software","resized_width":270,"resized_height":340},{"url":"https:\/\/immunospot.com\/media\/catalog\/product\/cache\/ac53f6ae6524f4ecef925ce67835248f\/d\/4\/d45c0c4fae7cb052170dbb829d2ec1c3a2a26110495ea049401c05eb35637ef2.jpeg","code":"recently_compared_products_images_names_widget","height":90,"width":75,"label":" ImmunoSpot\u00ae Software","resized_width":75,"resized_height":90}],"url":"https:\/\/immunospot.com\/immunospot-software.html","id":809,"name":" ImmunoSpot\u00ae Software","type":"simple","is_salable":"","store_id":1,"currency_code":"USD","extension_attributes":{"review_html":"","wishlist_button":{"post_data":null,"url":"{\"action\":\"https:\\\/\\\/immunospot.com\\\/wishlist\\\/index\\\/add\\\/\",\"data\":{\"product\":809,\"uenc\":\"aHR0cHM6Ly9pbW11bm9zcG90LmNvbS9pbW11bm9zcG90LXNvZnR3YXJlLmh0bWw,\"}}","required_options":null}},"is_available":false}},"store":"1","currency":"USD","productCurrentScope":"website"} } } } </script> <div id="itoris_dynamicproductoptions_add_to_cart_configure" style="display: none;"> <button type="button" class="button"> <span><span>Configure</span></span> </button> </div> <div id="itoris_dynamicproductoptions_popup_mask" style="display: none;"></div> <div id="itoris_dynamicproductoptions_popup" style="display: none;"> <div id="itoris_dynamicproductoptions_popup_close_icon"></div> <div class="popup-title">Configure ImmunoSpot® Software</div> <div id="itoris_dynamicproductoptions"> </div> <div class="product-options-bottom"> <button id="itoris_dynamicproductoptions_popup_button_cancel" type="button" class="button"><span><span>Cancel</span></span></button> <div class="add-to-box"> <span id="itoris_dynamicproductoptions_popup_price"></span> <button id="itoris_dynamicproductoptions_popup_button_apply" type="button" class="button"><span><span>Apply</span></span></button> <span class="or">OR</span> <div class="add-to-cart"> <label for="qty">Qty:</label> <input type="text" name="qty" id="itoris_dynamicoptions_qty" maxlength="12" value="" title="Qty" class="input-text qty" /> <button type="button" title="Add to Cart" id="itoris_dynamicoptions_add_to_cart" class="button btn-cart"><span><span>Add to Cart</span></span></button> </div> </div> </div> </div> <div id="itoris_dynamicproductoptions_configuration" style="display: none;"> <ul></ul> <button id="itoris_dynamicproductoptions_button_edit" type="button" class="button"><span><span>Edit</span></span></button> </div> <script type="text/javascript"> require(['jquery','prototype','Itoris_DynamicProductOptions/js/options'], function(jQuery, _, dpo) { window.opConfig809 = []; window.dynamicOptions809 = jQuery.extend({}, window.DynamicProductOptions); window.dynamicOptions809.initialize({"form_style":"table_sections","appearance":"on_product_view","absolute_pricing":"0","absolute_sku":"0","sku_order":"","absolute_weight":"0","product_id":"809","is_configured":false,"is_grouped":false,"option_errors":[],"error_message":"","product_type":"simple","configure_product_message":"Please configure the product","out_of_stock_message":"out of stock","section_conditions":[],"options_qty":[],"extra_js":""}, [], 0, [], {"Qty":"Qty","Buy %1 for %2 each":"Buy %1 for %2 each","Search...":"Search...","Sorry, nothing found...":"Sorry, nothing found...","Was: %1":"Was: %1","Stock availability: %1":"Stock availability: %1"}, {taxRate: 1, priceAlreadyIncludesTax: 0, displayPriceMode: 1}); }); </script> <div id="frequentlyBoughtTogether" class="recommend-component"></div> <div id="relatedProducts" class="recommend-component"></div> <div id="trendItems" class="trendsItem recommend-component"></div> <script> require([ 'jquery', 'domReady!' ], function($){ window.algoliObjectId = ["809"]; }); </script> <script type="text/x-magento-init"> { "[data-role=tocart-form]": { "catalogAddToCart": {} } } </script> </div></div></main><footer class="page-footer"><div class="footer content"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="row no-gutters font-size-sm"> <div class="col-md-4 col-lg-3 mt-1"><img src="https://immunospot.com/media/images/logo/immunospot_logo_black.png" alt=""> <p>20521 Chagrin Boulevard <br>Shaker Heights, Cleveland, <br>OH 44122-5350 USA</p> <p>Tel: +1 216-791-5084<br>US Toll Free: +1 888-791-4005<br>Fax: +1 216-751-1373</p> </div> <div class="col-md-4 mt-1 col-lg-2"> <h5>Products</h5> <ul class="compact"> <li><a href="/products/analyzers">Analyzers & software</a></li> <li><a href="/products/immunospot-kits-components">Kits & components</a></li> <li><a href="/products/epbmc">ePBMC</a></li> <li><a href="/products/serum-free-media">Serum-free media</a></li> <li><a href="/products/positive-controls-tcell-activation">Positive controls for T cell activation</a></li> </ul> </div> <div class="col-md-4 mt-1 col-lg-2 pr-4"> <h5>Services</h5> <ul class="compact"> <li><a href="/services/contract-laboratory-services">Contract laboratory services</a></li> <li><a href="/services/training-consultation">Training & consultation</a></li> <li><a href="/products/kit-scanning-analysis">ELISPOT/FluoroSpot plate analysis</a></li> <li><a href="/services/elispot-proficiency-testing">ELISPOT/FluoroSpot proficiency testing</a></li> </ul> </div> <div class="col-md-4 mt-1 col-lg-2"> <h5>Resources</h5> <ul class="compact"> <li><a href="/resources/news">Latest news from CTL</a></li> <li><a href="/resources/recent-publications">Latest publications</a></li> <li><a href="/terms-and-conditions">Terms and conditons of Sale of Products</a></li> <li><a href="/privacy-policy">Privacy policy</a></li> <li><a href="/sitemap">Site map</a></li> <li><a href="/website-terms-of-use">Website Terms of Use</a></li> </ul> </div> <div class="col-md-4 mt-1 col-lg-2"> <h5>Contact</h5> <ul class="compact"> <li><a href="/contact-support/contact-us">General contact</a></li> <li><a href="/contact-support/contact-us">Distributors</a></li> <li><a href="/careers">Careers</a></li> <li><a href="/contact-support/contact-elispot-workshop">ELISPOT workshops</a></li> <li><a href="/contact-support/customer-support">Customer support</a></li> </ul> </div> <div class="col-md-4 mt-1 col-lg-1"> <h5>Social</h5> <ul class="compact"> <li class="mb-1"><a title="Linkedin" href="https://www.linkedin.com/company/cellular-technology-ltd./" target="_blank" rel="noreferrer noopener"><img src="https://immunospot.com/media/images/footer/linkedin-footer-grey.png" alt="Follow Us on LinkedIn" width="40" height="40"></a></li> <li class=""><a title="YouTube" href="https://www.youtube.com/user/ImmunoSpot/videos" target="_blank" rel="noreferrer noopener"><img src="https://immunospot.com/media/images/footer/youtube-footer-grey.png" alt="Follow Us on YouTube" width="40" height="40"></a></li> </ul> </div> </div> <div class="“row text-center mt-3 font-size-sm"><a href="/terms-and-conditions">Terms and conditions | </a> <a href="/privacy-policy">Privacy policy | </a> Copyright ©<script>document.write(new Date().getFullYear())</script> Cellular Technology Limited</div> <a class="btn-scroll-top" href="#top" data-scroll data-fixed-element><span class="btn-scroll-top-tooltip text-muted fs-sm me-2">Top</span><i class="btn-scroll-top-icon ai-arrow-up"> </i></a></div><div class="field-recaptcha" id="recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796-container" data-bind="scope:'recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796'" > <!-- ko template: getTemplate() --><!-- /ko --> </div> <script> require(['jquery', 'domReady!'], function ($) { $('#recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796-container') .appendTo('#newsletter-validate-detail'); }); </script> <script type="text/x-magento-init"> { "#recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796-container": { "Magento_Ui/js/core/app": {"components":{"recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796":{"settings":{"rendering":{"sitekey":"6LeOT5EcAAAAAHi4oucEmcs91zYtY-3SsXHt2B5y","badge":"inline","size":"invisible","theme":"light","hl":""},"invisible":true},"component":"Magento_ReCaptchaFrontendUi\/js\/reCaptcha","reCaptchaId":"recaptcha-caa20ac351216e6f76edced1efe7c61fff5f4796"}}} } } </script> </div></footer> <script type="text/x-magento-init"> {"*": {"Magento_Ui/js/core/app": {"components":{"couponCodeContent":{"component":"Mageside_CouponCodeLink\/js\/content","contentType":"1"}}}}} </script> <script type="text/x-magento-init"> { "*": { "Magento_Ui/js/core/app": { "components": { "storage-manager": { "component": "Magento_Catalog/js/storage-manager", "appendTo": "", "storagesConfiguration" : {"recently_viewed_product":{"requestConfig":{"syncUrl":"https:\/\/immunospot.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"recently_compared_product":{"requestConfig":{"syncUrl":"https:\/\/immunospot.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"product_data_storage":{"updateRequestConfig":{"url":"https:\/\/immunospot.com\/rest\/default\/V1\/products-render-info"},"requestConfig":{"syncUrl":"https:\/\/immunospot.com\/catalog\/product\/frontend_action_synchronize\/"},"allowToSendRequest":null}} } } } } } </script> <script> window.screenM = '768'; window.widthThreshold = '1315'; require(['jquery', 'navigationJs' ], function ($, navigationJs) { $(document).ready(function() { navigationJs.init(); $(window).on('resize', function() { navigationJs.init(); }); }); }); </script> <script> require(['jquery', 'supscript'], function($, supscript) { supscript(); }); </script> <script type="text/x-magento-init"> { "*": { "Magento_Theme/js/theme.min": {} } } </script> <script> require(['jquery', 'chartjs'], function() { if (document.querySelectorAll('#Chart1').length > 0) { var ctx = document.getElementById('Chart1'); var Chart1 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-466', data: [78, 72, 47, 30, 17, 12, 2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart2').length > 0) { var ctx = document.getElementById('Chart2'); var Chart2 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-465', data: [80, 71, 49, 28, 19, 3, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart3').length > 0) { var ctx = document.getElementById('Chart3'); var Chart3 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-453', data: [59, 41, 12, 2, 0, 0, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart4').length > 0) { var ctx = document.getElementById('Chart4'); var Chart4 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-448', data: [78, 37, 21, 13, 9, 0, 8], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart5').length > 0) { var ctx = document.getElementById('Chart5'); var Chart5 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-447', data: [65, 33, 21, 8, 8, 7, 2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart6').length > 0) { var ctx = document.getElementById('Chart6'); var Chart6 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-446', data: [80, 75, 59, 42, 21, 19, 15], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart7').length > 0) { var ctx = document.getElementById('Chart7'); var Chart7 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-438', data: [62, 31, 19, 9, 3, 2, -8], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart8').length > 0) { var ctx = document.getElementById('Chart8'); var Chart8 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-435', data: [59, 33, 13, 9, 1, 1, -2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart9').length > 0) { var ctx = document.getElementById('Chart9'); var Chart9 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-441', data: [72, 40, 17, 7, 8, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart10').length > 0) { var ctx = document.getElementById('Chart10'); var Chart10 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-433', data: [57, 48, 22, 13, 7, 3, 0], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart11').length > 0) { var ctx = document.getElementById('Chart11'); var Chart11 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-425', data: [54, 35, 10, 8, 1, 2, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart12').length > 0) { var ctx = document.getElementById('Chart12'); var Chart12 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-424', data: [70, 50, 28, 13, 9, 5, 4], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart13').length > 0) { var ctx = document.getElementById('Chart13'); var Chart13 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-406', data: [63, 39, 23, 14, 4, 5, 5], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart14').length > 0) { var ctx = document.getElementById('Chart14'); var Chart14 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-404', data: [60, 35, 25, 14, 5, 8, 3], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart15').length > 0) { var ctx = document.getElementById('Chart15'); var Chart15 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-401', data: [65, 38, 18, 15, 5, 8, 3], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart16').length > 0) { var ctx = document.getElementById('Chart16'); var Chart16 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-394', data: [50, 28, 18, 9, 3, 1, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart17').length > 0) { var ctx = document.getElementById('Chart17'); var Chart17 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-393', data: [73, 44, 24, 15, 8, 4, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart18').length > 0) { var ctx = document.getElementById('Chart18'); var Chart18 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-391', data: [75, 49, 31, 18, 11, 3], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart19').length > 0) { var ctx = document.getElementById('Chart19'); var Chart19 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-390', data: [60, 38, 21, 12, 10, 5], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart20').length > 0) { var ctx = document.getElementById('Chart20'); var Chart20 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-387', data: [72, 39, 24, 12, 5, 4, 6], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart21').length > 0) { var ctx = document.getElementById('Chart21'); var Chart21 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-386', data: [52, 34, 18, 11, 3, 4, 5], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart22').length > 0) { var ctx = document.getElementById('Chart22'); var Chart22 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-385', data: [58, 29, 19, 12, 3, 0, 4], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart23').length > 0) { var ctx = document.getElementById('Chart23'); var Chart23 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-381', data: [80, 68, 42, 23, 11, 5, 0], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart24').length > 0) { var ctx = document.getElementById('Chart24'); var Chart24 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-372', data: [80, 65, 43, 30, 14, 10, 8], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart25').length > 0) { var ctx = document.getElementById('Chart25'); var Chart25 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-371', data: [68, 33, 20, 8, 5, 1, -8], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart26').length > 0) { var ctx = document.getElementById('Chart26'); var Chart26 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-368', data: [74, 49, 27, 18, 9, 2, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart27').length > 0) { var ctx = document.getElementById('Chart27'); var Chart27 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-367', data: [80, 61, 41, 27, 14, 3, 1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart28').length > 0) { var ctx = document.getElementById('Chart28'); var Chart28 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-366', data: [56, 37, 22, 8, 2, -1, -1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart29').length > 0) { var ctx = document.getElementById('Chart29'); var Chart29 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-355', data: [75, 69, 44, 21, 11, 8, 2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart30').length > 0) { var ctx = document.getElementById('Chart30'); var Chart30 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP-353', data: [59, 39, 18, 9, 2, 7, -1], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart31').length > 0) { var ctx = document.getElementById('Chart31'); var Chart31 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP349', data: [59, 37, 18, 2, -2, -3, -4], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart32').length > 0) { var ctx = document.getElementById('Chart32'); var Chart32 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP341', data: [56, 40, 19, 10, 7, 2, -2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } if (document.querySelectorAll('#Chart33').length > 0) { var ctx = document.getElementById('Chart33'); var Chart33 = new Chart(ctx, { type: 'line', data: { labels: ["", "", "", "", "", "", ""], datasets: [{ label: 'LP98', data: [73, 53, 40, 25, 15, 9, 2], fill: false, borderColor: 'rgb(75, 192, 192)', tension: 0.1, }] }, options: { responsive: true, interaction: { intersect: false, }, scales: { x: { display: true, title: { display: true, text: 'Effector: Target Ratio' }, }, y: { display: true, title: { display: true, text: '%Killing' }, } } }, }); } }); </script> <script> require(['jquery', 'tinyslider'], function() { if (document.querySelectorAll('.front-header-slider').length > 0) { const front = tns({ "container": ".front-header-slider", "controls": false, "navPosition": "bottom", "autoplay": true, "autoplayButtonOutput": false, "autoplayTimeout": 3000, "autoplayHoverPause": false }); } if (document.querySelectorAll('.well-soft-slider').length > 0) { const well = tns({ "container": ".well-soft-slider", "gutter": 15, "controls": false, "navPosition": "bottom", "autoplay": true, "autoplayButtonOutput": false, "autoplayTimeout": 3000, "autoplayHoverPause": false }); } if (document.querySelectorAll('.comment-slider').length > 0) { const well = tns({ "container": ".comment-slider", "gutter": 15, "controls": false, "nav": false, "autoplay": true, "autoplayButtonOutput": false, "autoplayTimeout": 5000, "autoplayHoverPause": false }); } if (document.querySelectorAll('#nested').length > 0) { const outer = tns({ "container": "#nested", "gutter": 15, "controls": false, "navPosition": "bottom", "autoplay": true, "autoplayTimeout": 3500, "autoplayButtonOutput": false, "autoplayHoverPause": false }); } if (document.querySelectorAll('.header-slider').length > 0) { const header = tns({ "container": ".header-slider", "mode": "gallery", "nav": false, "controls": false, "autoplay": true, "autoplayButtonOutput": false, "autoplayTimeout": 3000, "autoplayHoverPause": false }); } if (document.querySelectorAll('.gallery-slider').length > 0) { const tnsCarousel = document.querySelectorAll('.gallery-slider'); tnsCarousel.forEach(slider => { const tnsSlider = tns({ container: slider, "mode": "gallery" }); }); } if (document.querySelectorAll('.world-soft-slider').length > 0) { const world = tns({ "container": ".world-soft-slider", "gutter": 15, "controls": false, "navPosition": "top", "autoplay": true, "autoplayTimeout": 3000, "autoplayHoverPause": false }); } }); function resetFunction() { document.querySelector('[aria-label="Carousel Page 1"]').click() document.querySelector('[data-action="start"]').click() } </script> <script type="text/javascript">require(['fancybox']);</script> <script> require(['jquery'], function($){ $(document).ready(function(){ $(".field .options-list #options_2684_2").click(function() { $('#96-well-white').toggleClass("swap-on swap-off"); $('#96-well-strip').addClass("swap-off"); $('#384-well-white').addClass("swap-off"); }); $(".field .options-list #options_2684_3").click(function() { $('#96-well-strip').toggleClass('swap-on swap-off'); $('#96-well-white').addClass("swap-off"); $('#384-well-white').addClass("swap-off"); }); $(".field .options-list #options_2684_4").click(function() { $('#384-well-white').toggleClass('swap-on swap-off'); $('#96-well-white').addClass("swap-off"); $('#96-well-strip').addClass("swap-off"); }); }); }); </script> <!-- Wrapping template --> <script type="text/template" id="instant_wrapper_template"> {{#findAutocomplete}} <div id="algolia-autocomplete-container"></div> {{/findAutocomplete}} <div id="algolia_instant_selector" class=" with-facets"> <div class="row"> <div class="col-md-4" id="algolia-left-container"> <div id="refine-toggle" class="visible-xs visible-sm"> + Refine </div> <div class="hidden-xs hidden-sm" id="instant-search-facets-container"> <div id="clear-refinements"></div> <h3 class="filter_heading">Filters</h3> </div> </div> <div class="col-md-8" id="algolia-right-container"> <div class="row"> <div class="col-md-12"> <div> {{#second_bar}} <div id="instant-search-bar"></div> {{/second_bar}} </div> </div> </div> <div class="row"> <div class="col-md-12"> <div itemscope itemtype="http://schema.org/ItemList" class="hits"> <div class="algolia-infos"> <div class="pull-left" id="algolia-stats"></div> <div class="pull-right"> <div class="sort-by-label pull-left"> <h4>SORT BY </h4> </div> <div class="pull-left" id="algolia-sorts"></div> </div> <div class="algolia-clearfix"></div> </div> <div id="algolia-banner"></div> <div id="current-refinements"></div> <div id="instant-empty-results-container"></div> <div id="instant-search-results-container"></div> </div> </div> <div class="algolia-clearfix"></div> </div> <div class="text-center"> <div id="instant-search-pagination-container"></div> </div> </div> </div> </div> </script> <script type="text/template" id="instant-hit-template"> <a class="col-md-12" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" {{^__queryID}} href="{{url}}" {{/__queryID}} {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}} data-objectid="{{objectID}}" data-indexname="{{__indexName}}" data-position="{{__position}}" data-queryid="{{__queryID}}"> <meta itemprop="position" content="{{__position}}" /> <div class="result-wrapper" itemprop="item" itemscope itemtype="http://schema.org/Product"> <meta itemprop="url" {{^__queryID}} content="{{url}}" {{/__queryID}} {{#__queryID}} content="{{urlForInsights}}" {{/__queryID}} /> <div class="result-content row"> <div class="result-thumbnail col-md-3"> <a class="result" {{^__queryID}} href="{{url}}" {{/__queryID}} {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}} data-objectid="{{objectID}}" data-indexname="{{__indexName}}" data-position="{{__position}}" data-queryid="{{__queryID}}"> {{#image_url}}<img itemprop="image" src="{{{image_url}}}" alt="{{{name}}}" />{{/image_url}} {{^image_url}}<span class="no-image"></span>{{/image_url}} </a> </div> <div class="result-sub-content col-md-9"> <a class="result" {{^__queryID}} href="{{url}}" {{/__queryID}} {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}} data-objectid="{{objectID}}" data-indexname="{{__indexName}}" data-position="{{__position}}" data-queryid="{{__queryID}}"> <div class="row"> <div class="col-md-12"> <h5 itemprop="name" class="result-title-categires"> <span class=""> {{{categories}}}</span> </h5> </div> </div> <div class="row"> <div class="col-md-12"> <h3 itemprop="name" class="result-title"> {{{ _highlightResult.name.value }}} </h3> </div> </div> <div class="catalog-list-item__list"> <div class="catalog_list-item__attribute"> <div class="price-wrapper"> <div> {{#price}} <span class="after_special hide"> Starting at {{{custom_price}}} </span> {{/price}} </div> </div> </div> </div> <div class="catalog-list-item__actions"> {{#isAddToCartEnabled}} <form data-role="tocart-form" action="{{ addToCart.action }}" method="post"> <input type="hidden" name="product" value="{{objectID}}"> <input type="hidden" name="uenc" value="{{ addToCart.uenc }}"> <input name="form_key" type="hidden" value="{{ addToCart.formKey }}"> <button type="submit" title="Add to Cart" class="action tocart primary" data-objectid="{{objectID}}" data-indexname="{{__indexName}}" data-position="{{__position}}" data-queryid="{{__queryID}}" > <span>Add to Cart</span> </button> </form> {{/isAddToCartEnabled}} </div> </a> </div> </div> <div class="algolia-clearfix"></div> </div> </a> </script> <script type="text/template" id="instant-stats-template"> {{#hasOneResult}}<strong>1</strong>result found{{/hasOneResult}} {{#hasManyResults}} {{^hasNoResults}}{{last}} of{{/hasNoResults}} <span itemprop="numberOfItems">{{nbHits}}</span> products {{/hasManyResults}} </script> <script type="text/template" id="refinements-lists-item-template"> <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}}"> <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" /> {{value}} <span class="{{cssClasses.count}}">{{count}}</span> </label> </script><script type="text/template" id="current-refinements-template"> <div class="cross-wrapper"> <span class="clear-cross clear-refinement"></span> </div> <div class="current-refinement-wrapper"> {{#label}} <span class="current-refinement-label">{{label}}{{^operator}}:{{/operator}}</span> {{/label}} {{#operator}} {{{displayOperator}}} {{/operator}} {{#exclude}}-{{/exclude}} <span class="current-refinement-name">{{name}}</span> </div> </script><small class="copyright"> <span></span> </small> </div> <script> require(['jquery','weltpixel_persistentLayer', 'weltpixel_gtm', 'Magento_Customer/js/customer-data'], function ($, wpPersDl, wpgtm, customerData) { $( document ).ajaxComplete(function( event, xhr, settings ) { if (settings.url.search('/customer\/section\/load/') > 0) { var response = xhr.responseJSON; if (response.gtm) { var dataLayerData = $.parseJSON(response.gtm.datalayer); for (index in dataLayerData) { window.dataLayer.push(dataLayerData[index]); } } } }); var wpPersDlOptions = {'storageExpiryTime' : 30 }; var wpGtmOptions = { 'enabled' : 0, 'persDataLayer' : wpPersDl }; wpPersDl.init(wpPersDlOptions); wpgtm.trackPromotion(wpGtmOptions); }); </script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.eu01.nr-data.net","licenseKey":"NRJS-694e2d93d0829b3aaa4","applicationID":"251439689","transactionName":"MhBSZQoZC0NQUUBcWAtacVIMEQpeHlFVQVYJGlceCAoKVERRQBpBDBBH","queueTime":0,"applicationTime":1041,"atts":"HldRE0IDGE0=","errorBeacon":"bam.eu01.nr-data.net","agent":""}</script></body> </html>