1<!DOCTYPE html> 2<html> 3 <head> 4 <link rel="dns-prefetch" href="//cdn.nitrome.com/" /> 5 <title>Game Development Blog - Nitrome</title> 6<meta name="title" content="Game Development Blog - Nitrome"/> 7<meta charset="utf-8" />
7<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"960259577",accountID:"3218166",trustKey:"3218166",xpid:"VwQGWVdVDhAJUlFQAwkGUF0=",licenseKey:"NRJS-0e5092abdabfb2d9bb8",applicationID:"960248169",browserID:"960259577"};;/*! For license information please see nr-loader-spa-1.322.0.min.js.LICENSE.txt */ 8(()=>{var e={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)),s=0===Object.keys(r).length?e:r;for(let a in s)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]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={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};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="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),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(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;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
8e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(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].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(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],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.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,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},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])=>{a[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()[a[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 s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},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,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(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 s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},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{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(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),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},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})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
8const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
8if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
8o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,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},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,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)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=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)o.call(e,n)&&(t[n]=e[n])}
8(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
8;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{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"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.322.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,s,a)=>
8{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-SARROoir04gFygxlr/+mTI+PyMeFL+epi1vnUA2G5mTQ7s3G44ItQBJKbOaIMdIE5OBzuaKhb4k5JYta0NICxg==",249:"sha512-6DKQo5WP7YlpzX6l9UfYkgGLGK2oITdoaYTcZtgl5Foa22NY63lED/0z1hBBLeD7qZCz/YdlY19/r8drlol1tg==",212:"sha512-CYxuvSpDx6ErqWJwAvpoHn54eY37YdMcFao/axOumlw3BsSL7yioOeB2LWViY/Njs818sQG10dSglUhYCMfLPw==",238:"sha512-mvbMILWa3ohYst+u6TLfNrmtY2swUIB3rbJFN/uzt3W62KhgvUVwB81UEZ1R0/it5bfrQ5EVz864pi/CAmucNQ=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},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,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},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},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
8ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.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){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.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,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
8{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
8null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
8dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
8imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)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,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
8return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,ye.ZF)(),a=(0,ye.el)(),o=Date.now(),c={spanId:s,traceId:a,timestamp:o};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,a),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,o,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,a,o,r,n,i)),c}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,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.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}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
8!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(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 h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.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,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(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 R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
8if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
8);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.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,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
8class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
8h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
8 9<meta name="description" content="Play free online Flash games, retro games, arcade games, puzzles games, action games, skill games and more fun games."/> 10<link rel="canonical" href="http://www.nitrome.com/" /> 11<link rel="alternate" type="application/rss+xml" title="Game Releases RSS" href="http://www.nitrome.com/interchange/gamedata/rss/game-releases.php" /> 12<meta name="keywords" content="games, play, online, free, free games, bad ice cream, retro games, free online games, latest games, new games, flash games, final ninja, mutiny, dirk valentine, jack frost, off the rails, skywire, hot air, nitrome games, gaming, multiplayer games"/> 13<meta name="twitter:site" content="@Nitrome"> 14<!--FB meta --> 15<meta property="og:title" content="Nitrome"/> 16<meta property="og:type" content="website"/> 17<meta property="og:url" content="http://www.nitrome.com" /> 18<meta property="og:image" content="http://www.nitrome.com/images/jpegs/nitrome.jpg" /> 19<meta property="fb:app_id" content="181007568598115" /> 20<meta property="og:locale" content="en_US"/> 21<meta property="og:site_name" content="Nitrome"/> 22<meta property="og:description" 23 24 content="Play free online Flash games, retro games, arcade games, puzzles games, action games, skill games and more fun games."/> 25 <!-- cookie script GDPR banner --> 26
26<script type="text/javascript" charset="UTF-8" src="//cdn.cookie-script.com/s/901dd0a09e7a09704484093fd5162fab.js"></script>
26 27 <!-- end cookie script GDPR banner --> 28 29<!-- 25122b9db5e97118ed7baf7d0b91f4ccmochiads.com --> 30<link rel="shortcut icon" href="//cdn.nitrome.com/favicon.ico" />
31<script type="text/javascript"> 32nitromeTooltip = 0; 33AC_FL_RunContent = 0;</script>
33
34<script type="text/javascript"> 35var nitromeAssets = {}; 36 </script>
36 37 <link rel="stylesheet" type="text/css" href="//cdn.nitrome.com/styles/nitrome_3.0.0.6.css"/> 38 <link rel="stylesheet" type="text/css" href="//cdn.nitrome.com/styles/gdpr-bar.css"/> 39 40 <link type="text/css" media="screen" rel="stylesheet" href="//cdn.nitrome.com/styles/blog_2.5.4.2.css"/> 41
41<script type="text/javascript" src="//cdn.nitrome.com/config.js"></script>
41 42
42<script> 43 var generated_image_path = '/generated-content' + images_folder; 44 var cdn_path = '//cdn.nitrome.com/'; 45 </script>
45
46<script type="text/javascript" src="//cdn.nitrome.com/interchange/dailyhearted/js/"></script>
46
47<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
47
48<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
48
49<script> 50 $j = $.noConflict(); 51</script>
51
52<script type="text/javascript" src="//cdn.nitrome.com/scripts/skins_2.5.3.12.js"></script>
52
53<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
53
54<script type="text/javascript" src="//cdn.nitrome.com/scripts/small-video-init_2.5.35.js"></script>
54
55<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
55 56
57<script type="text/javascript" src="//cdn.nitrome.com/jam/js/controllers/nitromeJamHome.1.0.2.js"></script>
57 58<!--[if lte IE 6]> 59<![endif]--> 60<link rel="image_src" href="//cdn.nitrome.com/images/jpegs/nitrome.jpg"/> 61<!-- PUT THIS TAG IN THE head SECTION --> 62
62<script async="async" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
62 63
63<script type='text/javascript'> 64 var googletag = googletag || {}; 65 googletag.cmd = googletag.cmd || []; 66 </script>
66 67
67<script type='text/javascript'> 68 googletag.cmd.push(function() { 69 googletag.defineSlot('/1012827/nitrome_ros-new_160x600_left', [160, 600], 'left_skyscraper_ad').addService(googletag.pubads()); 70 googletag.defineSlot('/1012827/nitrome_ros-new_300x250', [300, 250], 'skyscraper_ad').addService(googletag.pubads()); 71 googletag.defineSlot('/1012827/nitrome_ros-new_300x250_mid', [300, 250], 'mu_2_ad').addService(googletag.pubads()); 72 googletag.defineSlot('/1012827/nitrome_ros-new_728x90', [728, 90], 'banner_ad').addService(googletag.pubads()); 73 googletag.pubads().enableSingleRequest(); 74 googletag.pubads().setTargeting('pageType', 'blog'); 75 googletag.enableServices(); 76 }); 77 </script>
77 78<!--<meta name="apple-itunes-app" content="app-id=994210330, app-argument=http://www.nitrome.com/mobile/?app=greenninja" />-->
79<script src="//cdn.nitrome.com/scripts/unlockables-tooltip_2.5.1.js"></script>
79
80<script src="//cdn.nitrome.com/scripts/modal_2.5.3.js"></script>
80 81<!-- END OF TAG FOR head SECTION --> 82</head> 83<body> 84<div id="fb-root"></div>
85<script> 86function checkPerms(){ 87 var $access = FB.getAccessToken() 88 FB.api('/me/permissions?'+$access,function(response){ 89 checkConsole(response); 90 }); 91} 92function checkConsole(string){ 93 if(typeof(console) != 'undefined'){ 94 console.log(string); 95 } 96} 97window.fbAsyncInit = function() { 98 FB.init({ 99 appId : '<? echo FB_APP_ID; ?>', 100 status : true, 101 cookie : true, 102 xfbml : true 103 }); 104}; 105(function(d){ 106 var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 107 js = d.createElement('script'); js.id = id; js.async = true; 108 js.src = "//connect.facebook.net/en_US/all.js"; 109 d.getElementsByTagName('head')[0].appendChild(js); 110}(document)); 111</script>
111 112<div id="dense_space"></div> 113<div id="container" style="display:block;"> 114<style> 115 .cuboy-login { 116 background-image: url("//cdn.nitrome.com/images/cuboy-login.png"); 117 width: 56px; 118 height: 56px; 119 position: absolute; 120 top: 18px; 121 left: 12px; 122 } 123 124 .learn-more-button { 125 background-image: url(//cdn.nitrome.com/images/learn-more-pressed.png); 126 width: 69px; 127 height: 56px; 128 z-index: 999; 129 position: absolute; 130 right: 16px; 131 top: 17px; 132 display: block; 133 } 134 135 .learn-more-button:hover { 136 background-position: 0 -56px; 137 cursor: pointer; 138 } 139 140 .mailing-list__link { 141 display: block; 142 position: absolute; 143 background: url('/images/mailing-list/mailing-list-link.png'); 144 width: 302px; 145 height: 92px; 146 transition: .2s; 147 } 148 .mailing-list__link:hover { 149 filter: brightness(1.1); 150 } 151</style> 152<!--menu bar --> 153<div id="nitrome_logo"> 154 <h1> 155 <a href="/">Play Games at Nitrome.com</a> 156 </h1> 157</div> 158<div id="menu_shadow"> 159</div> 160<!-- login box --> 161<div id="login_shadow"> 162</div> 163<div id="login_bg"> 164 <a class="mailing-list__link" href="/mailing-list/"></a> 165</div> 166<!-- login box end -->
167<script type="text/javascript" src="/ajax/autocomplete.php"></script>
167 168
168<script>var sid = "5h5n35pkml68ebg5qhl3o1j9ah";</script>
168 169
169<script type="text/javascript" src="//cdn.nitrome.com/scripts/ajax_login_2.5.2.js"></script>
169 170 <div id="menu_box"> 171 </div> 172 173<a id="games_link_top" class="menu_link" title="Free Online Flash Games" href="/all-games/" onmouseover="menuRollover('games')" onmouseout="menuRollout('games');">Free Online Games</a> 174<div id="games_png" class="menu_link"></div> 175<div id="games_link" class="menu_link"></div> 176 177<a id="html5_link_top" class="menu_link" title="HTML5 Games" href="/html5-games/" onmouseover="menuRollover('html5')" onmouseout="menuRollout('html5');">HTML5 Games</a> 178<div id="html5_png" class="menu_link"></div> 179<div id="html5_link" class="menu_link"></div> 180 181<a id="iphone_link_top" class="menu_link" title="Latest Mobile Games" href="/mobile/" onmouseover="menuRollover('iphone')" onmouseout="menuRollout('iphone');">Latest Mobile Games</a> 182<div id="iphone_png" class="menu_link"></div> 183<div id="iphone_link" class="menu_link"></div> 184 185<a id="console_link_top" class="menu_link" title="Latest Console Games" href="/console-games/" onmouseover="menuRollover('console')" onmouseout="menuRollout('console');">Latest Console Games</a> 186<div id="console_png" class="menu_link"></div> 187<div id="console_link" class="menu_link"></div> 188 189<a id="pcmac_link_top" class="menu_link" title="Latest PC/Mac Games" href="/pc-mac/" onmouseover="menuRollover('pcmac')" onmouseout="menuRollout('pcmac');">Latest PC/Mac Games</a> 190<div id="pcmac_png" class="menu_link"></div> 191<div id="pcmac_link" class="menu_link"></div> 192 193<a id="tv_link_top" class="menu_link" title="Latest TV Games" href="/tv/" onmouseover="menuRollover('tv')" onmouseout="menuRollout('tv');">Latest TV Games</a> 194<div id="tv_png" class="menu_link"></div> 195<div id="tv_link" class="menu_link"></div> 196 197<a id="blog_link_top" class="menu_link" title="Game Development Blog" href="/blog/" onmouseover="menuRollover('blog')" onmouseout="menuRollout('blog');">Game Development Blog</a> 198<div id="blog_png" class="menu_link"></div> 199<div id="blog_link" class="menu_link"></div> 200 201<a id="skins_link_top" class="menu_link" title="Website Skins" href="/skins/" onmouseover="menuRollover('skins')" onmouseout="menuRollout('skins');">Website Skins</a> 202<div id="skins_png" class="menu_link"></div> 203<div id="skins_link" class="menu_link"></div> 204 205 <div id="search_container"> 206 <form name="search" method="get" action="/search.php"> 207 <div id="search_bar"> 208 <div class="loading"></div> 209 <input id="main_search_field" type="text" name="id" class="login_input ui-autocomplete-input" value="Search!" onclick="if(this.value == 'Search!'){ this.value = '';} return false;" onblur="javascript: if(this.value==''){ this.value='Search!'}"></input> 210 <input name="search_type" type="hidden" name="type" value="default"></input> 211 </div> 212 <div id="search_filter_link" onmouseover="javascript: if(!filter_toggle){cssFillDiv('search_filter',generated_images_path+'skin-sprite_2.5.3.png','-1188px', '-206px');}" onmouseout="javascript: if(!filter_toggle){cssFillDiv('search_filter',generated_images_path+'skin-sprite_2.5.3.png','-1188px', '-154px');} " onclick="javascript: filter_toggle = toggleFilter(filter_toggle);"><img src="//cdn.nitrome.com/styles/images/trans.gif" height="100%" width="100%"/></div> 213 <div id="search_type_game" onmouseover="javascript: explainIcon('game');" onmouseout="javascript: searchRoll('game');" onclick="javascript: filter_toggle = setSearchType('games');" style="display:none;"></div> 214 <div id="search_type_blog" onmouseover="javascript: explainIcon('blog');" onmouseout="javascript: searchRoll('blog');" onclick="javascript: filter_toggle = setSearchType('blog');" style="display:none;"></div> 215 <input type="submit" id="search_submit" value=""></input> 216 </form> 217 </div> 218 <div id="menu_fill"> 219 </div> 220 <div id="menu_end"> 221 </div> 222 <div id="search_filter"> 223 <div id="filter_icons"> 224 <div id="game_filter_search"></div> 225 <div id="post_filter_search"></div> 226 <div id="user_filter_search"></div> 227 </div> 228 <div id="filter_icon_games"></div> 229 <div id="filter_icon_blog"></div> 230 <div id="filter_icon_users"></div> 231 </div> 232 <div id="search_bar_bg" class="border_color"></div> 233 <!--menu end--> 234
234<script> 235 $j(document).ready(function(){ 236 $j('#main_search_field').autocomplete({ 237 source:autoCompleteArray, 238 minLength: 3, 239 search:function(event,ui){ 240 $j('#search_bar .loading').show(); 241 }, 242 response:function(event,ui){ 243 $j('#search_bar .loading').hide(); 244 } 245 }); 246 }); 247 </script>
247 248
248<script src="//cdn.nitrome.com/scripts/konCode.js"></script>
248<!-- Banner start--> 249<div id="banner_shadow"> 250</div> 251<div id="banner_box"> 252</div> 253<div id="banner_description"> 254</div> 255<!--banner end--> 256<div id="large_shadow"> 257</div> 258<div id="top_bar_box"> 259 </div> 260<div id="top_bar_head"> 261</div> 262<div id="large_box"> 263</div> 264<div id="large_box_content"><div id="posts_container" style="height: 1114px;width: 554px;position: absolute;top:5px;left: 5px;"> 265 <style> 266 .the-excerpt,.the-content{ 267 margin-top: 0px; 268 font-family: arial,sans-serif; 269 font-size: 12px; 270 padding-right: 15px; 271 text-align: left; 272 margin-bottom: 15px; 273 } 274 .post a.read_more_btn { 275 276 height: 17px; 277 padding: 5px; 278 width: 436px; 279 display: block; 280 margin-left: auto; 281 margin-right: auto; 282 position: relative; 283 margin-top: 18px; 284 left: 0; 285 text-align: center; 286 border-radius: 3px; 287 text-indent: -9999px; 288 } 289 .post a.read_more_btn { 290 background: url('//cdn.nitrome.com/styles/images/layout/read_more_2.5.1.png'); 291 height: 17px; 292 padding: 0; 293 width: 504px; 294 display: block; 295 margin-left: auto; 296 margin-right: auto; 297 position: relative; 298 margin-top: 18px; 299 left: 0; 300 text-align: center; 301 border-radius: 3px; 302 text-indent: -9999px; 303 height: 27px; 304 } 305 a.current { 306 color: #999; 307 } 308 .post a.read_more_btn:hover{ 309 opacity:.7; 310 } 311 </style> 312
312<script> 313 var openArticle = function(post_id){ 314 $j('#post_'+post_id+' .the-excerpt').hide(); 315 $j('#post_'+post_id+' .the-content').show(); 316 } 317 </script>
317 318 <div id="post_1436" class="panel_color post corners mn_object"> 319 <div class="head_image new_banner"></div> 320 <div class="heading_text background_dark"> 321 <h2> 322 <div class="post_icon new"> 323 324 </div> 325 <span class="post_title"> 326 <a href="/blog/articles/1436/" title="Twin Shot Deluxe coming to Steam, Switch & Mobile"> 327 Twin Shot Deluxe coming to Steam, Switch & Mobile </a> 328 </span> 329 <span class="post_date"> 330 Mon, 22 Dec 2025 </span> 331 </h2> 332 </div> 333 <div class="post_content"> 334 <div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/vL_cPF495-w?si=FLcrXrRsnW5OrSxM" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p> 335<p>The Angel Cats are BACK! Twin Shot Deluxe is a platform arcade shooter where players defend their homeland using bow and arrows. Take aim at 200+ brand new levels set across four worlds. Play solo or with a friends in local co-op (1-4 players) or competitively to see who will be crowned champion.</p> 336<p>WHATS NEW?</p> 337<ul> 338<li> 20FPS The game now runs at an angelic 60FPS. </li> 339<li> Massively improved controls that still feel like you remember, Improved air control (?), Stop on a dime(?), Coyote time (?), Variable jump (?). </li> 340<li> Modern 16:9 ratios, that's 78% more Twin Shot. </li> 341<li> Join friends and family in multiplayer (1-4 players) with Controller and keyboard support </li> 342<li> A Complete graphical overhaul: All backgrounds, characters, animation and menu…</li></ul><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1436);">READ MORE</a></div> 343 <div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/vL_cPF495-w?si=FLcrXrRsnW5OrSxM" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p> 344<p>The Angel Cats are BACK! Twin Shot Deluxe is a platform arcade shooter where players defend their homeland using bow and arrows. Take aim at 200+ brand new levels set across four worlds. Play solo or with a friends in local co-op (1-4 players) or competitively to see who will be crowned champion.</p> 345<p>WHATS NEW?</p> 346<ul> 347<li> 20FPS The game now runs at an angelic 60FPS. </li> 348<li> Massively improved controls that still feel like you remember, Improved air control (?), Stop on a dime(?), Coyote time (?), Variable jump (?). </li> 349<li> Modern 16:9 ratios, that's 78% more Twin Shot. </li> 350<li> Join friends and family in multiplayer (1-4 players) with Controller and keyboard support </li> 351<li> A Complete graphical overhaul: All backgrounds, characters, animation and menus have been remastered! </li> 352<li> 200+ all new levels built from the ground up. </li> 353<li> Take aim at 2 brand new formidable bosses. </li> 354<li> New music tracks by the games original composer Dave Cowen </li> 355<li> Prepare to hum along to the iconic earworm tracks with music now uncompressed and crystal clear. </li> 356<li> Brand new cinematic intro and ending illustrations. </li> 357<li> Unlock the new Atlantis theme with exciting new enemies and mechanics to enjoy across its 50 stages. </li> 358<li> Cheats and Treats are BACK! Unlock a plethora of new character skins, abilities and modes for enhanced replay. </li> 359<li> Introducing HATS! Battle amongst your friends or alone to see who will be crowned champion. Hats aren't just hilariously cosmetic but also come with additional buffs. </li> 360<li> Tag mode: Dial up the competitiveness to 11 in tag mode. Tag other players with and arrow and claim the prized hat for yourself. A real game of Angel Cat and Mouse. </li> 361</ul> 362<p>The good ol' days of carefree gaming are back. Twin Shot Deluxe is our first release in the Nitrome Classics series. We are bringing back beloved games of old re-equipped for modern gamers.</p> 363<p>Look out for more Nitrome Classics games in the near future. </p> 364<p>Re-live your childhood and complete your collection!</p> 365<p>Coming to the Nintendo Switch/ Steam/ mobile. Wishlist on Steam: <a href="https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/" target="_blank">https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/</a></p><p class="the-author">by <b>Nitrome</b></p></div> 366 </div> 367 <div class="social_block"> 368 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1436" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 369 <div class="tweet_social_button social_btn"> 370 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1436" data-text="Twin Shot Deluxe coming to Steam, Switch & Mobile #Nitrome"></a> 371
371<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 372 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
372 373 </div> 374 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a> 375 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 376 </div> 377 <div class="clear_out"></div> 378 </div> 379 <div id="post_1435" class="panel_color post corners mn_object"> 380 <div class="head_image news_banner"></div> 381 <div class="heading_text background_dark"> 382 <h2> 383 <div class="post_icon news"> 384 385 </div> 386 <span class="post_title"> 387 <a href="/blog/articles/1435/" title="Introducing the Nitrome Classics range!"> 388 Introducing the Nitrome Classics range! </a> 389 </span> 390 <span class="post_date"> 391 Mon, 22 Dec 2025 </span> 392 </h2> 393 </div> 394 <div class="post_content"> 395 <div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/QTJxaW1eT-U?si=-_uKIIIb7ATKEKBo" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p> 396<p>The good ol' days of carefree gaming are back! We are bringing back beloved games of old re-equipped for modern gamers. The Nitrome Classics range features select titles from our past lovingly ported from the ground up to modern formats like the Switch, Steam and Mobile with potentially more platforms to follow.</p> 397<p>All of the games are not just meticulously restored but improved with higher frame rates, full screen aspect ratios and with higher quality music. Many of the games will be packaged as mini collections within a franchise and include additional content not found in the original release.</p> 398<p><strong>Twin Shot Deluxe</strong> </p> 399<p>Inspired by classic single screen arcade games like Bubble Bobble and Snow Bros players must fight thro…</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1435);">READ MORE</a></div> 400 <div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/QTJxaW1eT-U?si=-_uKIIIb7ATKEKBo" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p> 401<p>The good ol' days of carefree gaming are back! We are bringing back beloved games of old re-equipped for modern gamers. The Nitrome Classics range features select titles from our past lovingly ported from the ground up to modern formats like the Switch, Steam and Mobile with potentially more platforms to follow.</p> 402<p>All of the games are not just meticulously restored but improved with higher frame rates, full screen aspect ratios and with higher quality music. Many of the games will be packaged as mini collections within a franchise and include additional content not found in the original release.</p> 403<p><strong>Twin Shot Deluxe</strong> </p> 404<p>Inspired by classic single screen arcade games like Bubble Bobble and Snow Bros players must fight through a series of arenas using their bows and arrows which double as a way to help scale walls.</p> 405<p><strong>Silly Sausage</strong></p> 406<p>Meet our adorable pooch Silly Sausage, the gaming world's most stretchy dog! Navigate this surreal platformer using unique elastic controls to traverse the environment. Stretch and weave your way through this doggy dream trilogy of edible delights and deadly meat grinding hazards.</p> 407<p><strong>Skywire</strong></p> 408<p>One of Nitrome’s earliest hit games! Control a cable car as it makes its way along the track to get the passengers safely through the levels of an out of control theme park.</p> 409<p>The first release will be Twin Shot Deluxe coming early next year to Steam, Switch and mobile.</p> 410<p>Look out for more Nitrome Classics games in the near future. Re-live your childhood and complete your collection.</p> 411<p>Wishlist on Steam: <a href="https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/" target="_blank">https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/</a></p><p class="the-author">by <b>Nitrome</b></p></div> 412 </div> 413 <div class="social_block"> 414 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1435" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 415 <div class="tweet_social_button social_btn"> 416 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1435" data-text="Introducing the Nitrome Classics range! #Nitrome"></a> 417
417<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 418 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
418 419 </div> 420 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a> 421 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 422 </div> 423 <div class="clear_out"></div> 424 </div> 425 <div id="post_1434" class="panel_color post corners mn_object"> 426 <div class="head_image new_banner"></div> 427 <div class="heading_text background_dark"> 428 <h2> 429 <div class="post_icon new"> 430 431 </div> 432 <span class="post_title"> 433 <a href="/blog/articles/1434/" title="Mouse Work coming to Switch 2!"> 434 Mouse Work coming to Switch 2! </a> 435 </span> 436 <span class="post_date"> 437 Mon, 22 Dec 2025 </span> 438 </h2> 439 </div> 440 <div class="post_content"> 441 <div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/RdhvAqS4bjA?si=gaVBEJJSNZcS1f1p" width="500" height="300" frameborder="0"></iframe></p> 442<p>An Upcoming Party Game for 1- 4 Players Using Switch 2 Mouse Controls!<br /><br />Quit mousin' around and get yourselves down to the job centre! Team up with friends or go it alone, facing a range of mini game challenges using the Switch 2 mouse controls. Each job features a unique and inventive mechanic making full use of the Joy-Con 2’s brand new cursor functionality.<br /><br />In Mouse Work players take on the role of adorable mice that are just trying to earn some Cheddar. Fortunately for them, the local job centre has a wealth of offerings available, each testing our mice with new and innovative cursor-based gameplay. <br /><br />As a Climbing Instructor, you'll be dragging the hands of your incompetent students to the next safe hold, or as an Ar…</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1434);">READ MORE</a></div> 443 <div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/RdhvAqS4bjA?si=gaVBEJJSNZcS1f1p" width="500" height="300" frameborder="0"></iframe></p> 444<p>An Upcoming Party Game for 1- 4 Players Using Switch 2 Mouse Controls!<br /><br />Quit mousin' around and get yourselves down to the job centre! Team up with friends or go it alone, facing a range of mini game challenges using the Switch 2 mouse controls. Each job features a unique and inventive mechanic making full use of the Joy-Con 2’s brand new cursor functionality.<br /><br />In Mouse Work players take on the role of adorable mice that are just trying to earn some Cheddar. Fortunately for them, the local job centre has a wealth of offerings available, each testing our mice with new and innovative cursor-based gameplay. <br /><br />As a Climbing Instructor, you'll be dragging the hands of your incompetent students to the next safe hold, or as an Artist, you'll paint pictures correctly before the time runs out. Use the cursor to play keepy-uppy with all manner of spherical objects in 'Gym Teacher', or keep it old school in 'Spy', a retro style mouse-avoider. These are just a few of the jobs you'll be taking on in Mouse Work. </p> 445<p><iframe src="https://www.youtube.com/embed/LXKVZlsJDAQ?si=fnBGa5xzV0o5rxIL" width="500" height="300" frameborder="0"></iframe></p> 446<p>As you play through the jobs available, new ones will unlock, and old jobs will resurface with surprising twists.<br /><br />Whilst the whole game can be played solo, all the jobs are dialled up a notch when playing in local 2-4 player couch co-op mode. Multiplayer brings the party with a range of new challenges added to every job. <br /><br />You may be getting in each other's way whilst tied together, or forced to have your climbers hold hands to bridge a large gap. Perhaps you'll be required to work together to lift and drag objects that would be too heavy for a single mouse. Asymmetric abilities take this further in some games too, with each player working with entirely different mechanics!<br /><br />All your hard work won't go unrewarded however. Successfully completing jobs earns you Cheddar, and you can blow it all customising your mice with cute cosmetics: hats, bow ties, trainers… the lot! Mouse Work will release hot on the tail of the Nintendo Switch 2.<br /><br />Footage shown was captured on PC and is only an approximation of what we expect on final hardware.</p><p class="the-author">by <b>Nitrome</b></p></div> 447 </div> 448 <div class="social_block"> 449 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1434" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 450 <div class="tweet_social_button social_btn"> 451 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1434" data-text="Mouse Work coming to Switch 2! #Nitrome"></a> 452
452<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 453 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
453 454 </div> 455 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a> 456 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 457 </div> 458 <div class="clear_out"></div> 459 </div> 460 <div id="post_1433" class="panel_color post corners mn_object"> 461 <div class="head_image update_banner"></div> 462 <div class="heading_text background_dark"> 463 <h2> 464 <div class="post_icon update"> 465 466 </div> 467 <span class="post_title"> 468 <a href="/blog/articles/1433/" title="Over 30 More HTML5 Games!"> 469 Over 30 More HTML5 Games! </a> 470 </span> 471 <span class="post_date"> 472 Sun, 13 Nov 2022 </span> 473 </h2> 474 </div> 475 <div class="post_content"> 476 <a class="the-image" href="https://www.nitrome.com/html5-games/" title="Over 30 More HTML5 Games!"> 477 <img src="//cdn.nitrome.com/images/uploads/1433-1668368493-Screenshot 2022-11-11 at 14.27.35.png" class="post_image"/> 478 </a> 479 <div class="the-content" style="display:block;"><p>Great news!</p> 480<p>Through our partnership with Poki and Away3d we have over 30 more of our legacy Flash games converted to run in HTML5! You can check them out on our website here: <a href="https://www.nitrome.com/html5-games/" target="_self">https://www.nitrome.com/html5-games/</a></p><p class="the-author">by <b>Nitrome</b></p></div> 481 </div> 482 <div class="social_block"> 483 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1433" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 484 <div class="tweet_social_button social_btn"> 485 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1433" data-text="Over 30 More HTML5 Games! #Nitrome"></a> 486
486<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 487 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
487 488 </div> 489 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_update.xml"></a> 490 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 491 </div> 492 <div class="clear_out"></div> 493 </div> 494 <div id="post_1432" class="panel_color post corners mn_object"> 495 <div class="head_image new_banner"></div> 496 <div class="heading_text background_dark"> 497 <h2> 498 <div class="post_icon new"> 499 500 </div> 501 <span class="post_title"> 502 <a href="/blog/articles/1432/" title="Shovel Knight Dig"> 503 Shovel Knight Dig </a> 504 </span> 505 <span class="post_date"> 506 Fri, 23 Sep 2022 </span> 507 </h2> 508 </div> 509 <div class="post_content"> 510 <div class="the-content" style="display:block;"><p><iframe src="https://www.youtube-nocookie.com/embed/caW8vtdrb4w" width="500" height="300" frameborder="0"></iframe></p> 511<p>Hi Nitromians,</p> 512<p>After an epic 4 year development the wait is finally over!</p> 513<p>We are thrilled to announce that Shovel Knight Dig releases today (September 23rd) on <a href="http://bit.ly/3TuO7BZ">Nintendo Switch</a>, <a href="http://bit.ly/3R6dLM0">Steam</a> and <a href="http://apple.co/3AXpffa">Apple Arcade</a>.</p> 514<p><br />Get the game at the following:<br />Nintendo Switch: <a href="http://bit.ly/3TuO7BZ">http://bit.ly/3TuO7BZ</a><br />Steam: <a href="http://bit.ly/3R6dLM0">http://bit.ly/3R6dLM0</a><br />Apple Arcade: <a href="http://apple.co/3AXpffa">http://apple.co/3AXpffa</a></p> 515<p><a href="http://apple.co/3AXpffa"></a><br />Get your shovels and Dig in to our most ambitious release yet!</p><p class="the-author">by <b>Nitrome</b></p></div> 516 </div> 517 <div class="social_block"> 518 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1432" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 519 <div class="tweet_social_button social_btn"> 520 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1432" data-text="Shovel Knight Dig #Nitrome"></a> 521
521<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 522 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
522 523 </div> 524 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a> 525 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 526 </div> 527 <div class="clear_out"></div> 528 </div> 529 <div id="post_1431" class="panel_color post corners mn_object"> 530 <div class="head_image works_banner"></div> 531 <div class="heading_text background_dark"> 532 <h2> 533 <div class="post_icon works"> 534 535 </div> 536 <span class="post_title"> 537 <a href="/blog/articles/1431/" title="Super Leap Day track in Beat Star!"> 538 Super Leap Day track in Beat Star! </a> 539 </span> 540 <span class="post_date"> 541 Sun, 10 Apr 2022 </span> 542 </h2> 543 </div> 544 <div class="post_content"> 545 <a class="the-image" href="https://www.google.co.uk/aclk?sa=L&ai=DChcSEwjOtLbfoYX3AhWNtO0KHVZHDoMYABAAGgJkZw&ae=2&sig=AOD64_2lcbmqw7cKnBY88LRHsydtFPXZ5w&q&adurl&ved=2ahUKEwiIra_foYX3AhUKAcAKHVPXDB4Q0Qx6BAgDEAE" title="Super Leap Day track in Beat Star!"> 546 <img src="//cdn.nitrome.com/images/uploads/1431-1649600746-leapday-track-beatstar-blog.png" class="post_image"/> 547 </a> 548 <div class="the-content" style="display:block;"><p>A track from our Super Leap Day game is being featured in one of the most popular music games Beat Star!</p> 549<p>It is one of three games tracks being highlighted as part of London Games Week! (Joining tracks from Surgeon Simulator and Reigns) The track in question is the Capital Highway tune composed by the very talented <a href="https://robkta.carrd.co/" target="_blank">https://robkta.carrd.co/</a> who composed most of the tracks in <a href="http://apple.co/-SuperLeapDay" target="_blank">Super Leap Day</a></p> 550<p><a href="http://apple.co/-SuperLeapDay" target="_blank"></a>You can't check out the track in the game <a href="https://www.google.co.uk/aclk?sa=L&ai=DChcSEwjOtLbfoYX3AhWNtO0KHVZHDoMYABAAGgJkZw&ae=2&sig=AOD64_2lcbmqw7cKnBY88LRHsydtFPXZ5w&q&adurl&ved=2ahUKEwiIra_foYX3AhUKAcAKHVPXDB4Q0Qx6BAgDEAE" target="_blank">here</a>!<br /><br /></p><p class="the-author">by <b>Nitrome</b></p></div> 551 </div> 552 <div class="social_block"> 553 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1431" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 554 <div class="tweet_social_button social_btn"> 555 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1431" data-text="Super Leap Day track in Beat Star! #Nitrome"></a> 556
556<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 557 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
557 558 </div> 559 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_works.xml"></a> 560 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 561 </div> 562 <div class="clear_out"></div> 563 </div> 564 <div id="post_1430" class="panel_color post corners mn_object"> 565 <div class="head_image news_banner"></div> 566 <div class="heading_text background_dark"> 567 <h2> 568 <div class="post_icon news"> 569 570 </div> 571 <span class="post_title"> 572 <a href="/blog/articles/1430/" title="Yolk Plush Toys!"> 573 Yolk Plush Toys! </a> 574 </span> 575 <span class="post_date"> 576 Fri, 11 Feb 2022 </span> 577 </h2> 578 </div> 579 <div class="post_content"> 580 <a class="the-image" href="https://shop.makeship.com/32CWtCf" title="Yolk Plush Toys!"> 581 <img src="//cdn.nitrome.com/images/uploads/1430-1644570253-Yolk_Plush_Promo.png" class="post_image"/> 582 </a> 583 <div class="the-content" style="display:block;"><p>Yolk Plush Toys (from our Leap Day games) are now available to order for a limited time! Don't miss out because when the campaign ends they will be gone forever!</p> 584<p>You can order them at the following link: <a href="https://shop.makeship.com/32CWtCf" target="_blank">https://shop.makeship.com/32CWtCf</a></p> 585<p>A huge thank you to all that buy one and we hope you love it!</p><p class="the-author">by <b>Nitrome</b></p></div> 586 </div> 587 <div class="social_block"> 588 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1430" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 589 <div class="tweet_social_button social_btn"> 590 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1430" data-text="Yolk Plush Toys! #Nitrome"></a> 591
591<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 592 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
592 593 </div> 594 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a> 595 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 596 </div> 597 <div class="clear_out"></div> 598 </div> 599 <div id="post_1429" class="panel_color post corners mn_object"> 600 <div class="head_image news_banner"></div> 601 <div class="heading_text background_dark"> 602 <h2> 603 <div class="post_icon news"> 604 605 </div> 606 <span class="post_title"> 607 <a href="/blog/articles/1429/" title="Playing Nitrome flash games!"> 608 Playing Nitrome flash games! </a> 609 </span> 610 <span class="post_date"> 611 Thu, 04 Nov 2021 </span> 612 </h2> 613 </div> 614 <div class="post_content"> 615 <a class="the-image" href="https://www.nitrome.com/all-games/" title="Playing Nitrome flash games!"> 616 <img src="//cdn.nitrome.com/images/uploads/1429-1636056852-flash-is-dead-blog-image.png" class="post_image"/> 617 </a> 618 <div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p> 619<p>We have now launched a solution to let our users play all 130+ Nitrome Flash games on the site. The games are still technically running in Flash so they will run exactly as they did in the past. Hurray.</p> 620<p>We are doing this with the aid of a downloadable player called Supernova. Once downloaded clicking on the games will run them as before with one small difference in that they will now appear in a new window. Roughly speaking Supernova contains it's own browser that has a Flash Player built into it and it is this that allows the games to run.</p> 621<p>You can download it by clicking on any of the Flash games and following the download buttons.</p> 622<p>Currently the player is Windows only (Their site says a Mac version will come …</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1429);">READ MORE</a></div> 623 <div class="the-content" style="display:none;"><p>Hi Nitromians,</p> 624<p>We have now launched a solution to let our users play all 130+ Nitrome Flash games on the site. The games are still technically running in Flash so they will run exactly as they did in the past. Hurray.</p> 625<p>We are doing this with the aid of a downloadable player called Supernova. Once downloaded clicking on the games will run them as before with one small difference in that they will now appear in a new window. Roughly speaking Supernova contains it's own browser that has a Flash Player built into it and it is this that allows the games to run.</p> 626<p>You can download it by clicking on any of the Flash games and following the download buttons.</p> 627<p>Currently the player is Windows only (Their site says a Mac version will come and if it does we will support it) and works on Edge and Chrome browsers.</p> 628<p>Nitrome are still committed to converting our back catalogue to run in HTML5. We believe the Supernova player offers an important extra way to immediately preserve our Flash games for players who want them. However HTML5 is the future, offering the only true way to keep them embedded in browsers and playable across more devices.</p> 629<p>We hope you are as excited as we were to dig into some of the games that have been out of action for the last few months!</p> 630<p>Team Nitrome :)</p><p class="the-author">by <b>Nitrome</b></p></div> 631 </div> 632 <div class="social_block"> 633 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1429" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 634 <div class="tweet_social_button social_btn"> 635 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1429" data-text="Playing Nitrome flash games! #Nitrome"></a> 636
636<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 637 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
637 638 </div> 639 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a> 640 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 641 </div> 642 <div class="clear_out"></div> 643 </div> 644 <div id="post_1428" class="panel_color post corners mn_object"> 645 <div class="head_image itrome_banner"></div> 646 <div class="heading_text background_dark"> 647 <h2> 648 <div class="post_icon itrome"> 649 650 </div> 651 <span class="post_title"> 652 <a href="/blog/articles/1428/" title="Super Leap Day launched!"> 653 Super Leap Day launched! </a> 654 </span> 655 <span class="post_date"> 656 Fri, 06 Aug 2021 </span> 657 </h2> 658 </div> 659 <div class="post_content"> 660 <div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p> 661<p>We are thrilled to announce that we have a brand new game that has just launched...<a href="https://apple.co/-SuperLeapDay">Super Leap Day!</a></p> 662<p><iframe src="https://www.youtube-nocookie.com/embed/SwkdfDNOycQ" width="500" height="300" frameborder="0"></iframe></p> 663<p>It is available NOW on Apple Arcade for iPhone, iPad, Apple TV and Mac!</p> 664<p><a href="https://apple.co/-SuperLeapDay">http://apple.co/-SuperLeapDay</a></p> 665<p>Super Leap Day is the sequel to Leap Day and much like in that game the key hook is that there is a new level every day for you to play and it can all be played with a single tap.</p> 666<p>You may have noticed by this point that we have not made the game in pixels this time out! We are known for making games with pixels so that may seem a little unusual. We still love pixels but we also have been looking for the right time to break the trend and try something new. It seemed a risk to apply this to a sequel but it also …</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1428);">READ MORE</a></div> 667 <div class="the-content" style="display:none;"><p>Hi Nitromians,</p> 668<p>We are thrilled to announce that we have a brand new game that has just launched...<a href="https://apple.co/-SuperLeapDay">Super Leap Day!</a></p> 669<p><iframe src="https://www.youtube-nocookie.com/embed/SwkdfDNOycQ" width="500" height="300" frameborder="0"></iframe></p> 670<p>It is available NOW on Apple Arcade for iPhone, iPad, Apple TV and Mac!</p> 671<p><a href="https://apple.co/-SuperLeapDay">http://apple.co/-SuperLeapDay</a></p> 672<p>Super Leap Day is the sequel to Leap Day and much like in that game the key hook is that there is a new level every day for you to play and it can all be played with a single tap.</p> 673<p>You may have noticed by this point that we have not made the game in pixels this time out! We are known for making games with pixels so that may seem a little unusual. We still love pixels but we also have been looking for the right time to break the trend and try something new. It seemed a risk to apply this to a sequel but it also gave us opportunity to give the game it's own identify and help highlight that this is not more of the same. We are thrilled with how it came out and we hope you approve.</p> 674<p>Gameplay has also been completely overhauled from the ground up to allow for many features we were not possible to include in the first game. Yolk and friends can now handle slopes and even run up walls...or ceilings if you get enough speed. You can grab things now too which really expands how you interact with the world around you. You don't even travel only upwards any more...see a sideways opening and it will take you in a whole new direction!</p> 675<p>We also took the opportunity to shake up the rewards from the first game. No longer will you be unlocking new characters with the same abilities as Yolk. Now all the characters you unlock have their own abilities and they can be upgraded to do more things too! In addition we have added bonus games into the unlock pool...fancy a round of golf? How about pinball or jump in a kart and test your driving skills!</p> 676<p>We have added a lot of new things for Super Leap Day but like the first game this is just the start and we plan to add much more content to keep you all coming back for more! We hope you all enjoy it!</p> 677<p>This post is primarily to announce our new game but given the lack of updates on the site we want to assure those curious that we are still in full development mode on Shovel Knight Dig. It has been in continuous development along side Super Leap Day and we expand the team to handle both projects so that one did not impact on the other.</p><p class="the-author">by <b>Nitrome</b></p></div> 678 </div> 679 <div class="social_block"> 680 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1428" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 681 <div class="tweet_social_button social_btn"> 682 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1428" data-text="Super Leap Day launched! #Nitrome"></a> 683
683<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 684 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
684 685 </div> 686 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_itrome.xml"></a> 687 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 688 </div> 689 <div class="clear_out"></div> 690 </div> 691 <div id="post_1427" class="panel_color post corners mn_object"> 692 <div class="head_image works_banner"></div> 693 <div class="heading_text background_dark"> 694 <h2> 695 <div class="post_icon works"> 696 697 </div> 698 <span class="post_title"> 699 <a href="/blog/articles/1427/" title="HTML5 Games and more!"> 700 HTML5 Games and more! </a> 701 </span> 702 <span class="post_date"> 703 Sat, 23 May 2020 </span> 704 </h2> 705 </div> 706 <div class="post_content"> 707 <a class="the-image" href="http://www.nitrome.com/html5-games/" title="HTML5 Games and more!"> 708 <img src="http://cdn.nitrome.com/images/uploads/1427-1590225068-html5-blog.png" class="post_image"/> 709 </a> 710 <div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p> 711<p>It has been a long time since we last posted on the blog so there is a lot to get through so settle in!</p> 712<p>Today’s big news is that we can finally tell you what we are doing to keep our flash games alive past the end of this year when flash will be removed from popular browsers.</p> 713<p>We have behind the scenes been working with the super talented guys at Poki (<a rel="noopener noreferrer" href="https://poki.com/" target="_blank">https://poki.com/</a>) to make our games playable in HTML5! This means they will remain playable in browsers the way they were designed to be played!</p> 714<p>The first game is Bad Ice Cream which you can play TODAY by navigating to our brand new HTML5 section: <a rel="noopener noreferrer" href="/html5-games/" target="_blank">www.nitrome.com/html5-games</a>. More games will be following starting with the Bad Ice Cream sequels over the next two …</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1427);">READ MORE</a></div> 715 <div class="the-content" style="display:none;"><p>Hi Nitromians,</p> 716<p>It has been a long time since we last posted on the blog so there is a lot to get through so settle in!</p> 717<p>Today’s big news is that we can finally tell you what we are doing to keep our flash games alive past the end of this year when flash will be removed from popular browsers.</p> 718<p>We have behind the scenes been working with the super talented guys at Poki (<a rel="noopener noreferrer" href="https://poki.com/" target="_blank">https://poki.com/</a>) to make our games playable in HTML5! This means they will remain playable in browsers the way they were designed to be played!</p> 719<p>The first game is Bad Ice Cream which you can play TODAY by navigating to our brand new HTML5 section: <a rel="noopener noreferrer" href="/html5-games/" target="_blank">www.nitrome.com/html5-games</a>. More games will be following starting with the Bad Ice Cream sequels over the next two weeks and when we're done, we hope to have the entire flash catalogue of 130+ games playable in HTML5!</p> 720<p>Time to talk a little more about the HTML5 versions. They are not ports! The games are running off the exact code of the original games pulled directly from the original flash files. What the wizards making this happen have made is more comparable to an emulator…a Nitrome emulator…eek! Being an emulator of sorts some people may see performance differences to these versions but the code is highly optimised and will improve even further as the team continue to work on it.</p> 721<p>Nitrome now have a Discord channel:
721<a rel="noopener noreferrer" href="https://t.co/d7JkJj0G2f" target="_blank">https://t.co/d7JkJj0G2f</a> . As well as being a great place to discuss all things Nitrome this the place we will be posting early betas of the new games that get converted. Please do sign up here if you are interested in trying them and there will be instructions on how to report any issues you may find with them.</p> 722<p>The games being in HTML5 brings some additional benefits. More ideas may be added over time but added today is the ability to play these games on mobile browsers! Please note: You may require a newish phone for the games to run full speed and there are some limitations from the games not being designed with mobile in mind. That said we think the results were well beyond our expectations. We worked closely with Poki to design virtual control overlays that can be configured on a per game basis. Need more than one button check, d-pad or analogue stick check. Landscape or Portrait…both! Please give it a go and let us know what you think! There is even a hidden Easter Egg in there that some of you may find if you look hard :)</p> 723<p>You may notice that we have updated the site. We did this to house the new HTML5 games but this also gave us an excuse to do a little house cleaning elsewhere to bring things a little more up to date. We have updated the Mobile section to have all our mobile game, Our Steam section now has our launched Steam games and we finally now have a Console tab to house the games we have launched there. We are very happy to say that we have managed to get the original Nitrome website developer Tom McQuillan back in order to make these website changes! Thanks for that Tom!</p> 724<p>You may remember in our previous post that we said we were making a new website. This is not that site. Our intent at the time was to make a new website that focused on games outside of the browser. It was going to be heavily stripped back and more business focused. We progressed some way with this direction but ultimately changed our minds that this was the way we wanted the site to go. A large part of that decision was due to the HTML5 versions of the games becoming a possibility. We still intend to make a new site that will be more responsive (scale and adjust for various mobile, tablet and desktop set ups). We do not have a clear idea yet on when that might happen and as such are not going to make any estimate on when that might arrive. We will give more news when we have more concrete plans.</p> 725<p>Finally, as we have not posted an update in so long, we wanted to highlight our move into the Console space and update you on our missed mobile offerings. If you follow us on Twitter where Nitrome are much more active you would hopefully know this but we are aware that not everyone does so here is a recap.</p> 726<p>We launched our first console game Bomb Chicken to the Nintendo Switch in July 2018 <a rel="noopener noreferrer" href="http://bombchickengame.com/" target="_blank">http://bombchickengame.com/</a>. It was featured in one of Nintendo’s prestigious Nindie Directs and went on to get a Physical release by our friends at Limited Run. Limited Run also helped us port the game to Playstation 4 and produce a physical release for that too. We also launched a Steam version of the game and more recently the game has landed on mobile devices so it is pretty much everywhere at this point!</p> 727<p>In April we launched our second console release Gunbrick: Reloaded on Switch and Steam <a rel="noopener noreferrer" href="http://gunbrick.com/" target="_blank">http://gunbrick.com/</a>. The game is a heavily expanded version of our previous mobile release ‘Gunbrick’ which was awarded Editors choice by Apple at the time. The game now includes brand new isometric levels taking the gameplay in a whole new dimension! The games origins can be traced all the way back to Nitrome’s very first icon game (a game that can be played in the 50 x50 pixel icon) back in 2012! Were happy to say this version made its way
727into this release too :)</p> 728<p>Last year we announced a big new console project that is Shovel Knight Dig <a rel="noopener noreferrer" href="https://www.yachtclubgames.com/games/shovel-knight-dig/" target="_blank">https://yachtclubgames.com/games/shovel-knight-dig/</a>. It is a spin off title based in Yacht Clubs Shovel Knight Universe. This is by far Nitrome’s biggest and most polished game to date. Please follow our progress on the title on Twitter <a rel="noopener noreferrer" href="https://twitter.com/Nitrome" target="_blank">https://twitter.com/Nitrome</a> and if you haven’t seen it watch the reveal trailer here: <a rel="noopener noreferrer" href="https://www.youtube.com/watch?v=oPfiBU4ifjs" target="_blank">https://www.youtube.com/watch?v=oPfiBU4ifjs</a>.</p> 729<p>On mobile there have been 14 games release since we last updated! We brought our flash games In the Dog House, Colour Blind and Turn Undead to mobile all sympathetically adjusted for the touch screen and widescreen format and with various extras. We also made a full on sequel to Turn Undead too!</p> 730<p>Nitrome’s internal studio also produced Flat Pack and Bomb Chicken on mobile and in collaboration with some external studios we also published Spicy Piggy, Sprint RPG, Tower Fortress, Slime Pizza, Nano Golf: Puzzle Putting, Nano Golf: Hole in One, Drop Wizard Tower, Spike City!</p> 731<p>Really there are too many to link to here so for more news and links on these please head to our vastly updated mobile section here: <a rel="noopener noreferrer" href="/mobile/" target="_blank">nitrome.com/mobile</a>.</p> 732<p>We really can’t leave the mobile conversation without mentioning Nitrome’s most successful game to date! Leap Day has just on Monday had it’s fourth anniversary and as we have every year, we launched a big content update for the game. For those not in the know Leap Day is a single touch platformer that has a new level every day…yes that’s over 1460 levels at this point! (OS: <a rel="noopener noreferrer" href="http://tinyurl.com/y7arwadt" target="_blank">http://tinyurl.com/y7arwadt</a> GooglePlay: <a rel="noopener noreferrer" href="http://tinyurl.com/y9yzbuah" target="_blank">http://tinyurl.com/y9yzbuah</a>)</p> 733<p>Whew that was a lot to get through but I hope anyone who read it all will agree it was all good stuff. Nitrome as always have even more good things going on behind the scenes so you can look forward to even more news in the future.</p> 734<p>Stay safe everyone!</p> 735<p>From the Nitrome Team</p><p class="the-author">by <b>Nitrome</b></p></div> 736 </div> 737 <div class="social_block"> 738 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1427" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 739 <div class="tweet_social_button social_btn"> 740 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1427" data-text="HTML5 Games and more! #Nitrome"></a> 741
741<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 742 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
742 743 </div> 744 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_works.xml"></a> 745 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 746 </div> 747 <div class="clear_out"></div> 748 </div> 749 <div id="post_1426" class="panel_color post corners mn_object"> 750 <div class="head_image news_banner"></div> 751 <div class="heading_text background_dark"> 752 <h2> 753 <div class="post_icon news"> 754 755 </div> 756 <span class="post_title"> 757 <a href="/blog/articles/1426/" title="Important Information"> 758 Important Information </a> 759 </span> 760 <span class="post_date"> 761 Wed, 13 Jun 2018 </span> 762 </h2> 763 </div> 764 <div class="post_content"> 765 <a class="the-image" href="" title="Important Information"> 766 <img src="http://cdn.nitrome.com/images/uploads/1426-1528236527-newwebsite_blog_image.png" class="post_image"/> 767 </a> 768 <div class="the-excerpt" style="display:block;"><p>Hello Nitromians,</p> 769<p>It has been a long time since we made a post here and this probably will serve as the final post on the current website.</p> 770<p>This post is to tell you about some important changes we are making largely in reaction to a new European law called GDPR that has came into effect (we will get to that). More importantly Nitrome has changed a lot in the last few years as we have shifted our focus from browser games to mobile and now also PC and console (I hope you guys saw that Bomb Chicken was coming to Nintendo Switch). It was about time we changed the website to reflect that and so the upshot is that there is a new more modern site in development (we will get to that too).</p> 771<p>So what is GDPR?</p> 772<p>Well in a nutshell it’s a la…</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1426);">READ MORE</a></div> 773 <div class="the-content" style="display:none;"><p>Hello Nitromians,</p> 774<p>It has been a long time since we made a post here and this probably will serve as the final post on the current website.</p> 775<p>This post is to tell you about some important changes we are making largely in reaction to a new European law called GDPR that has came into effect (we will get to that). More importantly Nitrome has changed a lot in the last few years as we have shifted our focus from browser games to mobile and now also PC and console (I hope you guys saw that Bomb Chicken was coming to Nintendo Switch). It was about time we changed the website to reflect that and so the upshot is that there is a new more modern site in development (we will get to that too).</p> 776<p>So what is GDPR?</p> 777<p>Well in a nutshell it’s a law to help protect European citizens from companies keeping and using data collected about a user without their consent. Though it’s aimed at Europeans it is not a requirement that they live in Europe, so in effect any site that has a global audience (like Nitrome.com) needs to react to this change.</p> 778<p>It is a well intentioned law which is hard to argue is bad for people but it does have a lot of impact on existing infrastructure that could not have foreseen needing these permissions. You can read all about GDPR and get more information here <a href="https://www.eugdpr.org" target="_blank">https://www.eugdpr.org</a></p> 779<p>How does it affect Nitrome.com?</p> 780<p>The big and regretful change you probably already noticed is that accounts are no longer a thing. This includes all of your collected avatars, your friend’s lists and comments.</p> 781<p>The accounts sadly used information that we could not realistically and retrospectively get permissions for and to keep them active or even keep storing them would mean leaving Nitrome open to a law suit. It may seem drastic, but the effects of such a suit if it were ever brought would likely collapse Nitrome overnight so this was clearly the lesser evil. To be clear we had to do this and there is no way back. We will never be able to bring peoples accounts back because they have been intentionally deleted so please don’t ask.</p> 782<p>In addition to the accounts we have completely overhauled our <a title="Privacy Policy" href="/privacy/" target="_self">privacy policy</a>. This explains everything we collect and use your data for. We encourage you to read it and have tried to make it as easy to read as possible but apologies in advance that it’s not really a page turner.</p> 783<p>
783So with the bad news out of the way we can move towards the more positive news of a brand new site! We started making it a few weeks back when the extent of GDPR became apparent and it is now well underway. It is modern and should finally work as great on your mobile device as it does your desktop.</p> 784<p>Speaking of mobile, the site is more aimed towards the games we make now so it is less of a browser games portal than it was in the past. As part of this it is mostly ad free with the exception of pages you can play games in the browser on. There will not be an accounts system on the new site, although we may consider making one later.</p> 785<p>With regards to the browser games, they will still be there! We are fully aware of the increasingly diminished support for Flash games in browsers and its impending shutdown in a couple of year’s time. We also however don’t like the idea of killing games we poured countless hours into making and wiping them from existence. So there is still going to be a dedicated area of the site to access them for as long as Flash games are viable. In addition we have brought a couple of the games to mobile now and we have more on the way. We intend to keep looking at ways we can keep as much of our back catalogue alive as is financially viable to do so going forward.</p> 786<p>Anyone who is interested in seeing all the latest news on our upcoming games or new site should <a title="@Nitrome" href="https://twitter.com/nitrome" target="_blank">follow us on our twitter account</a> (this is where we are our most active). We are very excited about what is in store for Nitrome in the future and we hope as many of you as possible will continue to support our team on our crazy game making adventure.</p> 787<p>The Nitrome team. =)</p><p class="the-author">by <b>Nitrome</b></p></div> 788 </div> 789 <div class="social_block"> 790 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1426" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 791 <div class="tweet_social_button social_btn"> 792 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1426" data-text="Important Information #Nitrome"></a> 793
793<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 794 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
794 795 </div> 796 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a> 797 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 798 </div> 799 <div class="clear_out"></div> 800 </div> 801 <div id="post_1425" class="panel_color post corners mn_object"> 802 <div class="head_image preview_banner"></div> 803 <div class="heading_text background_dark"> 804 <h2> 805 <div class="post_icon preview"> 806 807 </div> 808 <span class="post_title"> 809 <a href="/blog/articles/1425/" title="Bomb Chicken - Steam!"> 810 Bomb Chicken - Steam! </a> 811 </span> 812 <span class="post_date"> 813 Tue, 21 Mar 2017 </span> 814 </h2> 815 </div> 816 <div class="post_content"> 817 <div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p> 818<p>we have a new game in development for Steam/PC...yes you read that right for Steam! It's called Bomb Chicken and you play as a Chicken who lays bombs rather than eggs!</p> 819<p>You can't fly so but you can stack the bombs as high as you like to reach places as long as you do it before they all blow up!</p> 820<p>The bombs can be kicked by walking into them which is handy if you want to tackle some of the enemies and they have a multitude of other uses too....a swiss army knife of tricks!</p> 821<p><iframe src="https://www.youtube-nocookie.com/embed/sQtRP2VIcF0" width="500" height="300" frameborder="0"></iframe></p> 822<p>The game is currently on Steam Greenlight which is what we need to go through to get it onto Steam. If anyone has a steam account we would really appreaciate if you could head over to the page and vote for us<a title="greenlight bomb chicken" href="http://steamcommunity.com/sharedfiles/filedetails/?id=884620027" target="_blank"> here</a> </p> 823<p>Finally a lot of people may…</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1425);">READ MORE</a></div> 824 <div class="the-content" style="display:none;"><p>Hi Nitromians,</p> 825<p>we have a new game in development for Steam/PC...yes you read that right for Steam! It's called Bomb Chicken and you play as a Chicken who lays bombs rather than eggs!</p> 826<p>You can't fly so but you can stack the bombs as high as you like to reach places as long as you do it before they all blow up!</p> 827<p>The bombs can be kicked by walking into them which is handy if you want to tackle some of the enemies and they have a multitude of other uses too....a swiss army knife of tricks!</p> 828<p><iframe src="https://www.youtube-nocookie.com/embed/sQtRP2VIcF0" width="500" height="300" frameborder="0"></iframe></p> 829<p>The game is currently on Steam Greenlight which is what we need to go through to get it onto Steam. If anyone has a steam account we would really appreaciate if you could head over to the page and vote for us<a title="greenlight bomb chicken" href="http://steamcommunity.com/sharedfiles/filedetails/?id=884620027" target="_blank"> here</a> </p> 830<p>Finally a lot of people may see a lot of similaritys with our previously announced Steam project Flightless and they do have a lot in common. Flightless has sadly not been worked on for a long time and at this point should be considered cancelled. We may return to the project at some point as we did with Flat Pack/Project Surface but for the moment our sole Steam efforts are going towards Bomb Chicken.</p> 831<p>It may seem strange to some that we have made a similar game to Flightless rather than just pick up Flightless. In truth it is mostly coincidence...we had a new idea and the art went in that direction and ended up similar. We decided it was a good fit for Steam after starting development and the time felt right to give the format another go. </p><p class="the-author">by <b>Mat</b></p></div> 832 </div> 833 <div class="social_block"> 834 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1425" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 835 <div class="tweet_social_button social_btn"> 836 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1425" data-text="Bomb Chicken - Steam! #Nitrome"></a> 837
837<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 838 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
838 839 </div> 840 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_preview.xml"></a> 841 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 842 </div> 843 <div class="clear_out"></div> 844 </div> 845 <div id="post_1424" class="panel_color post corners mn_object"> 846 <div class="head_image preview_banner"></div> 847 <div class="heading_text background_dark"> 848 <h2> 849 <div class="post_icon preview"> 850 851 </div> 852 <span class="post_title"> 853 <a href="/blog/articles/1424/" title="Flat Pack"> 854 Flat Pack </a> 855 </span> 856 <span class="post_date"> 857 Tue, 21 Mar 2017 </span> 858 </h2> 859 </div> 860 <div class="post_content"> 861 <div class="the-content" style="display:block;"><p>Hi Nitromians,</p> 862<p>we have been working hard behind the scenes on some new games and its time to show you some of what were upto. Check out Flat Pack which some of you might recall is following on from an idea we had many years back which we referred to as project surface.</p> 863<p>Essentially it is a 2d game played out on the surface of a 3d object.</p> 864<p>Well this just goes to show that given time we do go back to some things and now in Unity rather than flash this idea seemed much more possible. </p> 865<p>For now this is just a small teaser but there are many more cool things to show on this game at a later date.<iframe src="https://www.youtube-nocookie.com/embed/uDmIZH_vuMY" width="500" height="300" frameborder="0"></iframe></p> 866<p> </p><p class="the-author">by <b>Mat</b></p></div> 867 </div> 868 <div class="social_block"> 869 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1424" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 870 <div class="tweet_social_button social_btn"> 871 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1424" data-text="Flat Pack #Nitrome"></a> 872
872<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 873 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
873 874 </div> 875 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_preview.xml"></a> 876 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 877 </div> 878 <div class="clear_out"></div> 879 </div> 880 <div id="post_1422" class="panel_color post corners mn_object"> 881 <div class="head_image new_banner"></div> 882 <div class="heading_text background_dark"> 883 <h2> 884 <div class="post_icon new"> 885 886 </div> 887 <span class="post_title"> 888 <a href="/blog/articles/1422/" title="Silly Sausage: Doggy Dessert"> 889 Silly Sausage: Doggy Dessert </a> 890 </span> 891 <span class="post_date"> 892 Thu, 22 Dec 2016 </span> 893 </h2> 894 </div> 895 <div class="post_content"> 896 <div class="the-content" style="display:block;"><p>Hi Nitromians,</p> 897<p class="MsoNormal"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">what better way to end the year than with a brand new game? Today we have launched sequel to our stretchy adventure Silly Sausage: Doggy Dessert. Set within a Dessert themed dreamland there are many new obstacles and enemies to deal with from Cherry (on the cake) bombs to Enemy Cream that you literally have to eat through. New to this version are special side challenge rooms with Dog Treat prizes to collect and we even round off the game with an epic boss fight against a wedding cake at the end. </span></p> 898<p><iframe src="https://www.youtube-nocookie.com/embed/hknnmfQlXCY" width="503" height="315" frameborder="0"></iframe></p> 899<p>What are you waiting for? Go Download it now!</p> 900<p><a title="Apple App Store" href="https://itunes.apple.com/app/id1161656633" target="_blank">Apple App Store</a></p> 901<p><a title="Google Play Store" href="https://play.google.com/store/apps/details?id=com.nitrome.sillysausagedoggydessert&hl=en" target="_blank">Google Play Store</a></p><p class="the-author">by <b>Mat</b></p></div> 902 </div> 903 <div class="social_block"> 904 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1422" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 905 <div class="tweet_social_button social_btn"> 906 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1422" data-text="Silly Sausage: Doggy Dessert #Nitrome"></a> 907
907<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 908 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
908 909 </div> 910 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a> 911 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 912 </div> 913 <div class="clear_out"></div> 914 </div> 915 <div id="post_1421" class="panel_color post corners mn_object"> 916 <div class="head_image update_banner"></div> 917 <div class="heading_text background_dark"> 918 <h2> 919 <div class="post_icon update"> 920 921 </div> 922 <span class="post_title"> 923 <a href="/blog/articles/1421/" title="Leap Day Winter Update!"> 924 Leap Day Winter Update! </a> 925 </span> 926 <span class="post_date"> 927 Thu, 22 Dec 2016 </span> 928 </h2> 929 </div> 930 <div class="post_content"> 931 <div class="the-content" style="display:block;"><p>Hi Nitromians,</p> 932<p><span style="font-size: 7.5pt; font-family: Verdana, sans-serif; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">Christmas is nearly upon us and that means we have some juicy new content to entertain you through the holidays. First up we have just launched a big new winter update for our Leap Day game. Every day this week we have a special winter day to play through and each one will introduce a special new mechanic. There are also two new themes to enjoy and some new winter themed music too!</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"></span></p> 933<p><iframe src="https://www.youtube-nocookie.com/embed/ofv7Rcl9Kro" width="503" height="315" frameborder="0"></iframe></p> 934<p><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">There is also a special little surprise waiting for you on another special day sometime in the future so keep your eyes peeled for that :)</span></p> 935<p>Download now:</p> 936<p><a title="Apple App Store" href="https://itunes.apple.com/gb/app/leap-day/id1083451870?mt=8" target="_blank">Apple App Store</a></p> 937<p><a title="Google Play Store" href="https://play.google.com/store/apps/details?id=com.nitrome.leapday&hl=en_GB" target="_blank">Google Play store</a></p> 938<p>Have fun!</p><p class="the-author">by <b>Mat</b></p></div> 939 </div> 940 <div class="social_block"> 941 <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1421" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a> 942 <div class="tweet_social_button social_btn"> 943 <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1421" data-text="Leap Day Winter Update! #Nitrome"></a> 944
944<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]; 945 if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
945 946 </div> 947 <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_update.xml"></a> 948 <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a> 949 </div> 950 <div class="clear_out"></div> 951 </div> 952 </div>
953<script src="//cdn.nitrome.com/scripts/scrollbox.js"></script>
953
954<script> 955 $j('#posts_container').scrollbox(); 956</script>
956 957<div id="buttons_new_old_container" class="panel_color corners"> 958 <div id="newer_posts_button"> 959 </div> 960 <div id="page-pos"> 961 <a title="Go to page 1 of 76" class="current" href="#">1</a> <a class="paginate" title="Go to page 2 of 76" href="/blog/index.php?page=2&ipp=15">2</a> <a class="paginate" title="Go to page 3 of 76" href="/blog/index.php?page=3&ipp=15">3</a> <a class="paginate" title="Go to page 4 of 76" href="/blog/index.php?page=4&ipp=15">4</a> <a class="paginate" title="Go to page 5 of 76" href="/blog/index.php?page=5&ipp=15">5</a> <a class="paginate" title="Go to page 6 of 76" href="/blog/index.php?page=6&ipp=15">6</a> <a class="paginate" title="Go to page 7 of 76" href="/blog/index.php?page=7&ipp=15">7</a> <a class="paginate" title="Go to page 8 of 76" href="/blog/index.php?page=8&ipp=15">8</a> <a class="paginate" title="Go to page 9 of 76" href="/blog/index.php?page=9&ipp=15">9</a> <a class="paginate" title="Go to page 10 of 76" href="/blog/index.php?page=10&ipp=15">10</a> <a class="paginate" title="Go to page 11 of 76" href="/blog/index.php?page=11&ipp=15">11</a> ... <a class="paginate" title="Go to page 76 of 76" href="/blog/index.php?page=76&ipp=15">76</a> </div> 962 <a id="older_posts_button" href="/blog/?page=2"> 963 </a> 964 </div>
965<script> 966 $j('#container').modal(); 967</script>
967
968<script> 969 $j(document).ready(function(){ 970 $j('#older_posts_button').css({ 971 "background-image":"url('"+generated_images_path+"older_posts_button.png')", 972 "background-repeat":"no-repeat" 973 }); 974 $j('#newer_posts_button').css({ 975 "background-image":"url('"+generated_images_path+"newer_posts_button.png')", 976 "background-repeat":"no-repeat" 977 }); 978 }); 979 function showModal(message,modal_id,message_id){ 980 $j('#container').modal('update',message); 981 $j('#container').modal('show'); 982 } 983 function hideModal(modal_id){ 984 $j(modal_id).css({display:'none'}); 985 } 986 showUserMessage = function(string,item_id,single,type,comment_id){ 987 $j('#container').modal('update',string); 988 $j('#container').modal('show'); 989 } 990 respan = function(ex){ 991 return false; 992 } 993</script>
993
994<script> 995var comment_type = 'blog'; 996var can_unlock = 0; 997document.keepMessage = function(){ 998 var messageNum= 0; 999 message = new Array(); 1000 message[0]='Did your parents not teach you to share?'; 1001 message[1]='This has nothing at all to do with Castles!'; 1002 message[2]='This isn\'t exactly the Facebook alternative it eludes to!'; 1003 message[3]='Thats\'s not very social of you!'; 1004 message[4]='What?! Oh... you must of missed the share button. It\'s just over to the left!'; 1005 message[5]='Keep it where exactly? In the attic gathering dust?'; 1006 message[6]='Don\'t be so selfish!'; 1007 message[7]='WHY? ...Why would you keep this all for yourself?'; 1008 message[8]='What did you actually expect to happen?'; 1009 message[9]='This is a useless link built entirely to entertain ourselves!'; 1010 message[10]='Keep? it\'s not yours to keep, it\'s Nitrome\'s, not yours!'; 1011 message[11]='Mine all mine! My... precious!'; 1012 message[12]='Finders Keepers... ...Losers Weepers!'; 1013 message[13]='Meaning - To retain the possession of'; 1014 message[14]='You have now just accessed a secret Nitrome game... Nah just kidding!'; 1015 message[15]='How many times have you clicked this link now?'; 1016 if(can_unlock){message[16]='This is my avatar... err... I mean blog post!';} 1017 var messagesMax = message.length; 1018 messageNum = Math.floor((messagesMax)*Math.random()); 1019 var avatarChance = .05; 1020 var thePivot = Math.random(); 1021 if(thePivot >= avatarChance||!can_unlock){ 1022 alert(message[messageNum]); 1023 }else{ 1024 if(confirm('So... you really want this avatar, huh?')){ 1025 blogAvt.attemptUnlock(); 1026 can_unlock = 0; 1027 } 1028 } 1029} 1030var loading_more_content = false; 1031var post_pages = {}; 1032var blogAvatarLoaded = function(obj){ 1033 if(typeof(obj) != 'undefined' && typeof(obj.unlocked) != 'undefined' && !obj.unlocked){ 1034 can_unlock = 1; 1035 $j('.blg_avt, .blg_avt img').hide(); 1036 }else{ 1037 $j('.blg_avt, .blg_avt img').hide(); 1038 } 1039} 1040function loadMoreContent(post_id){ 1041 if(typeof(post_pages[''+post_id])=="undefined"){ 1042 post_pages[''+post_id] = 1; 1043 }else{ 1044 post_pages[''+post_id]++; 1045 } 1046 extraComments(post_id,post_pages[''+post_id],2,1); 1047} 1048function castJamVote(item){ 1049 var url = "/jam/interchange/json/theme-vote/"; 1050 var data = {"chosen_theme":item}; 1051 var success = function(retData){ 1052 if(retData.error){ 1053 showUserMessage(retData.error); 1054 } 1055 else if(retData.message){ 1056 showUserMessage(retData.message); 1057 } 1058 } 1059 var dataType = 'json'; 1060 $j.ajax({ 1061 url: url, 1062 data: data, 1063 success: success, 1064 dataType: dataType 1065 }); 1066} 1067</script>
1067 1068<style> 1069 .blg_avt { 1070 background:url('//cdn.nitrome.com/styles/images/avt/ig_avatargift_16x16-bg.png') transparent; 1071 z-index: 999; 1072 width:14px; 1073 height:16px; 1074 top: 170px; 1075 left: 715px; 1076 } 1077 #page-pos { 1078 width: 309px; 1079 display: inline-block; 1080 text-align: center; 1081 position: absolute; 1082 top: 0; 1083 background: #fff; 1084 font-weight: bold; 1085 font-size: 12px; 1086 margin: 0 auto; 1087 padding: 8px; 1088 border-radius: 4px; 1089 left: 114px; 1090 color: #999; 1091 top: 5px; 1092 height: 14px; 1093 } 1094 #older_posts_button { 1095 background: transparent; 1096 height: 30px; 1097 left: 445px; 1098 position: absolute; 1099 top: 5px; 1100 width: 104px; 1101 z-index: 200; 1102 float: right; 1103 } 1104 .post p.the-author{ 1105 color:#222; 1106 font-size:12px; 1107 font-family:arial, helvetica, san-serif; 1108 } 1109</style> </div> 1110 <div id="skyscraper_shadow"> 1111 </div> 1112 <div id="skyscraper_box"> 1113 </div> 1114 <div id="skyscraper_description"> 1115 </div> 1116 <!--new box--> 1117 1118 <div id="left_top_container"> 1119 <div id="left_top_bar"> 1120 </div> 1121 <div id="top_game" class="icon"></div> 1122 <div id="left_top_box" class="border_color"> 1123 </div> 1124 <div id="top_five_bg" class="panel_color"> 1125 </div> 1126 <div id='top_five_link_1' class="top_five_link_ol"> 1127 </div> 1128 <div id='top_five_link_2' class="top_five_link_ol"> 1129 </div> 1130 <div id='top_five_link_3' class="top_five_link_ol"> 1131 </div> 1132 <div id='top_five_link_4' class="top_five_link_ol"> 1133 </div> 1134 <div id='top_five_link_5' class="top_five_link_ol"> 1135 </div> 1136 <div id='top_five_text_1' class="top_five_link_ol2"> 1137 </div> 1138 <div id='top_five_text_2' class="top_five_link_ol2"> 1139 </div> 1140 <div id='top_five_text_3' class="top_five_link_ol2"> 1141 </div> 1142 <div id='top_five_text_4' class="top_five_link_ol2"> 1143 </div> 1144 <div id='top_five_text_5' class="top_five_link_ol2"> 1145 </div> 1146 <div id="top_five_overlay_1"></div> 1147 <div id="top_five_overlay_2"></div> 1148 <div id="top_five_overlay_3"></div> 1149 <div id="top_five_overlay_4"></div> 1150 <div id="top_five_overlay_5"></div> 1151 <div id="top_five_1" class="top_five_large corners"> 1152 </div> 1153 <div id="top_five_2" class="top_five_small corners"> 1154 <div id="tf_inner_bg_2" class="top_five_inner_bg panel_color corners_left"></div> 1155 </div> 1156 <div id="top_five_3" class="top_five_small corners"> 1157 <div id="tf_inner_bg_3" class="top_five_inner_bg panel_color corners_left"></div> 1158 </div> 1159 <div id="top_five_4" class="top_five_small corners"> 1160 <div id="tf_inner_bg_4" class="top_five_inner_bg panel_color corners_left"></div> 1161 </div> 1162 <div id="top_five_5" class="top_five_small corners"> 1163 <div id="tf_inner_bg_5" class="top_five_inner_bg panel_color corners_left"></div> 1164 </div> 1165 </div> 1166 <div id="left_top_shadow"> 1167 </div> 1168 <div id="left_bottom_shadow"> 1169 </div> 1170 <div id="left_bottom_container"> 1171 <div id="left_bottom_bar"> 1172 </div> 1173 <div id="left_bottom_bg" class="border_color"> 1174 </div> 1175 </div> 1176 <div id="corporate_shadow"> 1177 </div> 1178 <div id="corporate"> 1179 <div id="corporate_copyright"> 1180 <div id="corporate_img"><img src="//cdn.nitrome.com/styles/images/corporate_img.png" alt="cuboy image"/></div> 1181 </div> 1182 <div id="corporate_spacer" ></div> 1183 <div id="home_corp" class="corp_link" onmouseover="corpRollover('home')" onmouseout="corpRollout('home')"> 1184 </div> 1185 <div id="links_corp" class="corp_link"> 1186 </div> 1187 <div id="faqs_corp" class="corp_link"> 1188 </div> 1189 <div id="licensing_corp" class="corp_link"> 1190 </div> 1191 <div id="distribution_corp" class="corp_link"> 1192 </div> 1193 <div id="contact_corp" class="corp_link"> 1194 </div> 1195 <div id="credits_corp" class="corp_link"> 1196 </div> 1197 <div id="jobs_corp" class="corp_link"> 1198 </div> 1199 <a id="corporate_facebook" href="http://www.facebook.com/nitrome/"></a>
1200 <a id="corporate_twitter" href="http://www.twitter.com/nitrome/"></a> 1201 <a id="corporate_youtube" href="http://www.youtube.com/nitrome/"></a> 1202 </div> 1203 <!-- new box --> 1204 <div id="new_elem_top_bar"> 1205 </div> 1206 <div id="new_elem_top_bar"></div> 1207 <div id="new_elem_box"></div> 1208 <div id="new_elem_box_inner"> 1209 <div id="fb-frame" class="corners"> 1210 <div id="fb-inset" class="corners"><div id="fb-root"></div> 1211 <div class="twitter-logo"></div> 1212 <div class="twitter-holster"> 1213 <a href="https://twitter.com/Nitrome" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @Nitrome</a> 1214
1214<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
1214 1215 </div> 1216 </div> 1217 <div id="fb-icon" class="corners"></div> 1218 </div> 1219 </div> 1220 <style> 1221 div#fb-inset { 1222 background-color: #FFF !important; 1223 border-radius: 0 0 0 0 !important; 1224 float: left !important; 1225 height: 63px !important; 1226 left: 0 !important; 1227 margin-left: 3px !important; 1228 margin-top: 3px !important; 1229 position: relative !important; 1230 text-align: left !important; 1231 top: 0 !important; 1232 width: 227px !important; 1233 z-index: 127 !important; 1234 border-radius: 1px !important; 1235 } 1236 div#fb-frame { 1237 background-color: #00aced !important; 1238 border: 1px solid #008cbd !important; 1239 border-radius: 0 0 0 0 !important; 1240 float: left !important; 1241 height: 69px !important; 1242 left: 0 !important; 1243 margin-left: 0 !important; 1244 margin-top: 0 !important; 1245 position: relative !important; 1246 top: 0 !important; 1247 width: 298px !important; 1248 z-index: 126 !important; 1249 } 1250 div#fb-icon { 1251 background-image: url(//cdn.nitrome.com/styles/images/twitterimg.png) !important; 1252 background-position: -1px -1px !important; 1253 float: left !important; 1254 height: 61px !important; 1255 left: -2px !important; 1256 margin-left: 4px !important; 1257 margin-top: 4px !important; 1258 position: relative !important; 1259 top: 0 !important; 1260 width: 64px !important; 1261 background-size: 203% !important; 1262 } 1263 .twitter-holster { 1264 top: 17px; 1265 position: absolute; 1266 left: 68px; 1267 } 1268 .twitter-logo { 1269 top: 4px; 1270 position: absolute; 1271 left: 4px; 1272 background-image: url(//cdn.nitrome.com/styles/images/nitrome-twitter.png) !important; 1273 width: 55px; 1274 height: 55px; 1275 background-size: 55px; 1276 } 1277 </style> 1278 <!-- end of new box --> 1279 <!-- new box 2 --> 1280 <div id="new_elem_container_2"> 1281 <div id="new_elem_top_bar_2"><div id="new_elem_title_2"></div> 1282 1283 </div> 1284 <div id="new_elem_box_2" class="border_color"></div> 1285 <div id="new_elem_box_inner_2"> 1286 <div id="small-video"> 1287 <div id="smallplayer">An error occured, please check that you have Flash Player 10 or higher.</div> 1288 </div> 1289 </div> 1290 </div> 1291 <div id="new_elem_shadow_2"></div> 1292 <div id="left_skyscraper_shadow"></div> 1293 <div id="mu_3_shadow_ng"></div> 1294
1294<script type="text/javascript" src="//cdn.nitrome.com/scripts/vars.js"></script>
1294 1295
1295<script type="text/javascript" src="//cdn.nitrome.com/scripts/globalconfig_3.0.11.js"></script>
1295 1296
1296<script> 1297 $j('#login_bg').change(function(){ 1298 $j('#profile_link_top').attr('href','/profile/'); 1299 }); 1300 if(typeof showUserMessage != 'function'){ 1301 showUserMessage = function(string){ 1302 $j('#container').modal('update',string); 1303 $j('#container').modal('show'); 1304 } 1305 } 1306 $j('#container').modal(); 1307 </script>
1307 1308
1308<script type="text/javascript" src="//cdn.nitrome.com/scripts/sideads_2.5.51.js"></script>
1308 1309
1309<script type="text/javascript" src="//cdn.nitrome.com/scripts/newgames.js"></script>
1309 1310
1310<script type="text/javascript" src="//cdn.nitrome.com/scripts/common-1_2.5.2.js"></script>
1310 1311
1311<script type="text/javascript" src="//cdn.nitrome.com/scripts/small-videos_2.5.2.js"></script>
1311 1312
1312<script type="text/javascript" src="//cdn.nitrome.com/scripts/blog_2.5.1.js"></script>
1312 <div id="left_skyscraper_container" class="border_color"> 1313 <div id="left_skyscraper_box"> 1314 <div id="left_skyscraper_ad"> 1315
1315<script type='text/javascript'> 1316 googletag.cmd.push(function() { googletag.display('left_skyscraper_ad'); }); 1317 </script>
1317 1318 </div> 1319 <div id="left_skyscraper_description"> 1320 1321 </div> 1322 </div> 1323 </div> 1324 <!-- end of new box 2 --> 1325 <div id="mu_2_container" class="border_color"> 1326 <div id="mu_2_ad"> 1327
1327<script type='text/javascript'> 1328 googletag.cmd.push(function() { googletag.display('mu_2_ad'); }); 1329 </script>
1329 1330 </div> 1331 <div id="mu_2_description"></div> 1332 </div> 1333 <div id="banner_ad"> 1334
1334<script type='text/javascript'> 1335 googletag.cmd.push(function() { googletag.display('banner_ad'); }); 1336 </script>
1336 1337 </div> 1338 <div id="skyscraper_ad"> 1339
1339<script type='text/javascript'> 1340 googletag.cmd.push(function() { googletag.display('skyscraper_ad'); }); 1341 </script>
1341 1342 </div> 1343
1343<script type="text/javascript"> 1344 //GA_googleFillSlot("cpmstar_1_1"); 1345 </script>
1345 1346 <div id="colophon_mid" class="colophon"> 1347 <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center> 1348 <div style="clear:both"></div> 1349 </div> 1350 <div id="colophon_left" class="colophon"> 1351 <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center> 1352 <div style="clear:both"></div> 1353 </div> 1354 <div id="colophon_right" class="colophon"> 1355 <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center> 1356 <div style="clear:both"></div> 1357 </div> 1358 <div id="colophon_top" class="colophon"> 1359 <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center> 1360 <div style="clear:both"></div> 1361 </div> 1362 <div id="colophon_bottom" class="colophon"> 1363 <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center> 1364 <div style="clear:both"></div> 1365 </div> 1366</div><!-- Google tag GA4 (gtag.js) -->
vendor: 65 bytes, lines 1366-1367
1366 1367<script async src="https://www.googletagmanager.com/gtag/js?id=
1367G-FSRY7FRZ5L
vendor: 13 bytes, line 1367
1367"></script>
1368<script> 1369
vendor: 144 bytes, lines 1369-1373
1369window.dataLayer = window.dataLayer || []; 1370 function gtag(){dataLayer.push(arguments);} 1371 gtag('js', new Date()); 1372 1373 gtag('config', '
1373G-FSRY7FRZ5L
vendor: 5 bytes, line 1373
1373');
1374</script>
1374 1375<!-- end ga4 -->
1376<script type="text/javascript"> 1377 window.setTimeout('checkPlayerDefined();',1000); 1378 function checkPlayerDefined(){ 1379 if(typeof(smallplayer) == 'undefined'){ 1380 smallplayer = document.getElementById('smallplayer'); 1381 } 1382 } 1383</script>
1383
1384<script src="//cdn.nitrome.com/scripts/avatar_2.5.3.js"></script>
1384 1385<style> 1386.ftr_avt { 1387 background: url("//cdn.nitrome.com/styles/images/avt/ig_avatargift_32x32-bg.png") transparent; 1388 top: 1358px; 1389 left: 6px; 1390 z-index: 999; 1391} 1392</style>
1393<script src="//cdn.nitrome.com/scripts/tickerUpdates.js"></script>
1393 1394<audio id="ticker_alert_sfx"> 1395 <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.ogg" type="audio/ogg"> 1396 <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.mp3" type="audio/mpeg"> 1397 <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.wav" type="audio/wav"> 1398</audio> 1399
1400<script> 1401 var tickMgr = new TickerUpdates(); 1402 1403 (function(){ 1404 /////////////////////////////////////////// 1405 // CHECK FOR MAINTENANCE MODE ACTIVATION // 1406 /////////////////////////////////////////// 1407 var req = new XMLHttpRequest(); 1408 req.open('GET', document.location, false); 1409 req.send(null); 1410 var headers = req.getAllResponseHeaders().toLowerCase(); 1411 var maintenance_status = headers.search('x-maintenance-mode-active'); 1412 if(maintenance_status != -1){ 1413 document.getElementsByTagName('body')[0].innerHTML += '<div id="maintenance-mode-active" onclick="javascript: closeMaintenanceWindow();"><h1>Maintenance mode active!</h1><p>People will not be able to view this site whilst maintenance mode is active!</p></div>'; 1414 $j('#maintenance-mode-active h1').css( 1415 { 1416 "font-size": "24px", 1417 "font-weight": "bold", 1418 "color": "#ca0000", 1419 "text-transform":"uppercase", 1420 "text-decoration":"underline" 1421 }); 1422 1423 $j('#maintenance-mode-active').css( 1424 { 1425 "background": "rgba(255,255,255,.8)", 1426 "position": "fixed", 1427 "bottom": 0, 1428 "z-index": 9999, 1429 "padding": "20px", 1430 "font-size": "14px", 1431 "border": "2px solid #ca0000", 1432 "box-shadow": "0 0 15px rgba(0,0,0,.5)", 1433 "width": "auto", 1434 "font-weight": "bold", 1435 "color": "#ca0000", 1436 "margin-left": "50%", 1437 "width":"368px", 1438 "left":"-184px", 1439 "cursor":"pointer", 1440 "margin-bottom":"20px" 1441 }); 1442 window.closeMaintenanceWindow = function(){ 1443 $j('#maintenance-mode-active').hide(); 1444 } 1445 } 1446 })(); 1447</script>
1447
1448<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-0e5092abdabfb2d9bb8","applicationID":"960248169","transactionName":"YwAHY0pQChVZABdbDVpKMEVRHgYKVwRMWwxQAB0ZSFkU","queueTime":0,"applicationTime":110,"atts":"T0cEFQJKGRs=","errorBeacon":"bam.nr-data.net","agent":""}</script>
1448</body> 1449</html> 1450<!-- load: 0.091003179550171--> 1451<!-- date/time: 24, Sep 2026 / 09:07:01-->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.