CINXE.COM
Accounting software you'll love - FreeAgent
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta property="env" content="production"/> <link rel="preload" href="/components/stylesheets/main-7f7d53c7.css" as="style"/> <script src="/components/javascript/polyfills-25409819.js" nomodule="true"></script> <script>/*! For license information please see main_head_critical.js.LICENSE.txt */ !function(){var t={73405:function(t,e,n){"use strict";function r(t,e){return e=void 0!==e?e:document,[].slice.call(e.querySelectorAll(t))}n.d(e,{X:function(){return r}})},354:function(t,e,n){"use strict";n.r(e),n.d(e,{reportError:function(){return Ar}});const r="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,o="8.20.0",s=globalThis;function i(t,e,n){const r=n||s,i=r.__SENTRY__=r.__SENTRY__||{},a=i[o]=i[o]||{};return a[t]||(a[t]=e())}const a=["debug","info","warn","error","log","assert","trace"],c={};function u(t){if(!("console"in s))return t();const e=s.console,n={},r=Object.keys(c);r.forEach((t=>{const r=c[t];n[t]=e[t],e[t]=r}));try{return t()}finally{r.forEach((t=>{e[t]=n[t]}))}}const l=function(){let t=!1;const e={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return r?a.forEach((n=>{e[n]=(...e)=>{t&&u((()=>{s.console[n](`Sentry Logger [${n}]:`,...e)}))}})):a.forEach((t=>{e[t]=()=>{}})),e}(),p=Object.prototype.toString;function d(t){switch(p.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return S(t,Error)}}function f(t,e){return p.call(t)===`[object ${e}]`}function h(t){return f(t,"ErrorEvent")}function m(t){return f(t,"DOMError")}function g(t){return f(t,"String")}function _(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function y(t){return null===t||_(t)||"object"!=typeof t&&"function"!=typeof t}function v(t){return f(t,"Object")}function b(t){return"undefined"!=typeof Event&&S(t,Event)}function E(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function S(t,e){try{return t instanceof e}catch(t){return!1}}function w(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t._isVue)}const x=s,k=80;function O(t,e={}){if(!t)return"<unknown>";try{let n=t;const r=5,o=[];let s=0,i=0;const a=" > ",c=a.length;let u;const l=Array.isArray(e)?e:e.keyAttrs,p=!Array.isArray(e)&&e.maxStringLength||k;for(;n&&s++<r&&(u=C(n,l),!("html"===u||s>1&&i+o.length*c+u.length>=p));)o.push(u),i+=u.length,n=n.parentNode;return o.reverse().join(a)}catch(t){return"<unknown>"}}function C(t,e){const n=t,r=[];if(!n||!n.tagName)return"";if(x.HTMLElement&&n instanceof HTMLElement&&n.dataset){if(n.dataset.sentryComponent)return n.dataset.sentryComponent;if(n.dataset.sentryElement)return n.dataset.sentryElement}r.push(n.tagName.toLowerCase());const o=e&&e.length?e.filter((t=>n.getAttribute(t))).map((t=>[t,n.getAttribute(t)])):null;if(o&&o.length)o.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else{n.id&&r.push(`#${n.id}`);const t=n.className;if(t&&g(t)){const e=t.split(/\s+/);for(const t of e)r.push(`.${t}`)}}const s=["aria-label","type","name","title","alt"];for(const t of s){const e=n.getAttribute(t);e&&r.push(`[${t}="${e}"]`)}return r.join("")}function T(t,e=0){return"string"!=typeof t||0===e||t.length<=e?t:`${t.slice(0,e)}...`}function I(t,e){if(!Array.isArray(t))return"";const n=[];for(let e=0;e<t.length;e++){const r=t[e];try{w(r)?n.push("[VueViewModel]"):n.push(String(r))}catch(t){n.push("[value cannot be serialized]")}}return n.join(e)}function $(t,e,n=!1){return!!g(t)&&(f(e,"RegExp")?e.test(t):!!g(e)&&(n?t===e:t.includes(e)))}function D(t,e=[],n=!1){return e.some((e=>$(t,e,n)))}function N(t,e,n){if(!(e in t))return;const r=t[e],o=n(r);"function"==typeof o&&R(o,r),t[e]=o}function j(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch(n){r&&l.log(`Failed to add non-enumerable property "${e}" to object`,t)}}function R(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,j(t,"__sentry_original__",e)}catch(t){}}function A(t){return t.__sentry_original__}function P(t){if(d(t))return{message:t.message,name:t.name,stack:t.stack,...M(t)};if(b(t)){const e={type:t.type,target:L(t.target),currentTarget:L(t.currentTarget),...M(t)};return"undefined"!=typeof CustomEvent&&S(t,CustomEvent)&&(e.detail=t.detail),e}return t}function L(t){try{return e=t,"undefined"!=typeof Element&&S(e,Element)?O(t):Object.prototype.toString.call(t)}catch(t){return"<unknown>"}var e}function M(t){if("object"==typeof t&&null!==t){const e={};for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}return{}}function U(t){return q(t,new Map)}function q(t,e){if(function(t){if(!v(t))return!1;try{const e=Object.getPrototypeOf(t).constructor.name;return!e||"Object"===e}catch(t){return!0}}(t)){const n=e.get(t);if(void 0!==n)return n;const r={};e.set(t,r);for(const n of Object.keys(t))void 0!==t[n]&&(r[n]=q(t[n],e));return r}if(Array.isArray(t)){const n=e.get(t);if(void 0!==n)return n;const r=[];return e.set(t,r),t.forEach((t=>{r.push(q(t,e))})),r}return t}function B(){const t=s,e=t.crypto||t.msCrypto;let n=()=>16*Math.random();try{if(e&&e.randomUUID)return e.randomUUID().replace(/-/g,"");e&&e.getRandomValues&&(n=()=>{const t=new Uint8Array(1);return e.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&n())>>t/4).toString(16)))}function F(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function H(t){const{message:e,event_id:n}=t;if(e)return e;const r=F(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"<unknown>":n||"<unknown>"}function G(t,e,n){const r=t.exception=t.exception||{},o=r.values=r.values||[],s=o[0]=o[0]||{};s.value||(s.value=e||""),s.type||(s.type=n||"Error")}function Y(t,e){const n=F(t);if(!n)return;const r=n.mechanism;if(n.mechanism={type:"generic",handled:!0,...r,...e},e&&"data"in e){const t={...r&&r.data,...e.data};n.mechanism.data=t}}function z(t){if(t&&t.__sentry_captured__)return!0;try{j(t,"__sentry_captured__",!0)}catch(t){}return!1}function W(t){return Array.isArray(t)?t:[t]}const J="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,V=[];function X(t){const e=t.defaultIntegrations||[],n=t.integrations;let r;e.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(n)?[...e,...n]:"function"==typeof n?W(n(e)):e;const o=function(t){const e={};return t.forEach((t=>{const{name:n}=t,r=e[n];r&&!r.isDefaultInstance&&t.isDefaultInstance||(e[n]=t)})),Object.values(e)}(r),s=o.findIndex((t=>"Debug"===t.name));if(s>-1){const[t]=o.splice(s,1);o.push(t)}return o}function K(t,e){for(const n of e)n&&n.afterAllSetup&&n.afterAllSetup(t)}function Q(t,e,n){if(n[e.name])J&&l.log(`Integration skipped because it was already installed: ${e.name}`);else{if(n[e.name]=e,-1===V.indexOf(e.name)&&"function"==typeof e.setupOnce&&(e.setupOnce(),V.push(e.name)),e.setup&&"function"==typeof e.setup&&e.setup(t),"function"==typeof e.preprocessEvent){const n=e.preprocessEvent.bind(e);t.on("preprocessEvent",((e,r)=>n(e,r,t)))}if("function"==typeof e.processEvent){const n=e.processEvent.bind(e),r=Object.assign(((e,r)=>n(e,r,t)),{id:e.name});t.addEventProcessor(r)}J&&l.log(`Integration installed: ${e.name}`)}}const Z=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,"undefined is not an object (evaluating 'a.L')",'can\'t redefine non-configurable property "solana"',"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)","Can't find variable: _AutofillCallbackHandler"],tt=(t={})=>({name:"InboundFilters",processEvent(e,n,r){const o=r.getOptions(),s=function(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:Z],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,o);return function(t,e){if(e.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return J&&l.warn(`Event dropped due to being internal Sentry Error.\nEvent: ${H(t)}`),!0;if(function(t,e){if(t.type||!e||!e.length)return!1;return function(t){const e=[];t.message&&e.push(t.message);let n;try{n=t.exception.values[t.exception.values.length-1]}catch(t){}n&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`));return e}(t).some((t=>D(t,e)))}(t,e.ignoreErrors))return J&&l.warn(`Event dropped due to being matched by \`ignoreErrors\` option.\nEvent: ${H(t)}`),!0;if(function(t){if(t.type)return!1;if(!t.exception||!t.exception.values||0===t.exception.values.length)return!1;return!t.message&&!t.exception.values.some((t=>t.stacktrace||t.type&&"Error"!==t.type||t.value))}(t))return J&&l.warn(`Event dropped due to not having an error message, error type or stacktrace.\nEvent: ${H(t)}`),!0;if(function(t,e){if("transaction"!==t.type||!e||!e.length)return!1;const n=t.transaction;return!!n&&D(n,e)}(t,e.ignoreTransactions))return J&&l.warn(`Event dropped due to being matched by \`ignoreTransactions\` option.\nEvent: ${H(t)}`),!0;if(function(t,e){if(!e||!e.length)return!1;const n=et(t);return!!n&&D(n,e)}(t,e.denyUrls))return J&&l.warn(`Event dropped due to being matched by \`denyUrls\` option.\nEvent: ${H(t)}.\nUrl: ${et(t)}`),!0;if(!function(t,e){if(!e||!e.length)return!0;const n=et(t);return!n||D(n,e)}(t,e.allowUrls))return J&&l.warn(`Event dropped due to not being matched by \`allowUrls\` option.\nEvent: ${H(t)}.\nUrl: ${et(t)}`),!0;return!1}(e,s)?null:e}});function et(t){try{let e;try{e=t.exception.values[0].stacktrace.frames}catch(t){}return e?function(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&"<anonymous>"!==n.filename&&"[native code]"!==n.filename)return n.filename||null}return null}(e):null}catch(e){return J&&l.error(`Cannot extract url for event ${H(t)}`),null}}function nt(){return rt(s),s}function rt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||o,e[o]=e[o]||{}}function ot(){return{traceId:B(),spanId:B().substring(16)}}const st=1e3;function it(){return Date.now()/st}const at=function(){const{performance:t}=s;if(!t||!t.now)return it;const e=Date.now()-t.now(),n=null==t.timeOrigin?e:t.timeOrigin;return()=>(n+t.now())/st}();let ct;(()=>{const{performance:t}=s;if(!t||!t.now)return void(ct="none");const e=36e5,n=t.now(),r=Date.now(),o=t.timeOrigin?Math.abs(t.timeOrigin+n-r):e,i=o<e,a=t.timing&&t.timing.navigationStart,c="number"==typeof a?Math.abs(a+n-r):e;i||c<e?o<=c?(ct="timeOrigin",t.timeOrigin):ct="navigationStart":ct="dateNow"})();function ut(t){const e=at(),n={sid:B(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return U({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(n)};return t&<(n,t),n}function lt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),t.did||e.did||(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||at(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=32===e.sid.length?e.sid:B()),void 0!==e.init&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),"number"==typeof e.started&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof e.duration)t.duration=e.duration;else{const e=t.timestamp-t.started;t.duration=e>=0?e:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),"number"==typeof e.errors&&(t.errors=e.errors),e.status&&(t.status=e.status)}const pt="_sentrySpan";function dt(t,e){e?j(t,pt,e):delete t[pt]}function ft(t){return t[pt]}class ht{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=ot()}clone(){const t=new ht;return t._breadcrumbs=[...this._breadcrumbs],t._tags={...this._tags},t._extra={...this._extra},t._contexts={...this._contexts},t._user=this._user,t._level=this._level,t._session=this._session,t._transactionName=this._transactionName,t._fingerprint=this._fingerprint,t._eventProcessors=[...this._eventProcessors],t._requestSession=this._requestSession,t._attachments=[...this._attachments],t._sdkProcessingMetadata={...this._sdkProcessingMetadata},t._propagationContext={...this._propagationContext},t._client=this._client,t._lastEventId=this._lastEventId,dt(t,ft(this)),t}setClient(t){this._client=t}setLastEventId(t){this._lastEventId=t}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(t){this._scopeListeners.push(t)}addEventProcessor(t){return this._eventProcessors.push(t),this}setUser(t){return this._user=t||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&<(this._session,{user:t}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(t){return this._requestSession=t,this}setTags(t){return this._tags={...this._tags,...t},this._notifyScopeListeners(),this}setTag(t,e){return this._tags={...this._tags,[t]:e},this._notifyScopeListeners(),this}setExtras(t){return this._extra={...this._extra,...t},this._notifyScopeListeners(),this}setExtra(t,e){return this._extra={...this._extra,[t]:e},this._notifyScopeListeners(),this}setFingerprint(t){return this._fingerprint=t,this._notifyScopeListeners(),this}setLevel(t){return this._level=t,this._notifyScopeListeners(),this}setTransactionName(t){return this._transactionName=t,this._notifyScopeListeners(),this}setContext(t,e){return null===e?delete this._contexts[t]:this._contexts[t]=e,this._notifyScopeListeners(),this}setSession(t){return t?this._session=t:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(t){if(!t)return this;const e="function"==typeof t?t(this):t,[n,r]=e instanceof mt?[e.getScopeData(),e.getRequestSession()]:v(e)?[t,t.requestSession]:[],{tags:o,extra:s,user:i,contexts:a,level:c,fingerprint:u=[],propagationContext:l}=n||{};return this._tags={...this._tags,...o},this._extra={...this._extra,...s},this._contexts={...this._contexts,...a},i&&Object.keys(i).length&&(this._user=i),c&&(this._level=c),u.length&&(this._fingerprint=u),l&&(this._propagationContext=l),r&&(this._requestSession=r),this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._session=void 0,dt(this,void 0),this._attachments=[],this._propagationContext=ot(),this._notifyScopeListeners(),this}addBreadcrumb(t,e){const n="number"==typeof e?e:100;if(n<=0)return this;const r={timestamp:it(),...t},o=this._breadcrumbs;return o.push(r),this._breadcrumbs=o.length>n?o.slice(-n):o,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(t){return this._attachments.push(t),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,span:ft(this)}}setSDKProcessingMetadata(t){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...t},this}setPropagationContext(t){return this._propagationContext=t,this}getPropagationContext(){return this._propagationContext}captureException(t,e){const n=e&&e.event_id?e.event_id:B();if(!this._client)return l.warn("No client configured on scope - will not capture exception!"),n;const r=new Error("Sentry syntheticException");return this._client.captureException(t,{originalException:t,syntheticException:r,...e,event_id:n},this),n}captureMessage(t,e,n){const r=n&&n.event_id?n.event_id:B();if(!this._client)return l.warn("No client configured on scope - will not capture message!"),r;const o=new Error(t);return this._client.captureMessage(t,e,{originalException:t,syntheticException:o,...n,event_id:r},this),r}captureEvent(t,e){const n=e&&e.event_id?e.event_id:B();return this._client?(this._client.captureEvent(t,{...e,event_id:n},this),n):(l.warn("No client configured on scope - will not capture event!"),n)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach((t=>{t(this)})),this._notifyingListeners=!1)}}const mt=ht;class gt{constructor(t,e){let n,r;n=t||new mt,r=e||new mt,this._stack=[{scope:n}],this._isolationScope=r}withScope(t){const e=this._pushScope();let n;try{n=t(e)}catch(t){throw this._popScope(),t}return E(n)?n.then((t=>(this._popScope(),t)),(t=>{throw this._popScope(),t})):(this._popScope(),n)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const t=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:t}),t}_popScope(){return!(this._stack.length<=1)&&!!this._stack.pop()}}function _t(){const t=rt(nt());return t.stack=t.stack||new gt(i("defaultCurrentScope",(()=>new mt)),i("defaultIsolationScope",(()=>new mt)))}function yt(t){return _t().withScope(t)}function vt(t,e){const n=_t();return n.withScope((()=>(n.getStackTop().scope=t,e(t))))}function bt(t){return _t().withScope((()=>t(_t().getIsolationScope())))}function Et(t){const e=rt(t);return e.acs?e.acs:{withIsolationScope:bt,withScope:yt,withSetScope:vt,withSetIsolationScope:(t,e)=>bt(e),getCurrentScope:()=>_t().getScope(),getIsolationScope:()=>_t().getIsolationScope()}}function St(){return Et(nt()).getCurrentScope()}function wt(){return Et(nt()).getIsolationScope()}function xt(){return St().getClient()}let kt;const Ot=new WeakMap,Ct=()=>({name:"FunctionToString",setupOnce(){kt=Function.prototype.toString;try{Function.prototype.toString=function(...t){const e=A(this),n=Ot.has(xt())&&void 0!==e?e:this;return kt.apply(n,t)}}catch(t){}},setup(t){Ot.set(t,!0)}}),Tt=50,It="?",$t=/\(error: (.*)\)/,Dt=/captureMessage|captureException/;function Nt(...t){const e=t.sort(((t,e)=>t[0]-e[0])).map((t=>t[1]));return(t,n=0,r=0)=>{const o=[],s=t.split("\n");for(let t=n;t<s.length;t++){const n=s[t];if(n.length>1024)continue;const i=$t.test(n)?n.replace($t,"$1"):n;if(!i.match(/\S*Error: /)){for(const t of e){const e=t(i);if(e){o.push(e);break}}if(o.length>=Tt+r)break}}return function(t){if(!t.length)return[];const e=Array.from(t);/sentryWrapped/.test(jt(e).function||"")&&e.pop();e.reverse(),Dt.test(jt(e).function||"")&&(e.pop(),Dt.test(jt(e).function||"")&&e.pop());return e.slice(0,Tt).map((t=>({...t,filename:t.filename||jt(e).filename,function:t.function||It})))}(o.slice(r))}}function jt(t){return t[t.length-1]||{}}const Rt="<anonymous>";function At(t){try{return t&&"function"==typeof t&&t.name||Rt}catch(t){return Rt}}function Pt(t){const e=t.exception;if(e){const t=[];try{return e.values.forEach((e=>{e.stacktrace.frames&&t.push(...e.stacktrace.frames)})),t}catch(t){return}}}const Lt=()=>{let t;return{name:"Dedupe",processEvent(e){if(e.type)return e;try{if(function(t,e){if(!e)return!1;if(function(t,e){const n=t.message,r=e.message;if(!n&&!r)return!1;if(n&&!r||!n&&r)return!1;if(n!==r)return!1;if(!Ut(t,e))return!1;if(!Mt(t,e))return!1;return!0}(t,e))return!0;if(function(t,e){const n=qt(e),r=qt(t);if(!n||!r)return!1;if(n.type!==r.type||n.value!==r.value)return!1;if(!Ut(t,e))return!1;if(!Mt(t,e))return!1;return!0}(t,e))return!0;return!1}(e,t))return J&&l.warn("Event dropped due to being a duplicate of previously captured event."),null}catch(t){}return t=e}}};function Mt(t,e){let n=Pt(t),r=Pt(e);if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;if(r.length!==n.length)return!1;for(let t=0;t<r.length;t++){const e=r[t],o=n[t];if(e.filename!==o.filename||e.lineno!==o.lineno||e.colno!==o.colno||e.function!==o.function)return!1}return!0}function Ut(t,e){let n=t.fingerprint,r=e.fingerprint;if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;try{return!(n.join("")!==r.join(""))}catch(t){return!1}}function qt(t){return t.exception&&t.exception.values&&t.exception.values[0]}function Bt(t,e){!0===e.debug&&(J?l.enable():u((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})));St().update(e.initialScope);const n=new t(e);return function(t){St().setClient(t)}(n),n.init(),n}const Ft="production";function Ht(t,e=100,n=1/0){try{return Yt("",t,e,n)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function Gt(t,e=3,n=102400){const r=Ht(t,e);return o=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(o))>n?Gt(t,e-1,n):r;var o}function Yt(t,e,n=1/0,r=1/0,o=function(){const t="function"==typeof WeakSet,e=t?new WeakSet:[];return[function(n){if(t)return!!e.has(n)||(e.add(n),!1);for(let t=0;t<e.length;t++)if(e[t]===n)return!0;return e.push(n),!1},function(n){if(t)e.delete(n);else for(let t=0;t<e.length;t++)if(e[t]===n){e.splice(t,1);break}}]}()){const[s,i]=o;if(null==e||["number","boolean","string"].includes(typeof e)&&!Number.isNaN(e))return e;const a=function(t,e){try{if("domain"===t&&e&&"object"==typeof e&&e._events)return"[Domain]";if("domainEmitter"===t)return"[DomainEmitter]";if("undefined"!=typeof global&&e===global)return"[Global]";if("undefined"!=typeof window&&e===window)return"[Window]";if("undefined"!=typeof document&&e===document)return"[Document]";if(w(e))return"[VueViewModel]";if(v(n=e)&&"nativeEvent"in n&&"preventDefault"in n&&"stopPropagation"in n)return"[SyntheticEvent]";if("number"==typeof e&&e!=e)return"[NaN]";if("function"==typeof e)return`[Function: ${At(e)}]`;if("symbol"==typeof e)return`[${String(e)}]`;if("bigint"==typeof e)return`[BigInt: ${String(e)}]`;const r=function(t){const e=Object.getPrototypeOf(t);return e?e.constructor.name:"null prototype"}(e);return/^HTML(\w*)Element$/.test(r)?`[HTMLElement: ${r}]`:`[object ${r}]`}catch(t){return`**non-serializable** (${t})`}var n}(t,e);if(!a.startsWith("[object "))return a;if(e.__sentry_skip_normalization__)return e;const c="number"==typeof e.__sentry_override_normalization_depth__?e.__sentry_override_normalization_depth__:n;if(0===c)return a.replace("object ","");if(s(e))return"[Circular ~]";const u=e;if(u&&"function"==typeof u.toJSON)try{return Yt("",u.toJSON(),c-1,r,o)}catch(t){}const l=Array.isArray(e)?[]:{};let p=0;const d=P(e);for(const t in d){if(!Object.prototype.hasOwnProperty.call(d,t))continue;if(p>=r){l[t]="[MaxProperties ~]";break}const e=d[t];l[t]=Yt(t,e,c-1,r,o),p++}return i(e),l}var zt;function Wt(t){return new Vt((e=>{e(t)}))}function Jt(t){return new Vt(((e,n)=>{n(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(zt||(zt={}));class Vt{constructor(t){Vt.prototype.__init.call(this),Vt.prototype.__init2.call(this),Vt.prototype.__init3.call(this),Vt.prototype.__init4.call(this),this._state=zt.PENDING,this._handlers=[];try{t(this._resolve,this._reject)}catch(t){this._reject(t)}}then(t,e){return new Vt(((n,r)=>{this._handlers.push([!1,e=>{if(t)try{n(t(e))}catch(t){r(t)}else n(e)},t=>{if(e)try{n(e(t))}catch(t){r(t)}else r(t)}]),this._executeHandlers()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Vt(((e,n)=>{let r,o;return this.then((e=>{o=!1,r=e,t&&t()}),(e=>{o=!0,r=e,t&&t()})).then((()=>{o?n(r):e(r)}))}))}__init(){this._resolve=t=>{this._setResult(zt.RESOLVED,t)}}__init2(){this._reject=t=>{this._setResult(zt.REJECTED,t)}}__init3(){this._setResult=(t,e)=>{this._state===zt.PENDING&&(E(e)?e.then(this._resolve,this._reject):(this._state=t,this._value=e,this._executeHandlers()))}}__init4(){this._executeHandlers=()=>{if(this._state===zt.PENDING)return;const t=this._handlers.slice();this._handlers=[],t.forEach((t=>{t[0]||(this._state===zt.RESOLVED&&t[1](this._value),this._state===zt.REJECTED&&t[2](this._value),t[0]=!0)}))}}}function Xt(t,e,n,r=0){return new Vt(((o,s)=>{const i=t[r];if(null===e||"function"!=typeof i)o(e);else{const a=i({...e},n);J&&i.id&&null===a&&l.log(`Event processor "${i.id}" dropped event`),E(a)?a.then((e=>Xt(t,e,n,r+1).then(o))).then(null,s):Xt(t,a,n,r+1).then(o).then(null,s)}}))}const Kt="sentry-",Qt=/^sentry-/;function Zt(t){const e=function(t){if(!t||!g(t)&&!Array.isArray(t))return;if(Array.isArray(t))return t.reduce(((t,e)=>{const n=te(e);return Object.entries(n).forEach((([e,n])=>{t[e]=n})),t}),{});return te(t)}(t);if(!e)return;const n=Object.entries(e).reduce(((t,[e,n])=>{if(e.match(Qt)){t[e.slice(Kt.length)]=n}return t}),{});return Object.keys(n).length>0?n:void 0}function te(t){return t.split(",").map((t=>t.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[e,n])=>(e&&n&&(t[e]=n),t)),{})}const ee="sentry.source",ne="sentry.sample_rate",re="sentry.op",oe="sentry.origin",se="_sentryMetrics";function ie(t){const e=t[se];if(!e)return;const n={};for(const[,[t,r]]of e){(n[t]||(n[t]=[])).push(U(r))}return n}const ae=0,ce=1;const ue=1;function le(t){const{spanId:e,traceId:n}=t.spanContext(),{parent_span_id:r}=fe(t);return U({parent_span_id:r,span_id:e,trace_id:n})}function pe(t){return"number"==typeof t?de(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?de(t.getTime()):at()}function de(t){return t>9999999999?t/1e3:t}function fe(t){if(function(t){return"function"==typeof t.getSpanJSON}(t))return t.getSpanJSON();try{const{spanId:e,traceId:n}=t.spanContext();if(function(t){const e=t;return!!(e.attributes&&e.startTime&&e.name&&e.endTime&&e.status)}(t)){const{attributes:r,startTime:o,name:s,endTime:i,parentSpanId:a,status:c}=t;return U({span_id:e,trace_id:n,data:r,description:s,parent_span_id:a,start_timestamp:pe(o),timestamp:pe(i)||void 0,status:me(c),op:r[re],origin:r[oe],_metrics_summary:ie(t)})}return{span_id:e,trace_id:n}}catch(t){return{}}}function he(t){const{traceFlags:e}=t.spanContext();return e===ue}function me(t){if(t&&t.code!==ae)return t.code===ce?"ok":t.message||"unknown_error"}const ge="_sentryRootSpan";function _e(t){return t[ge]||t}const ye="_frozenDsc";function ve(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},o=U({environment:n.environment||Ft,release:n.release,public_key:r,trace_id:t});return e.emit("createDsc",o),o}function be(t){const e=xt();if(!e)return{};const n=ve(fe(t).trace_id||"",e),r=_e(t),o=r[ye];if(o)return o;const s=r.spanContext().traceState,i=s&&s.get("sentry.dsc"),a=i&&Zt(i);if(a)return a;const c=fe(r),u=c.data||{},l=u[ne];null!=l&&(n.sample_rate=`${l}`);const p=u[ee],d=c.description;return"url"!==p&&d&&(n.transaction=d),n.sampled=String(he(r)),e.emit("createDsc",n,r),n}function Ee(t,e){const{fingerprint:n,span:r,breadcrumbs:o,sdkProcessingMetadata:s}=e;!function(t,e){const{extra:n,tags:r,user:o,contexts:s,level:i,transactionName:a}=e,c=U(n);c&&Object.keys(c).length&&(t.extra={...c,...t.extra});const u=U(r);u&&Object.keys(u).length&&(t.tags={...u,...t.tags});const l=U(o);l&&Object.keys(l).length&&(t.user={...l,...t.user});const p=U(s);p&&Object.keys(p).length&&(t.contexts={...p,...t.contexts});i&&(t.level=i);a&&"transaction"!==t.type&&(t.transaction=a)}(t,e),r&&function(t,e){t.contexts={trace:le(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:be(e),...t.sdkProcessingMetadata};const n=_e(e),r=fe(n).description;r&&!t.transaction&&"transaction"===t.type&&(t.transaction=r)}(t,r),function(t,e){t.fingerprint=t.fingerprint?W(t.fingerprint):[],e&&(t.fingerprint=t.fingerprint.concat(e));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,n),function(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}(t,o),function(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}(t,s)}function Se(t,e){const{extra:n,tags:r,user:o,contexts:s,level:i,sdkProcessingMetadata:a,breadcrumbs:c,fingerprint:u,eventProcessors:l,attachments:p,propagationContext:d,transactionName:f,span:h}=e;we(t,"extra",n),we(t,"tags",r),we(t,"user",o),we(t,"contexts",s),we(t,"sdkProcessingMetadata",a),i&&(t.level=i),f&&(t.transactionName=f),h&&(t.span=h),c.length&&(t.breadcrumbs=[...t.breadcrumbs,...c]),u.length&&(t.fingerprint=[...t.fingerprint,...u]),l.length&&(t.eventProcessors=[...t.eventProcessors,...l]),p.length&&(t.attachments=[...t.attachments,...p]),t.propagationContext={...t.propagationContext,...d}}function we(t,e,n){if(n&&Object.keys(n).length){t[e]={...t[e]};for(const r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[e][r]=n[r])}}function xe(t,e,n,r,o,a){const{normalizeDepth:c=3,normalizeMaxBreadth:u=1e3}=t,l={...e,event_id:e.event_id||n.event_id||B(),timestamp:e.timestamp||it()},p=n.integrations||t.integrations.map((t=>t.name));!function(t,e){const{environment:n,release:r,dist:o,maxValueLength:s=250}=e;"environment"in t||(t.environment="environment"in e?n:Ft);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==o&&(t.dist=o);t.message&&(t.message=T(t.message,s));const i=t.exception&&t.exception.values&&t.exception.values[0];i&&i.value&&(i.value=T(i.value,s));const a=t.request;a&&a.url&&(a.url=T(a.url,s))}(l,t),function(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}(l,p),o&&o.emit("applyFrameMetadata",e),void 0===e.type&&function(t,e){const n=s._sentryDebugIds;if(!n)return;let r;const o=ke.get(e);o?r=o:(r=new Map,ke.set(e,r));const i=Object.entries(n).reduce(((t,[n,o])=>{let s;const i=r.get(n);i?s=i:(s=e(n),r.set(n,s));for(let e=s.length-1;e>=0;e--){const n=s[e];if(n.filename){t[n.filename]=o;break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=i[t.filename])}))}))}catch(t){}}(l,t.stackParser);const d=function(t,e){if(!e)return t;const n=t?t.clone():new mt;return n.update(e),n}(r,n.captureContext);n.mechanism&&Y(l,n.mechanism);const f=o?o.getEventProcessors():[],h=i("globalScope",(()=>new mt)).getScopeData();if(a){Se(h,a.getScopeData())}if(d){Se(h,d.getScopeData())}const m=[...n.attachments||[],...h.attachments];m.length&&(n.attachments=m),Ee(l,h);return Xt([...f,...h.eventProcessors],l,n).then((t=>(t&&function(t){const e={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?e[t.abs_path]=t.debug_id:t.filename&&(e[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(e).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach((([t,e])=>{n.push({type:"sourcemap",code_file:t,debug_id:e})}))}(t),"number"==typeof c&&c>0?function(t,e,n){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Ht(t.data,e,n)}})))},...t.user&&{user:Ht(t.user,e,n)},...t.contexts&&{contexts:Ht(t.contexts,e,n)},...t.extra&&{extra:Ht(t.extra,e,n)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Ht(t.contexts.trace.data,e,n)));t.spans&&(r.spans=t.spans.map((t=>({...t,...t.data&&{data:Ht(t.data,e,n)}}))));return r}(t,c,u):t)))}const ke=new WeakMap;function Oe(t){if(t)return function(t){return t instanceof mt||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>Ce.includes(t)))}(t)?{captureContext:t}:t}const Ce=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function Te(t,e){return St().captureException(t,Oe(e))}function Ie(t,e){return St().captureEvent(t,e)}function $e(t){const e=xt(),n=wt(),r=St(),{release:o,environment:i=Ft}=e&&e.getOptions()||{},{userAgent:a}=s.navigator||{},c=ut({release:o,environment:i,user:r.getUser()||n.getUser(),...a&&{userAgent:a},...t}),u=n.getSession();return u&&"ok"===u.status&<(u,{status:"exited"}),De(),n.setSession(c),r.setSession(c),c}function De(){const t=wt(),e=St(),n=e.getSession()||t.getSession();n&&function(t,e){let n={};e?n={status:e}:"ok"===t.status&&(n={status:"exited"}),lt(t,n)}(n),Ne(),t.setSession(),e.setSession()}function Ne(){const t=wt(),e=St(),n=xt(),r=e.getSession()||t.getSession();r&&n&&n.captureSession(r)}function je(t=!1){t?De():Ne()}const Re=s;function Ae(){if(!("fetch"in Re))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function Pe(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}const Le={},Me={};function Ue(t,e){Le[t]=Le[t]||[],Le[t].push(e)}function qe(t,e){Me[t]||(e(),Me[t]=!0)}function Be(t,e){const n=t&&Le[t];if(n)for(const o of n)try{o(e)}catch(e){r&&l.error(`Error while triggering instrumentation handler.\nType: ${t}\nName: ${At(o)}\nError:`,e)}}const Fe=s;const He=s;let Ge;function Ye(t){const e="history";Ue(e,t),qe(e,ze)}function ze(){if(!function(){const t=Fe.chrome,e=t&&t.app&&t.app.runtime,n="history"in Fe&&!!Fe.history.pushState&&!!Fe.history.replaceState;return!e&&n}())return;const t=He.onpopstate;function e(t){return function(...e){const n=e.length>2?e[2]:void 0;if(n){const t=Ge,e=String(n);Ge=e;Be("history",{from:t,to:e})}return t.apply(this,e)}}He.onpopstate=function(...e){const n=He.location.href,r=Ge;Ge=n;if(Be("history",{from:r,to:n}),t)try{return t.apply(this,e)}catch(t){}},N(He.history,"pushState",e),N(He.history,"replaceState",e)}const We=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function Je(t,e=!1){const{host:n,path:r,pass:o,port:s,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&o?`:${o}`:""}@${n}${s?`:${s}`:""}/${r?`${r}/`:r}${i}`}function Ve(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Xe(t){const e="string"==typeof t?function(t){const e=We.exec(t);if(!e)return void u((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[n,r,o="",s="",i="",a=""]=e.slice(1);let c="",l=a;const p=l.split("/");if(p.length>1&&(c=p.slice(0,-1).join("/"),l=p.pop()),l){const t=l.match(/^\d+/);t&&(l=t[0])}return Ve({host:s,pass:o,path:c,projectId:l,port:i,protocol:n,publicKey:r})}(t):Ve(t);if(e&&function(t){if(!r)return!0;const{port:e,projectId:n,protocol:o}=t;return!(["protocol","publicKey","host","projectId"].find((e=>!t[e]&&(l.error(`Invalid Sentry Dsn: ${e} missing`),!0)))||(n.match(/^\d+$/)?function(t){return"http"===t||"https"===t}(o)?e&&isNaN(parseInt(e,10))&&(l.error(`Invalid Sentry Dsn: Invalid port ${e}`),1):(l.error(`Invalid Sentry Dsn: Invalid protocol ${o}`),1):(l.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),1)))}(e))return e}function Ke(t,e=[]){return[t,e]}function Qe(t,e){const[n,r]=t;return[n,[...r,e]]}function Ze(t,e){const n=t[1];for(const t of n){if(e(t,t[0].type))return!0}return!1}function tn(t){return s.__SENTRY__&&s.__SENTRY__.encodePolyfill?s.__SENTRY__.encodePolyfill(t):(new TextEncoder).encode(t)}function en(t){const[e,n]=t;let r=JSON.stringify(e);function o(t){"string"==typeof r?r="string"==typeof t?r+t:[tn(r),t]:r.push("string"==typeof t?tn(t):t)}for(const t of n){const[e,n]=t;if(o(`\n${JSON.stringify(e)}\n`),"string"==typeof n||n instanceof Uint8Array)o(n);else{let t;try{t=JSON.stringify(n)}catch(e){t=JSON.stringify(Ht(n))}o(t)}}return"string"==typeof r?r:function(t){const e=t.reduce(((t,e)=>t+e.length),0),n=new Uint8Array(e);let r=0;for(const e of t)n.set(e,r),r+=e.length;return n}(r)}function nn(t){const e="string"==typeof t.data?tn(t.data):t.data;return[U({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",statsd:"metric_bucket"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}class an extends Error{constructor(t,e="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=e}}const cn="7";function un(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function ln(t,e){return n={sentry_key:t.publicKey,sentry_version:cn,...e&&{sentry_client:`${e.name}/${e.version}`}},Object.keys(n).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`)).join("&");var n}function pn(t,e,n){return e||`${function(t){return`${un(t)}${t.projectId}/envelope/`}(t)}?${ln(t,n)}`}function dn(t,e,n,r){const o=sn(n),s=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,e){e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=[...t.sdk.integrations||[],...e.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...e.packages||[]])}(t,n&&n.sdk);const i=function(t,e,n,r){const o=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:Je(r)},...o&&{trace:U({...o})}}}(t,o,r,e);delete t.sdkProcessingMetadata;return Ke(i,[[{type:s},t]])}const fn="Not capturing exception because it's already been captured.";class hn{constructor(t){if(this._options=t,this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],t.dsn?this._dsn=Xe(t.dsn):J&&l.warn("No DSN provided, client will not send events."),this._dsn){const e=pn(this._dsn,t.tunnel,t._metadata?t._metadata.sdk:void 0);this._transport=t.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:e})}}captureException(t,e,n){const r=B();if(z(t))return J&&l.log(fn),r;const o={event_id:r,...e};return this._process(this.eventFromException(t,o).then((t=>this._captureEvent(t,o,n)))),o.event_id}captureMessage(t,e,n,r){const o={event_id:B(),...n},s=_(t)?t:String(t),i=y(t)?this.eventFromMessage(s,e,o):this.eventFromException(t,o);return this._process(i.then((t=>this._captureEvent(t,o,r)))),o.event_id}captureEvent(t,e,n){const r=B();if(e&&e.originalException&&z(e.originalException))return J&&l.log(fn),r;const o={event_id:r,...e},s=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this._process(this._captureEvent(t,o,s||n)),o.event_id}captureSession(t){"string"!=typeof t.release?J&&l.warn("Discarded session because of missing or non-string release"):(this.sendSession(t),lt(t,{init:!1}))}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(t){const e=this._transport;return e?(this.emit("flush"),this._isClientDoneProcessing(t).then((n=>e.flush(t).then((t=>n&&t))))):Wt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.emit("close"),t)))}getEventProcessors(){return this._eventProcessors}addEventProcessor(t){this._eventProcessors.push(t)}init(){this._isEnabled()&&this._setupIntegrations()}getIntegrationByName(t){return this._integrations[t]}addIntegration(t){const e=this._integrations[t.name];Q(this,t,this._integrations),e||K(this,[t])}sendEvent(t,e={}){this.emit("beforeSendEvent",t,e);let n=dn(t,this._dsn,this._options._metadata,this._options.tunnel);for(const t of e.attachments||[])n=Qe(n,nn(t));const r=this.sendEnvelope(n);r&&r.then((e=>this.emit("afterSendEvent",t,e)),null)}sendSession(t){const e=function(t,e,n,r){const o=sn(n);return Ke({sent_at:(new Date).toISOString(),...o&&{sdk:o},...!!r&&e&&{dsn:Je(e)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(e)}recordDroppedEvent(t,e,n){if(this._options.sendClientReports){const n=`${t}:${e}`;J&&l.log(`Adding outcome: "${n}"`),this._outcomes[n]=(this._outcomes[n]||0)+1}}on(t,e){const n=this._hooks[t]=this._hooks[t]||[];return n.push(e),()=>{const t=n.indexOf(e);t>-1&&n.splice(t,1)}}emit(t,...e){const n=this._hooks[t];n&&n.forEach((t=>t(...e)))}sendEnvelope(t){return this.emit("beforeEnvelope",t),this._isEnabled()&&this._transport?this._transport.send(t).then(null,(t=>(J&&l.error("Error while sending event:",t),t))):(J&&l.error("Transport disabled"),Wt({}))}_setupIntegrations(){const{integrations:t}=this._options;this._integrations=function(t,e){const n={};return e.forEach((e=>{e&&Q(t,e,n)})),n}(this,t),K(this,t)}_updateSessionFromEvent(t,e){let n=!1,r=!1;const o=e.exception&&e.exception.values;if(o){r=!0;for(const t of o){const e=t.mechanism;if(e&&!1===e.handled){n=!0;break}}}const s="ok"===t.status;(s&&0===t.errors||s&&n)&&(lt(t,{...n&&{status:"crashed"},errors:t.errors||Number(r||n)}),this.captureSession(t))}_isClientDoneProcessing(t){return new Vt((e=>{let n=0;const r=setInterval((()=>{0==this._numProcessing?(clearInterval(r),e(!0)):(n+=1,t&&n>=t&&(clearInterval(r),e(!1)))}),1)}))}_isEnabled(){return!1!==this.getOptions().enabled&&void 0!==this._transport}_prepareEvent(t,e,n,r=wt()){const o=this.getOptions(),s=Object.keys(this._integrations);return!e.integrations&&s.length>0&&(e.integrations=s),this.emit("preprocessEvent",t,e),t.type||r.setLastEventId(t.event_id||e.event_id),xe(o,t,e,n,this,r).then((t=>{if(null===t)return t;const e={...r.getPropagationContext(),...n?n.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&e){const{traceId:n,spanId:r,parentSpanId:o,dsc:s}=e;t.contexts={trace:U({trace_id:n,span_id:r,parent_span_id:o}),...t.contexts};const i=s||ve(n,this);t.sdkProcessingMetadata={dynamicSamplingContext:i,...t.sdkProcessingMetadata}}return t}))}_captureEvent(t,e={},n){return this._processEvent(t,e,n).then((t=>t.event_id),(t=>{if(J){const e=t;"log"===e.logLevel?l.log(e.message):l.warn(e)}}))}_processEvent(t,e,n){const r=this.getOptions(),{sampleRate:o}=r,s=gn(t),i=mn(t),a=t.type||"error",c=`before send for type \`${a}\``,u=void 0===o?void 0:function(t){if("boolean"==typeof t)return Number(t);const e="string"==typeof t?parseFloat(t):t;if(!("number"!=typeof e||isNaN(e)||e<0||e>1))return e;J&&l.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(t)} of type ${JSON.stringify(typeof t)}.`)}(o);if(i&&"number"==typeof u&&Math.random()>u)return this.recordDroppedEvent("sample_rate","error",t),Jt(new an(`Discarding event because it's not included in the random sample (sampling rate = ${o})`,"log"));const p="replay_event"===a?"replay":a,d=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this._prepareEvent(t,e,n,d).then((n=>{if(null===n)throw this.recordDroppedEvent("event_processor",p,t),new an("An event processor returned `null`, will not send event.","log");if(e.data&&!0===e.data.__sentry__)return n;const o=function(t,e,n,r){const{beforeSend:o,beforeSendTransaction:s,beforeSendSpan:i}=e;if(mn(n)&&o)return o(n,r);if(gn(n)){if(n.spans&&i){const e=[];for(const r of n.spans){const n=i(r);n?e.push(n):t.recordDroppedEvent("before_send","span")}n.spans=e}if(s)return s(n,r)}return n}(this,r,n,e);return function(t,e){const n=`${e} must return \`null\` or a valid event.`;if(E(t))return t.then((t=>{if(!v(t)&&null!==t)throw new an(n);return t}),(t=>{throw new an(`${e} rejected with ${t}`)}));if(!v(t)&&null!==t)throw new an(n);return t}(o,c)})).then((r=>{if(null===r){if(this.recordDroppedEvent("before_send",p,t),gn(t)){const e=1+(t.spans||[]).length;this._outcomes.span=(this._outcomes.span||0)+e}throw new an(`${c} returned \`null\`, will not send event.`,"log")}const o=n&&n.getSession();!s&&o&&this._updateSessionFromEvent(o,r);const i=r.transaction_info;if(s&&i&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...i,source:t}}return this.sendEvent(r,e),r})).then(null,(t=>{if(t instanceof an)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new an(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}_process(t){this._numProcessing++,t.then((t=>(this._numProcessing--,t)),(t=>(this._numProcessing--,t)))}_clearOutcomes(){const t=this._outcomes;return this._outcomes={},Object.entries(t).map((([t,e])=>{const[n,r]=t.split(":");return{reason:n,category:r,quantity:e}}))}_flushOutcomes(){J&&l.log("Flushing outcomes...");const t=this._clearOutcomes();if(0===t.length)return void(J&&l.log("No outcomes to send"));if(!this._dsn)return void(J&&l.log("No dsn provided, will not send outcomes"));J&&l.log("Sending outcomes:",t);const e=(n=t,Ke((r=this._options.tunnel&&Je(this._dsn))?{dsn:r}:{},[[{type:"client_report"},{timestamp:o||it(),discarded_events:n}]]));var n,r,o;this.sendEnvelope(e)}}function mn(t){return void 0===t.type}function gn(t){return"transaction"===t.type}const _n="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__;function yn(t,e){const n=En(t,e),r={type:e&&e.name,value:wn(e)};return n.length&&(r.stacktrace={frames:n}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function vn(t,e,n,r){const o=xt(),s=o&&o.getOptions().normalizeDepth,i=function(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];if(n instanceof Error)return n}return}(e),a={__serialized__:Gt(e,s)};if(i)return{exception:{values:[yn(t,i)]},extra:a};const c={exception:{values:[{type:b(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:On(e,{isUnhandledRejection:r})}]},extra:a};if(n){const e=En(t,n);e.length&&(c.exception.values[0].stacktrace={frames:e})}return c}function bn(t,e){return{exception:{values:[yn(t,e)]}}}function En(t,e){const n=e.stacktrace||e.stack||"",r=function(t){if(t&&Sn.test(t.message))return 1;return 0}(e),o=function(t){if("number"==typeof t.framesToPop)return t.framesToPop;return 0}(e);try{return t(n,r,o)}catch(t){}return[]}const Sn=/Minified React error #\d+;/i;function wn(t){const e=t&&t.message;return e?e.error&&"string"==typeof e.error.message?e.error.message:e:"No error message"}function xn(t,e,n,r,o){let s;if(h(e)&&e.error){return bn(t,e.error)}if(m(e)||f(e,"DOMException")){const o=e;if("stack"in e)s=bn(t,e);else{const e=o.name||(m(o)?"DOMError":"DOMException"),i=o.message?`${e}: ${o.message}`:e;s=kn(t,i,n,r),G(s,i)}return"code"in o&&(s.tags={...s.tags,"DOMException.code":`${o.code}`}),s}if(d(e))return bn(t,e);if(v(e)||b(e)){return s=vn(t,e,n,o),Y(s,{synthetic:!0}),s}return s=kn(t,e,n,r),G(s,`${e}`,void 0),Y(s,{synthetic:!0}),s}function kn(t,e,n,r){const o={};if(r&&n){const r=En(t,n);r.length&&(o.exception={values:[{value:e,stacktrace:{frames:r}}]})}if(_(e)){const{__sentry_template_string__:t,__sentry_template_values__:n}=e;return o.logentry={message:t,params:n},o}return o.message=e,o}function On(t,{isUnhandledRejection:e}){const n=function(t,e=40){const n=Object.keys(P(t));n.sort();const r=n[0];if(!r)return"[object has no keys]";if(r.length>=e)return T(r,e);for(let t=n.length;t>0;t--){const r=n.slice(0,t).join(", ");if(!(r.length>e))return t===n.length?r:T(r,e)}return""}(t),r=e?"promise rejection":"exception";if(h(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(b(t)){return`Event \`${function(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${n}`}const Cn=s;let Tn=0;function In(){return Tn>0}function $n(t,e={},n){if("function"!=typeof t)return t;try{const e=t.__sentry_wrapped__;if(e)return e;if(A(t))return t}catch(e){return t}const r=function(){const r=Array.prototype.slice.call(arguments);try{n&&"function"==typeof n&&n.apply(this,arguments);const o=r.map((t=>$n(t,e)));return t.apply(this,o)}catch(t){throw Tn++,setTimeout((()=>{Tn--})),function(...t){const e=Et(nt());if(2===t.length){const[n,r]=t;return n?e.withSetScope(n,r):e.withScope(r)}e.withScope(t[0])}((n=>{n.addEventProcessor((t=>(e.mechanism&&(G(t,void 0,void 0),Y(t,e.mechanism)),t.extra={...t.extra,arguments:r},t))),Te(t)})),t}};try{for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e])}catch(t){}R(r,t),j(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch(t){}return r}class Dn extends hn{constructor(t){const e={parentSpanIsAlwaysRootSpan:!0,...t};!function(t,e,n=[e],r="npm"){const s=t._metadata||{};s.sdk||(s.sdk={name:`sentry.javascript.${e}`,packages:n.map((t=>({name:`${r}:@sentry/${t}`,version:o}))),version:o}),t._metadata=s}(e,"browser",["browser"],Cn.SENTRY_SDK_SOURCE||"npm"),super(e),e.sendClientReports&&Cn.document&&Cn.document.addEventListener("visibilitychange",(()=>{"hidden"===Cn.document.visibilityState&&this._flushOutcomes()}))}eventFromException(t,e){return function(t,e,n,r){const o=xn(t,e,n&&n.syntheticException||void 0,r);return Y(o),o.level="error",n&&n.event_id&&(o.event_id=n.event_id),Wt(o)}(this._options.stackParser,t,e,this._options.attachStacktrace)}eventFromMessage(t,e="info",n){return function(t,e,n="info",r,o){const s=kn(t,e,r&&r.syntheticException||void 0,o);return s.level=n,r&&r.event_id&&(s.event_id=r.event_id),Wt(s)}(this._options.stackParser,t,e,n,this._options.attachStacktrace)}captureUserFeedback(t){if(!this._isEnabled())return void(_n&&l.warn("SDK not enabled, will not capture user feedback."));const e=function(t,{metadata:e,tunnel:n,dsn:r}){const o={event_id:t.event_id,sent_at:(new Date).toISOString(),...e&&e.sdk&&{sdk:{name:e.sdk.name,version:e.sdk.version}},...!!n&&!!r&&{dsn:Je(r)}},s=function(t){return[{type:"user_report"},t]}(t);return Ke(o,[s])}(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.sendEnvelope(e)}_prepareEvent(t,e,n){return t.platform=t.platform||"javascript",super._prepareEvent(t,e,n)}}const Nn=1e3;let jn,Rn,An;function Pn(){if(!He.document)return;const t=Be.bind(null,"dom"),e=Ln(t,!0);He.document.addEventListener("click",e,!1),He.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach((e=>{const n=He[e]&&He[e].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(N(n,"addEventListener",(function(e){return function(n,r,o){if("click"===n||"keypress"==n)try{const r=this,s=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},i=s[n]=s[n]||{refCount:0};if(!i.handler){const r=Ln(t);i.handler=r,e.call(this,n,r,o)}i.refCount++}catch(t){}return e.call(this,n,r,o)}})),N(n,"removeEventListener",(function(t){return function(e,n,r){if("click"===e||"keypress"==e)try{const n=this,o=n.__sentry_instrumentation_handlers__||{},s=o[e];s&&(s.refCount--,s.refCount<=0&&(t.call(this,e,s.handler,r),s.handler=void 0,delete o[e]),0===Object.keys(o).length&&delete n.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,e,n,r)}})))}))}function Ln(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(n);if(function(t,e){return"keypress"===t&&(!e||!e.tagName||"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName&&!e.isContentEditable)}(n.type,r))return;j(n,"_sentryCaptured",!0),r&&!r._sentryId&&j(r,"_sentryId",B());const o="keypress"===n.type?"input":n.type;if(!function(t){if(t.type!==Rn)return!1;try{if(!t.target||t.target._sentryId!==An)return!1}catch(t){}return!0}(n)){t({event:n,name:o,global:e}),Rn=n.type,An=r?r._sentryId:void 0}clearTimeout(jn),jn=He.setTimeout((()=>{An=void 0,Rn=void 0}),Nn)}}const Mn="__sentry_xhr_v3__";function Un(){if(!He.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;N(t,"open",(function(t){return function(...e){const n=1e3*at(),r=g(e[0])?e[0].toUpperCase():void 0,o=function(t){if(g(t))return t;try{return t.toString()}catch(t){}return}(e[1]);if(!r||!o)return t.apply(this,e);this[Mn]={method:r,url:o,request_headers:{}},"POST"===r&&o.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const s=()=>{const t=this[Mn];if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}Be("xhr",{endTimestamp:1e3*at(),startTimestamp:n,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?N(this,"onreadystatechange",(function(t){return function(...e){return s(),t.apply(this,e)}})):this.addEventListener("readystatechange",s),N(this,"setRequestHeader",(function(t){return function(...e){const[n,r]=e,o=this[Mn];return o&&g(n)&&g(r)&&(o.request_headers[n.toLowerCase()]=r),t.apply(this,e)}})),t.apply(this,e)}})),N(t,"send",(function(t){return function(...e){const n=this[Mn];if(!n)return t.apply(this,e);void 0!==e[0]&&(n.body=e[0]);return Be("xhr",{startTimestamp:1e3*at(),xhr:this}),t.apply(this,e)}}))}const qn=100;function Bn(t,e){const n=xt(),r=wt();if(!n)return;const{beforeBreadcrumb:o=null,maxBreadcrumbs:s=qn}=n.getOptions();if(s<=0)return;const i={timestamp:it(),...t},a=o?u((()=>o(i,e))):i;null!==a&&(n.emit&&n.emit("beforeAddBreadcrumb",a,e),r.addBreadcrumb(a,s))}function Fn(){"console"in s&&a.forEach((function(t){t in s.console&&N(s.console,t,(function(e){return c[t]=e,function(...e){Be("console",{args:e,level:t});const n=c[t];n&&n.apply(s.console,e)}}))}))}function Hn(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!Ae())return!1;if(Pe(Re.fetch))return!0;let t=!1;const e=Re.document;if(e&&"function"==typeof e.createElement)try{const n=e.createElement("iframe");n.hidden=!0,e.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(t=Pe(n.contentWindow.fetch)),e.head.removeChild(n)}catch(t){r&&l.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",t)}return t})()&&N(s,"fetch",(function(t){return function(...e){const{method:n,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[e,n]=t;return{url:Yn(e),method:Gn(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Yn(e),method:Gn(e,"method")?String(e.method).toUpperCase():"GET"}}(e),o={args:e,fetchData:{method:n,url:r},startTimestamp:1e3*at()};Be("fetch",{...o});const i=(new Error).stack;return t.apply(s,e).then((t=>(Be("fetch",{...o,endTimestamp:1e3*at(),response:t}),t)),(t=>{throw Be("fetch",{...o,endTimestamp:1e3*at(),error:t}),d(t)&&void 0===t.stack&&(t.stack=i,j(t,"framesToPop",1)),t}))}}))}function Gn(t,e){return!!t&&"object"==typeof t&&!!t[e]}function Yn(t){return"string"==typeof t?t:t?Gn(t,"url")?t.url:t.toString?t.toString():"":""}const zn=["fatal","error","warning","log","info","debug"];function Wn(t){return"warn"===t?"warning":zn.includes(t)?t:"log"}function Jn(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}const Vn=1024,Xn=(t={})=>{const e={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:"Breadcrumbs",setup(t){var n;e.console&&function(t){const e="console";Ue(e,t),qe(e,Fn)}(function(t){return function(e){if(xt()!==t)return;const n={category:"console",data:{arguments:e.args,logger:"console"},level:Wn(e.level),message:I(e.args," ")};if("assert"===e.level){if(!1!==e.args[0])return;n.message=`Assertion failed: ${I(e.args.slice(1)," ")||"console.assert"}`,n.data.arguments=e.args.slice(1)}Bn(n,{input:e.args,level:e.level})}}(t)),e.dom&&(n=function(t,e){return function(n){if(xt()!==t)return;let r,o,s="object"==typeof e?e.serializeAttribute:void 0,i="object"==typeof e&&"number"==typeof e.maxStringLength?e.maxStringLength:void 0;i&&i>Vn&&(_n&&l.warn(`\`dom.maxStringLength\` cannot exceed 1024, but a value of ${i} was configured. Sentry will use 1024 instead.`),i=Vn),"string"==typeof s&&(s=[s]);try{const t=n.event,e=function(t){return!!t&&!!t.target}(t)?t.target:t;r=O(e,{keyAttrs:s,maxStringLength:i}),o=function(t){if(!x.HTMLElement)return null;let e=t;for(let t=0;t<5;t++){if(!e)return null;if(e instanceof HTMLElement){if(e.dataset.sentryComponent)return e.dataset.sentryComponent;if(e.dataset.sentryElement)return e.dataset.sentryElement}e=e.parentNode}return null}(e)}catch(t){r="<unknown>"}if(0===r.length)return;const a={category:`ui.${n.name}`,message:r};o&&(a.data={"ui.component_name":o}),Bn(a,{event:n.event,name:n.name,global:n.global})}}(t,e.dom),Ue("dom",n),qe("dom",Pn)),e.xhr&&function(t){Ue("xhr",t),qe("xhr",Un)}(function(t){return function(e){if(xt()!==t)return;const{startTimestamp:n,endTimestamp:r}=e,o=e.xhr[Mn];if(!n||!r||!o)return;const{method:s,url:i,status_code:a,body:c}=o;Bn({category:"xhr",data:{method:s,url:i,status_code:a},type:"http"},{xhr:e.xhr,input:c,startTimestamp:n,endTimestamp:r})}}(t)),e.fetch&&function(t){const e="fetch";Ue(e,t),qe(e,Hn)}(function(t){return function(e){if(xt()!==t)return;const{startTimestamp:n,endTimestamp:r}=e;if(r&&(!e.fetchData.url.match(/sentry_key/)||"POST"!==e.fetchData.method))if(e.error){Bn({category:"fetch",data:e.fetchData,level:"error",type:"http"},{data:e.error,input:e.args,startTimestamp:n,endTimestamp:r})}else{const t=e.response;Bn({category:"fetch",data:{...e.fetchData,status_code:t&&t.status},type:"http"},{input:e.args,response:t,startTimestamp:n,endTimestamp:r})}}}(t)),e.history&&Ye(function(t){return function(e){if(xt()!==t)return;let n=e.from,r=e.to;const o=Jn(Cn.location.href);let s=n?Jn(n):void 0;const i=Jn(r);s&&s.path||(s=o),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),o.protocol===s.protocol&&o.host===s.host&&(n=s.relative),Bn({category:"navigation",data:{from:n,to:r}})}}(t)),e.sentry&&t.on("beforeSendEvent",function(t){return function(e){xt()===t&&Bn({category:"sentry."+("transaction"===e.type?"transaction":"event"),event_id:e.event_id,level:e.level,message:H(e)},{event:e})}}(t))}}};const Kn=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qn=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:"BrowserApiErrors",setupOnce(){e.setTimeout&&N(Cn,"setTimeout",Zn),e.setInterval&&N(Cn,"setInterval",Zn),e.requestAnimationFrame&&N(Cn,"requestAnimationFrame",tr),e.XMLHttpRequest&&"XMLHttpRequest"in Cn&&N(XMLHttpRequest.prototype,"send",er);const t=e.eventTarget;if(t){(Array.isArray(t)?t:Kn).forEach(nr)}}}};function Zn(t){return function(...e){const n=e[0];return e[0]=$n(n,{mechanism:{data:{function:At(t)},handled:!1,type:"instrument"}}),t.apply(this,e)}}function tr(t){return function(e){return t.apply(this,[$n(e,{mechanism:{data:{function:"requestAnimationFrame",handler:At(t)},handled:!1,type:"instrument"}})])}}function er(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in n&&"function"==typeof n[t]&&N(n,t,(function(e){const n={mechanism:{data:{function:t,handler:At(e)},handled:!1,type:"instrument"}},r=A(e);return r&&(n.mechanism.data.handler=At(r)),$n(e,n)}))})),t.apply(this,e)}}function nr(t){const e=Cn,n=e[t]&&e[t].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(N(n,"addEventListener",(function(e){return function(n,r,o){try{"function"==typeof r.handleEvent&&(r.handleEvent=$n(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:At(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return e.apply(this,[n,$n(r,{mechanism:{data:{function:"addEventListener",handler:At(r),target:t},handled:!1,type:"instrument"}}),o])}})),N(n,"removeEventListener",(function(t){return function(e,n,r){const o=n;try{const n=o&&o.__sentry_wrapped__;n&&t.call(this,e,n,r)}catch(t){}return t.call(this,e,o,r)}})))}let rr=null;function or(){rr=s.onerror,s.onerror=function(t,e,n,r,o){return Be("error",{column:r,error:o,line:n,msg:t,url:e}),!(!rr||rr.__SENTRY_LOADER__)&&rr.apply(this,arguments)},s.onerror.__SENTRY_INSTRUMENTED__=!0}let sr=null;function ir(){sr=s.onunhandledrejection,s.onunhandledrejection=function(t){return Be("unhandledrejection",t),!(sr&&!sr.__SENTRY_LOADER__)||sr.apply(this,arguments)},s.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const ar=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:"GlobalHandlers",setupOnce(){Error.stackTraceLimit=50},setup(t){e.onerror&&(!function(t){!function(t){const e="error";Ue(e,t),qe(e,or)}((e=>{const{stackParser:n,attachStacktrace:r}=ur();if(xt()!==t||In())return;const{msg:o,url:s,line:i,column:a,error:c}=e,u=function(t,e,n,r){const o=t.exception=t.exception||{},s=o.values=o.values||[],i=s[0]=s[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[],u=isNaN(parseInt(r,10))?void 0:r,l=isNaN(parseInt(n,10))?void 0:n,p=g(e)&&e.length>0?e:function(){try{return x.document.location.href}catch(t){return""}}();0===c.length&&c.push({colno:u,filename:p,function:It,in_app:!0,lineno:l});return t}(xn(n,c||o,void 0,r,!1),s,i,a);u.level="error",Ie(u,{originalException:c,mechanism:{handled:!1,type:"onerror"}})}))}(t),cr("onerror")),e.onunhandledrejection&&(!function(t){!function(t){const e="unhandledrejection";Ue(e,t),qe(e,ir)}((e=>{const{stackParser:n,attachStacktrace:r}=ur();if(xt()!==t||In())return;const o=function(t){if(y(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch(t){}return t}(e),s=y(o)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(o)}`}]}}:xn(n,o,void 0,r,!0);s.level="error",Ie(s,{originalException:o,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t),cr("onunhandledrejection"))}}};function cr(t){_n&&l.log(`Global Handler attached: ${t}`)}function ur(){const t=xt();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const lr=()=>({name:"HttpContext",preprocessEvent(t){if(!Cn.navigator&&!Cn.location&&!Cn.document)return;const e=t.request&&t.request.url||Cn.location&&Cn.location.href,{referrer:n}=Cn.document||{},{userAgent:r}=Cn.navigator||{},o={...t.request&&t.request.headers,...n&&{Referer:n},...r&&{"User-Agent":r}},s={...t.request,...e&&{url:e},headers:o};t.request=s}});function pr(t,e,n=250,r,o,s,i){if(!(s.exception&&s.exception.values&&i&&S(i.originalException,Error)))return;const a=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;var c,u;a&&(s.exception.values=(c=dr(t,e,o,i.originalException,r,s.exception.values,a,0),u=n,c.map((t=>(t.value&&(t.value=T(t.value,u)),t)))))}function dr(t,e,n,r,o,s,i,a){if(s.length>=n+1)return s;let c=[...s];if(S(r[o],Error)){fr(i,a);const s=t(e,r[o]),u=c.length;hr(s,o,u,a),c=dr(t,e,n,r[o],o,[s,...c],s,u)}return Array.isArray(r.errors)&&r.errors.forEach(((r,s)=>{if(S(r,Error)){fr(i,a);const u=t(e,r),l=c.length;hr(u,`errors[${s}]`,l,a),c=dr(t,e,n,r,o,[u,...c],u,l)}})),c}function fr(t,e){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,..."AggregateError"===t.type&&{is_exception_group:!0},exception_id:e}}function hr(t,e,n,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}const mr=(t={})=>{const e=t.limit||5,n=t.key||"cause";return{name:"LinkedErrors",preprocessEvent(t,r,o){const s=o.getOptions();pr(yn,s.stackParser,s.maxValueLength,n,e,t,r)}}};function gr(t,e,n,r){const o={filename:t,function:"<anonymous>"===e?It:e,in_app:!0};return void 0!==n&&(o.lineno=n),void 0!==r&&(o.colno=r),o}const _r=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,yr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,vr=/\((\S*)(?::(\d+))(?::(\d+))\)/,br=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Er=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Sr=Nt(...[[30,t=>{const e=_r.exec(t);if(e){const[,t,n,r]=e;return gr(t,It,+n,+r)}const n=yr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=vr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=wr(n[1]||It,n[2]);return gr(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],[50,t=>{const e=br.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const t=Er.exec(e[3]);t&&(e[1]=e[1]||"eval",e[3]=t[1],e[4]=t[2],e[5]="")}let t=e[3],n=e[1]||It;return[n,t]=wr(n,t),gr(t,n,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}}]]),wr=(t,e)=>{const n=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return n||r?[-1!==t.indexOf("@")?t.split("@")[0]:It,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},xr="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,kr={};function Or(t){const e=kr[t];if(e)return e;let n=He[t];if(Pe(n))return kr[t]=n.bind(He);const r=He.document;if(r&&"function"==typeof r.createElement)try{const e=r.createElement("iframe");e.hidden=!0,r.head.appendChild(e);const o=e.contentWindow;o&&o[t]&&(n=o[t]),r.head.removeChild(e)}catch(e){xr&&l.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,e)}return n?kr[t]=n.bind(He):n}function Cr(t){kr[t]=void 0}function Tr(t){const e=[];function n(t){return e.splice(e.indexOf(t),1)[0]||Promise.resolve(void 0)}return{$:e,add:function(r){if(!(void 0===t||e.length<t))return Jt(new an("Not adding Promise because buffer limit was reached."));const o=r();return-1===e.indexOf(o)&&e.push(o),o.then((()=>n(o))).then(null,(()=>n(o).then(null,(()=>{})))),o},drain:function(t){return new Vt(((n,r)=>{let o=e.length;if(!o)return n(!0);const s=setTimeout((()=>{t&&t>0&&n(!1)}),t);e.forEach((t=>{Wt(t).then((()=>{--o||(clearTimeout(s),n(!0))}),r)}))}))}}}const Ir=6e4;function $r(t,{statusCode:e,headers:n},r=Date.now()){const o={...t},s=n&&n["x-sentry-rate-limits"],i=n&&n["retry-after"];if(s)for(const t of s.trim().split(",")){const[e,n,,,s]=t.split(":",5),i=parseInt(e,10),a=1e3*(isNaN(i)?60:i);if(n)for(const t of n.split(";"))"metric_bucket"===t&&s&&!s.split(";").includes("custom")||(o[t]=r+a);else o.all=r+a}else i?o.all=r+function(t,e=Date.now()){const n=parseInt(`${t}`,10);if(!isNaN(n))return 1e3*n;const r=Date.parse(`${t}`);return isNaN(r)?Ir:r-e}(i,r):429===e&&(o.all=r+6e4);return o}const Dr=64;function Nr(t,e,n=Tr(t.bufferSize||Dr)){let r={};return{send:function(o){const s=[];if(Ze(o,((e,n)=>{const o=on(n);if(function(t,e,n=Date.now()){return function(t,e){return t[e]||t.all||0}(t,e)>n}(r,o)){const r=jr(e,n);t.recordDroppedEvent("ratelimit_backoff",o,r)}else s.push(e)})),0===s.length)return Wt({});const i=Ke(o[0],s),a=e=>{Ze(i,((n,r)=>{const o=jr(n,r);t.recordDroppedEvent(e,on(r),o)}))};return n.add((()=>e({body:en(i)}).then((t=>(void 0!==t.statusCode&&(t.statusCode<200||t.statusCode>=300)&&J&&l.warn(`Sentry responded with status code ${t.statusCode} to sent event.`),r=$r(r,t),t)),(t=>{throw a("network_error"),t})))).then((t=>t),(t=>{if(t instanceof an)return J&&l.error("Skipped sending event because buffer is full."),a("queue_overflow"),Wt({});throw t}))},flush:t=>n.drain(t)}}function jr(t,e){if("event"===e||"transaction"===e)return Array.isArray(t)?t[1]:void 0}function Rr(t,e=Or("fetch")){let n=0,r=0;return Nr(t,(function(o){const s=o.body.length;n+=s,r++;const i={body:o.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};if(!e)return Cr("fetch"),Jt("No fetch implementation available");try{return e(t.url,i).then((t=>(n-=s,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return Cr("fetch"),n-=s,r--,Jt(t)}}))}function Ar(t,e){Te(t)}!function(t={}){const e=function(t={}){return{defaultIntegrations:[tt(),Ct(),Qn(),Xn(),ar(),mr(),Lt(),lr()],release:"string"==typeof __SENTRY_RELEASE__?__SENTRY_RELEASE__:Cn.SENTRY_RELEASE&&Cn.SENTRY_RELEASE.id?Cn.SENTRY_RELEASE.id:void 0,autoSessionTracking:!0,sendClientReports:!0,...t}}(t);if(function(){const t=Cn,e=t[t.chrome?"chrome":"browser"],n=e&&e.runtime&&e.runtime.id,r=Cn.location&&Cn.location.href||"",o=!!n&&Cn===Cn.top&&["chrome-extension:","moz-extension:","ms-browser-extension:"].some((t=>r.startsWith(`${t}//`))),s=void 0!==t.nw;return!!n&&!o&&!s}())return void u((()=>{console.error("[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}));_n&&(Ae()||l.warn("No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill."));const n={...e,stackParser:(r=e.stackParser||Sr,Array.isArray(r)?Nt(...r):r),integrations:X(e),transport:e.transport||Rr};var r;const o=Bt(Dn,n);e.autoSessionTracking&&function(){if(void 0===Cn.document)return void(_n&&l.warn("Session tracking in non-browser environment with @sentry/browser is not supported."));$e({ignoreDuration:!0}),je(),Ye((({from:t,to:e})=>{void 0!==t&&t!==e&&($e({ignoreDuration:!0}),je())}))}()}({dsn:"https://2ce89e78d56909fc19d7a6fa245ed243@o4506705197662208.ingest.us.sentry.io/4507379309477888",environment:document.head.querySelector('[property="env"]').content,allowUrls:[/.*freeagent.com|.*deploy-preview-\d*--freeagent-website\.netlify\.app|.*staging-website[12].fa-app-int.com/],attachStacktrace:!1})},23365:function(){window.setLocation=function(t){window.location=t},window.getSearchQuery=function(){return window.location.search},window.getSearchQueries=function(){for(var t=window.getSearchQuery().substr(1).split("&"),e={},n=t.length-1;n>=0;n--){var r=t[n].split("=");e[r[0]]=r[1]}return e},window.getSearchQueryValue=function(t,e){var n=window.getSearchQueries();return n[t]?n[t]:e},window.getHref=function(){return window.location.href}},90446:function(t,e,n){var r=n(2733),o=window.location.hostname,s="freeagent.com"===o.split(".").slice(-2).join(".")?".freeagent.com":o;function i(t,e){t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var n=new RegExp(t+"=([^&#]*)").exec(e);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))}function a(t){var e=(new Date).toISOString().slice(0,10);r.set("cleared-onetrust-cookies","/",{expires:5,path:"/",domain:s}),r.set("OptanonConsent",t,{sameSite:"lax",expires:5,path:"/",domain:s}),r.set("OptanonAlertBoxClosed",e+"T00:00:00.000Z",{expires:5,path:"/",domain:s})}!function(t){"true"===i("pagespeedapi",window.location.search)&&a("isIABGlobal=false&groups=C0001:1,C0002:1,C0003:1,C0004:1,C0009:1&hosts=&AwaitingReconsent=false&interactionCount=1&consentId=08f256d7-573c-462d-9d0a-f665ee7bd4d7&geolocation=GB");var e=i("ios",window.location.search);"true"===e?(a("isIABGlobal=false&groups=C0001:1,C0009:0,C0002:0,C0003:0,C0004:0&hosts=&AwaitingReconsent=false&interactionCount=1&consentId=08f256d7-573c-462d-9d0a-f665ee7bd4d7&geolocation=GB"),r.set("ios-app",!0,{path:"/",domain:t})):"false"===e&&r.remove("ios-app",{path:"/",domain:t})}(s)},80228:function(t,e,n){!function(t){"use strict";t.loadCSS||(t.loadCSS=function(){});var n=loadCSS.relpreload={};if(n.support=function(){var e;try{e=t.document.createElement("link").relList.supports("preload")}catch(t){e=!1}return function(){return e}}(),n.bindMediaToggle=function(t){var e=t.media||"all";function n(){t.addEventListener?t.removeEventListener("load",n):t.attachEvent&&t.detachEvent("onload",n),t.setAttribute("onload",null),t.media=e}t.addEventListener?t.addEventListener("load",n):t.attachEvent&&t.attachEvent("onload",n),setTimeout((function(){t.rel="stylesheet",t.media="only x"})),setTimeout(n,3e3)},n.poly=function(){if(!n.support())for(var e=t.document.getElementsByTagName("link"),r=0;r<e.length;r++){var o=e[r];"preload"!==o.rel||"style"!==o.getAttribute("as")||o.getAttribute("data-loadcss")||(o.setAttribute("data-loadcss",!0),n.bindMediaToggle(o))}},!n.support()){n.poly();var r=t.setInterval(n.poly,500);t.addEventListener?t.addEventListener("load",(function(){n.poly(),t.clearInterval(r)})):t.attachEvent&&t.attachEvent("onload",(function(){n.poly(),t.clearInterval(r)}))}e.loadCSS=loadCSS}(void 0!==n.g?n.g:this)},2733:function(t){t.exports=function(){"use strict";function t(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function e(n,r){function o(e,o,s){if("undefined"!=typeof document){"number"==typeof(s=t({},r,s)).expires&&(s.expires=new Date(Date.now()+864e5*s.expires)),s.expires&&(s.expires=s.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var a in s)s[a]&&(i+="; "+a,!0!==s[a]&&(i+="="+s[a].split(";")[0]));return document.cookie=e+"="+n.write(o,e)+i}}function s(t){if("undefined"!=typeof document&&(!arguments.length||t)){for(var e=document.cookie?document.cookie.split("; "):[],r={},o=0;o<e.length;o++){var s=e[o].split("="),i=s.slice(1).join("=");try{var a=decodeURIComponent(s[0]);if(r[a]=n.read(i,a),t===a)break}catch(t){}}return t?r[t]:r}}return Object.create({set:o,get:s,remove:function(e,n){o(e,"",t({},n,{expires:-1}))},withAttributes:function(n){return e(this.converter,t({},this.attributes,n))},withConverter:function(n){return e(t({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(r)},converter:{value:Object.freeze(n)}})}return e({read:function(t){return'"'===t[0]&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(t){return encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var s=e[r]={exports:{}};return t[r].call(s.exports,s,s.exports,n),s.exports}n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},function(){"use strict";n(354),n(23365);var t=n(73405),e=n(354),r=r||{};function o(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}r.updateCtaToLogin=function(e){(0,t.X)(".button.cta, .Button.Button--primary").forEach((function(t){t.innerHTML=e,t.href="https://login.freeagent.com/login",t.setAttribute("data-event-category","Login"),t.setAttribute("data-event-label",window.location.pathname),t.setAttribute("data-event-value",""),t.setAttribute("data-event-name","Log-in CTA"),t.setAttribute("data-cm-index",17)}),this)},r.switchMsgToFapd=function(){var e=(0,t.X)("[data-direct-msg]"),n=(0,t.X)("[data-fapd-msg]");e.forEach((function(t){t.style.display="none"})),n.forEach((function(t){t.style.display="inline"}))},document.addEventListener("DOMContentLoaded",(function(){var t={};try{t=window.getSearchQueries()}catch(t){e.reportError("Failed to retrieve query params. Error: "+t)}t.hasOwnProperty("fte")?r.updateCtaToLogin("Subscribe now"):t.hasOwnProperty("su")&&r.updateCtaToLogin("Log in to your account"),"fapd"===t.channel&&r.switchMsgToFapd()}));(function t(e,n){function r(t,r,s){if("undefined"!=typeof document){"number"==typeof(s=o({},n,s)).expires&&(s.expires=new Date(Date.now()+864e5*s.expires)),s.expires&&(s.expires=s.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var a in s)s[a]&&(i+="; "+a,!0!==s[a]&&(i+="="+s[a].split(";")[0]));return document.cookie=t+"="+e.write(r,t)+i}}return Object.create({set:r,get:function(t){if("undefined"!=typeof document&&(!arguments.length||t)){for(var n=document.cookie?document.cookie.split("; "):[],r={},o=0;o<n.length;o++){var s=n[o].split("="),i=s.slice(1).join("=");try{var a=decodeURIComponent(s[0]);if(r[a]=e.read(i,a),t===a)break}catch(t){}}return t?r[t]:r}},remove:function(t,e){r(t,"",o({},e,{expires:-1}))},withAttributes:function(e){return t(this.converter,o({},this.attributes,e))},withConverter:function(e){return t(o({},this.converter,e),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(e)}})})({read:function(t){return'"'===t[0]&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(t){return encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"}),n(90446),n(80228);var s=n(2733).get("OptanonConsent");if(!s||-1===s.indexOf("&geolocation=")){var i=document.createElement("link");i.rel="preconnect",i.href="https://geolocation.onetrust.com",document.getElementsByTagName("head")[0].appendChild(i)}}()}();</script> <script> // Custom includes function function includes(container, value) { var returnValue = false; var pos = container.indexOf(value); if (pos >= 0) { returnValue = true; } return returnValue; } var domain = ".freeagent.com"; var onetrustFolder = "onetrust"; var onetrustDataDomainScript = "9c76fc12-10d5-4df1-99e9-a1b22b65ab92"; var freeagentVersion = "1.6"; var host = window.location.hostname; var script = document.createElement("script"); script.type = "text/javascript"; script.charset = "UTF-8"; script.async = true; script.src = "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js"; // Below is the backup option of using the assets embedded in the website // script.src = window.location.origin + "/components/" + onetrustFolder + "/scripttemplates/otSDKStub.js?v=" + freeagentVersion; // If we update the OneTrust script and the data-domain-script value changes, it must also be changed within // support.freeagent.com and SFMC landing pages which are both calling the one trust script from here // Also if the path to the main onetrust script changes be sure to update // lib/netlify/netlify_headers_builder.rb and spec/lib/netlify/netlify_headers_builder_spec.rb if(includes(host, domain)){ script.setAttribute("data-domain-script", onetrustDataDomainScript); } else { script.setAttribute("data-domain-script", onetrustDataDomainScript + "-test"); } script.setAttribute("data-document-language", "true"); (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(script); </script> <script> function OptanonWrapper() { } </script> <script>dataLayer = [{}];</script> <script>!function(){var t={354:function(t,e,n){"use strict";n.r(e),n.d(e,{reportError:function(){return Rr}});const r="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,o="8.20.0",s=globalThis;function i(t,e,n){const r=n||s,i=r.__SENTRY__=r.__SENTRY__||{},a=i[o]=i[o]||{};return a[t]||(a[t]=e())}const a=["debug","info","warn","error","log","assert","trace"],c={};function u(t){if(!("console"in s))return t();const e=s.console,n={},r=Object.keys(c);r.forEach((t=>{const r=c[t];n[t]=e[t],e[t]=r}));try{return t()}finally{r.forEach((t=>{e[t]=n[t]}))}}const p=function(){let t=!1;const e={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return r?a.forEach((n=>{e[n]=(...e)=>{t&&u((()=>{s.console[n](`Sentry Logger [${n}]:`,...e)}))}})):a.forEach((t=>{e[t]=()=>{}})),e}(),l=Object.prototype.toString;function d(t){switch(l.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return S(t,Error)}}function f(t,e){return l.call(t)===`[object ${e}]`}function h(t){return f(t,"ErrorEvent")}function m(t){return f(t,"DOMError")}function _(t){return f(t,"String")}function g(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function y(t){return null===t||g(t)||"object"!=typeof t&&"function"!=typeof t}function v(t){return f(t,"Object")}function b(t){return"undefined"!=typeof Event&&S(t,Event)}function E(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function S(t,e){try{return t instanceof e}catch(t){return!1}}function x(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t._isVue)}const w=s,k=80;function O(t,e={}){if(!t)return"<unknown>";try{let n=t;const r=5,o=[];let s=0,i=0;const a=" > ",c=a.length;let u;const p=Array.isArray(e)?e:e.keyAttrs,l=!Array.isArray(e)&&e.maxStringLength||k;for(;n&&s++<r&&(u=T(n,p),!("html"===u||s>1&&i+o.length*c+u.length>=l));)o.push(u),i+=u.length,n=n.parentNode;return o.reverse().join(a)}catch(t){return"<unknown>"}}function T(t,e){const n=t,r=[];if(!n||!n.tagName)return"";if(w.HTMLElement&&n instanceof HTMLElement&&n.dataset){if(n.dataset.sentryComponent)return n.dataset.sentryComponent;if(n.dataset.sentryElement)return n.dataset.sentryElement}r.push(n.tagName.toLowerCase());const o=e&&e.length?e.filter((t=>n.getAttribute(t))).map((t=>[t,n.getAttribute(t)])):null;if(o&&o.length)o.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else{n.id&&r.push(`#${n.id}`);const t=n.className;if(t&&_(t)){const e=t.split(/\s+/);for(const t of e)r.push(`.${t}`)}}const s=["aria-label","type","name","title","alt"];for(const t of s){const e=n.getAttribute(t);e&&r.push(`[${t}="${e}"]`)}return r.join("")}function $(t,e=0){return"string"!=typeof t||0===e||t.length<=e?t:`${t.slice(0,e)}...`}function D(t,e){if(!Array.isArray(t))return"";const n=[];for(let e=0;e<t.length;e++){const r=t[e];try{x(r)?n.push("[VueViewModel]"):n.push(String(r))}catch(t){n.push("[value cannot be serialized]")}}return n.join(e)}function N(t,e,n=!1){return!!_(t)&&(f(e,"RegExp")?e.test(t):!!_(e)&&(n?t===e:t.includes(e)))}function I(t,e=[],n=!1){return e.some((e=>N(t,e,n)))}function j(t,e,n){if(!(e in t))return;const r=t[e],o=n(r);"function"==typeof o&&P(o,r),t[e]=o}function C(t,e,n){try{Object.defineProperty(t,e,{value:n,writable:!0,configurable:!0})}catch(n){r&&p.log(`Failed to add non-enumerable property "${e}" to object`,t)}}function P(t,e){try{const n=e.prototype||{};t.prototype=e.prototype=n,C(t,"__sentry_original__",e)}catch(t){}}function R(t){return t.__sentry_original__}function A(t){if(d(t))return{message:t.message,name:t.name,stack:t.stack,...M(t)};if(b(t)){const e={type:t.type,target:L(t.target),currentTarget:L(t.currentTarget),...M(t)};return"undefined"!=typeof CustomEvent&&S(t,CustomEvent)&&(e.detail=t.detail),e}return t}function L(t){try{return e=t,"undefined"!=typeof Element&&S(e,Element)?O(t):Object.prototype.toString.call(t)}catch(t){return"<unknown>"}var e}function M(t){if("object"==typeof t&&null!==t){const e={};for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}return{}}function U(t){return q(t,new Map)}function q(t,e){if(function(t){if(!v(t))return!1;try{const e=Object.getPrototypeOf(t).constructor.name;return!e||"Object"===e}catch(t){return!0}}(t)){const n=e.get(t);if(void 0!==n)return n;const r={};e.set(t,r);for(const n of Object.keys(t))void 0!==t[n]&&(r[n]=q(t[n],e));return r}if(Array.isArray(t)){const n=e.get(t);if(void 0!==n)return n;const r=[];return e.set(t,r),t.forEach((t=>{r.push(q(t,e))})),r}return t}function B(){const t=s,e=t.crypto||t.msCrypto;let n=()=>16*Math.random();try{if(e&&e.randomUUID)return e.randomUUID().replace(/-/g,"");e&&e.getRandomValues&&(n=()=>{const t=new Uint8Array(1);return e.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&n())>>t/4).toString(16)))}function F(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function Y(t){const{message:e,event_id:n}=t;if(e)return e;const r=F(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"<unknown>":n||"<unknown>"}function H(t,e,n){const r=t.exception=t.exception||{},o=r.values=r.values||[],s=o[0]=o[0]||{};s.value||(s.value=e||""),s.type||(s.type=n||"Error")}function G(t,e){const n=F(t);if(!n)return;const r=n.mechanism;if(n.mechanism={type:"generic",handled:!0,...r,...e},e&&"data"in e){const t={...r&&r.data,...e.data};n.mechanism.data=t}}function z(t){if(t&&t.__sentry_captured__)return!0;try{C(t,"__sentry_captured__",!0)}catch(t){}return!1}function W(t){return Array.isArray(t)?t:[t]}const J="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,V=[];function K(t){const e=t.defaultIntegrations||[],n=t.integrations;let r;e.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(n)?[...e,...n]:"function"==typeof n?W(n(e)):e;const o=function(t){const e={};return t.forEach((t=>{const{name:n}=t,r=e[n];r&&!r.isDefaultInstance&&t.isDefaultInstance||(e[n]=t)})),Object.values(e)}(r),s=o.findIndex((t=>"Debug"===t.name));if(s>-1){const[t]=o.splice(s,1);o.push(t)}return o}function X(t,e){for(const n of e)n&&n.afterAllSetup&&n.afterAllSetup(t)}function Q(t,e,n){if(n[e.name])J&&p.log(`Integration skipped because it was already installed: ${e.name}`);else{if(n[e.name]=e,-1===V.indexOf(e.name)&&"function"==typeof e.setupOnce&&(e.setupOnce(),V.push(e.name)),e.setup&&"function"==typeof e.setup&&e.setup(t),"function"==typeof e.preprocessEvent){const n=e.preprocessEvent.bind(e);t.on("preprocessEvent",((e,r)=>n(e,r,t)))}if("function"==typeof e.processEvent){const n=e.processEvent.bind(e),r=Object.assign(((e,r)=>n(e,r,t)),{id:e.name});t.addEventProcessor(r)}J&&p.log(`Integration installed: ${e.name}`)}}const Z=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,"undefined is not an object (evaluating 'a.L')",'can\'t redefine non-configurable property "solana"',"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)","Can't find variable: _AutofillCallbackHandler"],tt=(t={})=>({name:"InboundFilters",processEvent(e,n,r){const o=r.getOptions(),s=function(t={},e={}){return{allowUrls:[...t.allowUrls||[],...e.allowUrls||[]],denyUrls:[...t.denyUrls||[],...e.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...e.ignoreErrors||[],...t.disableErrorDefaults?[]:Z],ignoreTransactions:[...t.ignoreTransactions||[],...e.ignoreTransactions||[]],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,o);return function(t,e){if(e.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return J&&p.warn(`Event dropped due to being internal Sentry Error.\nEvent: ${Y(t)}`),!0;if(function(t,e){if(t.type||!e||!e.length)return!1;return function(t){const e=[];t.message&&e.push(t.message);let n;try{n=t.exception.values[t.exception.values.length-1]}catch(t){}n&&n.value&&(e.push(n.value),n.type&&e.push(`${n.type}: ${n.value}`));return e}(t).some((t=>I(t,e)))}(t,e.ignoreErrors))return J&&p.warn(`Event dropped due to being matched by \`ignoreErrors\` option.\nEvent: ${Y(t)}`),!0;if(function(t){if(t.type)return!1;if(!t.exception||!t.exception.values||0===t.exception.values.length)return!1;return!t.message&&!t.exception.values.some((t=>t.stacktrace||t.type&&"Error"!==t.type||t.value))}(t))return J&&p.warn(`Event dropped due to not having an error message, error type or stacktrace.\nEvent: ${Y(t)}`),!0;if(function(t,e){if("transaction"!==t.type||!e||!e.length)return!1;const n=t.transaction;return!!n&&I(n,e)}(t,e.ignoreTransactions))return J&&p.warn(`Event dropped due to being matched by \`ignoreTransactions\` option.\nEvent: ${Y(t)}`),!0;if(function(t,e){if(!e||!e.length)return!1;const n=et(t);return!!n&&I(n,e)}(t,e.denyUrls))return J&&p.warn(`Event dropped due to being matched by \`denyUrls\` option.\nEvent: ${Y(t)}.\nUrl: ${et(t)}`),!0;if(!function(t,e){if(!e||!e.length)return!0;const n=et(t);return!n||I(n,e)}(t,e.allowUrls))return J&&p.warn(`Event dropped due to not being matched by \`allowUrls\` option.\nEvent: ${Y(t)}.\nUrl: ${et(t)}`),!0;return!1}(e,s)?null:e}});function et(t){try{let e;try{e=t.exception.values[0].stacktrace.frames}catch(t){}return e?function(t=[]){for(let e=t.length-1;e>=0;e--){const n=t[e];if(n&&"<anonymous>"!==n.filename&&"[native code]"!==n.filename)return n.filename||null}return null}(e):null}catch(e){return J&&p.error(`Cannot extract url for event ${Y(t)}`),null}}function nt(){return rt(s),s}function rt(t){const e=t.__SENTRY__=t.__SENTRY__||{};return e.version=e.version||o,e[o]=e[o]||{}}function ot(){return{traceId:B(),spanId:B().substring(16)}}const st=1e3;function it(){return Date.now()/st}const at=function(){const{performance:t}=s;if(!t||!t.now)return it;const e=Date.now()-t.now(),n=null==t.timeOrigin?e:t.timeOrigin;return()=>(n+t.now())/st}();let ct;(()=>{const{performance:t}=s;if(!t||!t.now)return void(ct="none");const e=36e5,n=t.now(),r=Date.now(),o=t.timeOrigin?Math.abs(t.timeOrigin+n-r):e,i=o<e,a=t.timing&&t.timing.navigationStart,c="number"==typeof a?Math.abs(a+n-r):e;i||c<e?o<=c?(ct="timeOrigin",t.timeOrigin):ct="navigationStart":ct="dateNow"})();function ut(t){const e=at(),n={sid:B(),init:!0,timestamp:e,started:e,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return U({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(n)};return t&&pt(n,t),n}function pt(t,e={}){if(e.user&&(!t.ipAddress&&e.user.ip_address&&(t.ipAddress=e.user.ip_address),t.did||e.did||(t.did=e.user.id||e.user.email||e.user.username)),t.timestamp=e.timestamp||at(),e.abnormal_mechanism&&(t.abnormal_mechanism=e.abnormal_mechanism),e.ignoreDuration&&(t.ignoreDuration=e.ignoreDuration),e.sid&&(t.sid=32===e.sid.length?e.sid:B()),void 0!==e.init&&(t.init=e.init),!t.did&&e.did&&(t.did=`${e.did}`),"number"==typeof e.started&&(t.started=e.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof e.duration)t.duration=e.duration;else{const e=t.timestamp-t.started;t.duration=e>=0?e:0}e.release&&(t.release=e.release),e.environment&&(t.environment=e.environment),!t.ipAddress&&e.ipAddress&&(t.ipAddress=e.ipAddress),!t.userAgent&&e.userAgent&&(t.userAgent=e.userAgent),"number"==typeof e.errors&&(t.errors=e.errors),e.status&&(t.status=e.status)}const lt="_sentrySpan";function dt(t,e){e?C(t,lt,e):delete t[lt]}function ft(t){return t[lt]}class ht{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=ot()}clone(){const t=new ht;return t._breadcrumbs=[...this._breadcrumbs],t._tags={...this._tags},t._extra={...this._extra},t._contexts={...this._contexts},t._user=this._user,t._level=this._level,t._session=this._session,t._transactionName=this._transactionName,t._fingerprint=this._fingerprint,t._eventProcessors=[...this._eventProcessors],t._requestSession=this._requestSession,t._attachments=[...this._attachments],t._sdkProcessingMetadata={...this._sdkProcessingMetadata},t._propagationContext={...this._propagationContext},t._client=this._client,t._lastEventId=this._lastEventId,dt(t,ft(this)),t}setClient(t){this._client=t}setLastEventId(t){this._lastEventId=t}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(t){this._scopeListeners.push(t)}addEventProcessor(t){return this._eventProcessors.push(t),this}setUser(t){return this._user=t||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&pt(this._session,{user:t}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(t){return this._requestSession=t,this}setTags(t){return this._tags={...this._tags,...t},this._notifyScopeListeners(),this}setTag(t,e){return this._tags={...this._tags,[t]:e},this._notifyScopeListeners(),this}setExtras(t){return this._extra={...this._extra,...t},this._notifyScopeListeners(),this}setExtra(t,e){return this._extra={...this._extra,[t]:e},this._notifyScopeListeners(),this}setFingerprint(t){return this._fingerprint=t,this._notifyScopeListeners(),this}setLevel(t){return this._level=t,this._notifyScopeListeners(),this}setTransactionName(t){return this._transactionName=t,this._notifyScopeListeners(),this}setContext(t,e){return null===e?delete this._contexts[t]:this._contexts[t]=e,this._notifyScopeListeners(),this}setSession(t){return t?this._session=t:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(t){if(!t)return this;const e="function"==typeof t?t(this):t,[n,r]=e instanceof mt?[e.getScopeData(),e.getRequestSession()]:v(e)?[t,t.requestSession]:[],{tags:o,extra:s,user:i,contexts:a,level:c,fingerprint:u=[],propagationContext:p}=n||{};return this._tags={...this._tags,...o},this._extra={...this._extra,...s},this._contexts={...this._contexts,...a},i&&Object.keys(i).length&&(this._user=i),c&&(this._level=c),u.length&&(this._fingerprint=u),p&&(this._propagationContext=p),r&&(this._requestSession=r),this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._session=void 0,dt(this,void 0),this._attachments=[],this._propagationContext=ot(),this._notifyScopeListeners(),this}addBreadcrumb(t,e){const n="number"==typeof e?e:100;if(n<=0)return this;const r={timestamp:it(),...t},o=this._breadcrumbs;return o.push(r),this._breadcrumbs=o.length>n?o.slice(-n):o,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(t){return this._attachments.push(t),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,span:ft(this)}}setSDKProcessingMetadata(t){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...t},this}setPropagationContext(t){return this._propagationContext=t,this}getPropagationContext(){return this._propagationContext}captureException(t,e){const n=e&&e.event_id?e.event_id:B();if(!this._client)return p.warn("No client configured on scope - will not capture exception!"),n;const r=new Error("Sentry syntheticException");return this._client.captureException(t,{originalException:t,syntheticException:r,...e,event_id:n},this),n}captureMessage(t,e,n){const r=n&&n.event_id?n.event_id:B();if(!this._client)return p.warn("No client configured on scope - will not capture message!"),r;const o=new Error(t);return this._client.captureMessage(t,e,{originalException:t,syntheticException:o,...n,event_id:r},this),r}captureEvent(t,e){const n=e&&e.event_id?e.event_id:B();return this._client?(this._client.captureEvent(t,{...e,event_id:n},this),n):(p.warn("No client configured on scope - will not capture event!"),n)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach((t=>{t(this)})),this._notifyingListeners=!1)}}const mt=ht;class _t{constructor(t,e){let n,r;n=t||new mt,r=e||new mt,this._stack=[{scope:n}],this._isolationScope=r}withScope(t){const e=this._pushScope();let n;try{n=t(e)}catch(t){throw this._popScope(),t}return E(n)?n.then((t=>(this._popScope(),t)),(t=>{throw this._popScope(),t})):(this._popScope(),n)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const t=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:t}),t}_popScope(){return!(this._stack.length<=1)&&!!this._stack.pop()}}function gt(){const t=rt(nt());return t.stack=t.stack||new _t(i("defaultCurrentScope",(()=>new mt)),i("defaultIsolationScope",(()=>new mt)))}function yt(t){return gt().withScope(t)}function vt(t,e){const n=gt();return n.withScope((()=>(n.getStackTop().scope=t,e(t))))}function bt(t){return gt().withScope((()=>t(gt().getIsolationScope())))}function Et(t){const e=rt(t);return e.acs?e.acs:{withIsolationScope:bt,withScope:yt,withSetScope:vt,withSetIsolationScope:(t,e)=>bt(e),getCurrentScope:()=>gt().getScope(),getIsolationScope:()=>gt().getIsolationScope()}}function St(){return Et(nt()).getCurrentScope()}function xt(){return Et(nt()).getIsolationScope()}function wt(){return St().getClient()}let kt;const Ot=new WeakMap,Tt=()=>({name:"FunctionToString",setupOnce(){kt=Function.prototype.toString;try{Function.prototype.toString=function(...t){const e=R(this),n=Ot.has(wt())&&void 0!==e?e:this;return kt.apply(n,t)}}catch(t){}},setup(t){Ot.set(t,!0)}}),$t=50,Dt="?",Nt=/\(error: (.*)\)/,It=/captureMessage|captureException/;function jt(...t){const e=t.sort(((t,e)=>t[0]-e[0])).map((t=>t[1]));return(t,n=0,r=0)=>{const o=[],s=t.split("\n");for(let t=n;t<s.length;t++){const n=s[t];if(n.length>1024)continue;const i=Nt.test(n)?n.replace(Nt,"$1"):n;if(!i.match(/\S*Error: /)){for(const t of e){const e=t(i);if(e){o.push(e);break}}if(o.length>=$t+r)break}}return function(t){if(!t.length)return[];const e=Array.from(t);/sentryWrapped/.test(Ct(e).function||"")&&e.pop();e.reverse(),It.test(Ct(e).function||"")&&(e.pop(),It.test(Ct(e).function||"")&&e.pop());return e.slice(0,$t).map((t=>({...t,filename:t.filename||Ct(e).filename,function:t.function||Dt})))}(o.slice(r))}}function Ct(t){return t[t.length-1]||{}}const Pt="<anonymous>";function Rt(t){try{return t&&"function"==typeof t&&t.name||Pt}catch(t){return Pt}}function At(t){const e=t.exception;if(e){const t=[];try{return e.values.forEach((e=>{e.stacktrace.frames&&t.push(...e.stacktrace.frames)})),t}catch(t){return}}}const Lt=()=>{let t;return{name:"Dedupe",processEvent(e){if(e.type)return e;try{if(function(t,e){if(!e)return!1;if(function(t,e){const n=t.message,r=e.message;if(!n&&!r)return!1;if(n&&!r||!n&&r)return!1;if(n!==r)return!1;if(!Ut(t,e))return!1;if(!Mt(t,e))return!1;return!0}(t,e))return!0;if(function(t,e){const n=qt(e),r=qt(t);if(!n||!r)return!1;if(n.type!==r.type||n.value!==r.value)return!1;if(!Ut(t,e))return!1;if(!Mt(t,e))return!1;return!0}(t,e))return!0;return!1}(e,t))return J&&p.warn("Event dropped due to being a duplicate of previously captured event."),null}catch(t){}return t=e}}};function Mt(t,e){let n=At(t),r=At(e);if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;if(r.length!==n.length)return!1;for(let t=0;t<r.length;t++){const e=r[t],o=n[t];if(e.filename!==o.filename||e.lineno!==o.lineno||e.colno!==o.colno||e.function!==o.function)return!1}return!0}function Ut(t,e){let n=t.fingerprint,r=e.fingerprint;if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;try{return!(n.join("")!==r.join(""))}catch(t){return!1}}function qt(t){return t.exception&&t.exception.values&&t.exception.values[0]}function Bt(t,e){!0===e.debug&&(J?p.enable():u((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})));St().update(e.initialScope);const n=new t(e);return function(t){St().setClient(t)}(n),n.init(),n}const Ft="production";function Yt(t,e=100,n=1/0){try{return Gt("",t,e,n)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function Ht(t,e=3,n=102400){const r=Yt(t,e);return o=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(o))>n?Ht(t,e-1,n):r;var o}function Gt(t,e,n=1/0,r=1/0,o=function(){const t="function"==typeof WeakSet,e=t?new WeakSet:[];return[function(n){if(t)return!!e.has(n)||(e.add(n),!1);for(let t=0;t<e.length;t++)if(e[t]===n)return!0;return e.push(n),!1},function(n){if(t)e.delete(n);else for(let t=0;t<e.length;t++)if(e[t]===n){e.splice(t,1);break}}]}()){const[s,i]=o;if(null==e||["number","boolean","string"].includes(typeof e)&&!Number.isNaN(e))return e;const a=function(t,e){try{if("domain"===t&&e&&"object"==typeof e&&e._events)return"[Domain]";if("domainEmitter"===t)return"[DomainEmitter]";if("undefined"!=typeof global&&e===global)return"[Global]";if("undefined"!=typeof window&&e===window)return"[Window]";if("undefined"!=typeof document&&e===document)return"[Document]";if(x(e))return"[VueViewModel]";if(v(n=e)&&"nativeEvent"in n&&"preventDefault"in n&&"stopPropagation"in n)return"[SyntheticEvent]";if("number"==typeof e&&e!=e)return"[NaN]";if("function"==typeof e)return`[Function: ${Rt(e)}]`;if("symbol"==typeof e)return`[${String(e)}]`;if("bigint"==typeof e)return`[BigInt: ${String(e)}]`;const r=function(t){const e=Object.getPrototypeOf(t);return e?e.constructor.name:"null prototype"}(e);return/^HTML(\w*)Element$/.test(r)?`[HTMLElement: ${r}]`:`[object ${r}]`}catch(t){return`**non-serializable** (${t})`}var n}(t,e);if(!a.startsWith("[object "))return a;if(e.__sentry_skip_normalization__)return e;const c="number"==typeof e.__sentry_override_normalization_depth__?e.__sentry_override_normalization_depth__:n;if(0===c)return a.replace("object ","");if(s(e))return"[Circular ~]";const u=e;if(u&&"function"==typeof u.toJSON)try{return Gt("",u.toJSON(),c-1,r,o)}catch(t){}const p=Array.isArray(e)?[]:{};let l=0;const d=A(e);for(const t in d){if(!Object.prototype.hasOwnProperty.call(d,t))continue;if(l>=r){p[t]="[MaxProperties ~]";break}const e=d[t];p[t]=Gt(t,e,c-1,r,o),l++}return i(e),p}var zt;function Wt(t){return new Vt((e=>{e(t)}))}function Jt(t){return new Vt(((e,n)=>{n(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(zt||(zt={}));class Vt{constructor(t){Vt.prototype.__init.call(this),Vt.prototype.__init2.call(this),Vt.prototype.__init3.call(this),Vt.prototype.__init4.call(this),this._state=zt.PENDING,this._handlers=[];try{t(this._resolve,this._reject)}catch(t){this._reject(t)}}then(t,e){return new Vt(((n,r)=>{this._handlers.push([!1,e=>{if(t)try{n(t(e))}catch(t){r(t)}else n(e)},t=>{if(e)try{n(e(t))}catch(t){r(t)}else r(t)}]),this._executeHandlers()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Vt(((e,n)=>{let r,o;return this.then((e=>{o=!1,r=e,t&&t()}),(e=>{o=!0,r=e,t&&t()})).then((()=>{o?n(r):e(r)}))}))}__init(){this._resolve=t=>{this._setResult(zt.RESOLVED,t)}}__init2(){this._reject=t=>{this._setResult(zt.REJECTED,t)}}__init3(){this._setResult=(t,e)=>{this._state===zt.PENDING&&(E(e)?e.then(this._resolve,this._reject):(this._state=t,this._value=e,this._executeHandlers()))}}__init4(){this._executeHandlers=()=>{if(this._state===zt.PENDING)return;const t=this._handlers.slice();this._handlers=[],t.forEach((t=>{t[0]||(this._state===zt.RESOLVED&&t[1](this._value),this._state===zt.REJECTED&&t[2](this._value),t[0]=!0)}))}}}function Kt(t,e,n,r=0){return new Vt(((o,s)=>{const i=t[r];if(null===e||"function"!=typeof i)o(e);else{const a=i({...e},n);J&&i.id&&null===a&&p.log(`Event processor "${i.id}" dropped event`),E(a)?a.then((e=>Kt(t,e,n,r+1).then(o))).then(null,s):Kt(t,a,n,r+1).then(o).then(null,s)}}))}const Xt="sentry-",Qt=/^sentry-/;function Zt(t){const e=function(t){if(!t||!_(t)&&!Array.isArray(t))return;if(Array.isArray(t))return t.reduce(((t,e)=>{const n=te(e);return Object.entries(n).forEach((([e,n])=>{t[e]=n})),t}),{});return te(t)}(t);if(!e)return;const n=Object.entries(e).reduce(((t,[e,n])=>{if(e.match(Qt)){t[e.slice(Xt.length)]=n}return t}),{});return Object.keys(n).length>0?n:void 0}function te(t){return t.split(",").map((t=>t.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[e,n])=>(e&&n&&(t[e]=n),t)),{})}const ee="sentry.source",ne="sentry.sample_rate",re="sentry.op",oe="sentry.origin",se="_sentryMetrics";function ie(t){const e=t[se];if(!e)return;const n={};for(const[,[t,r]]of e){(n[t]||(n[t]=[])).push(U(r))}return n}const ae=0,ce=1;const ue=1;function pe(t){const{spanId:e,traceId:n}=t.spanContext(),{parent_span_id:r}=fe(t);return U({parent_span_id:r,span_id:e,trace_id:n})}function le(t){return"number"==typeof t?de(t):Array.isArray(t)?t[0]+t[1]/1e9:t instanceof Date?de(t.getTime()):at()}function de(t){return t>9999999999?t/1e3:t}function fe(t){if(function(t){return"function"==typeof t.getSpanJSON}(t))return t.getSpanJSON();try{const{spanId:e,traceId:n}=t.spanContext();if(function(t){const e=t;return!!(e.attributes&&e.startTime&&e.name&&e.endTime&&e.status)}(t)){const{attributes:r,startTime:o,name:s,endTime:i,parentSpanId:a,status:c}=t;return U({span_id:e,trace_id:n,data:r,description:s,parent_span_id:a,start_timestamp:le(o),timestamp:le(i)||void 0,status:me(c),op:r[re],origin:r[oe],_metrics_summary:ie(t)})}return{span_id:e,trace_id:n}}catch(t){return{}}}function he(t){const{traceFlags:e}=t.spanContext();return e===ue}function me(t){if(t&&t.code!==ae)return t.code===ce?"ok":t.message||"unknown_error"}const _e="_sentryRootSpan";function ge(t){return t[_e]||t}const ye="_frozenDsc";function ve(t,e){const n=e.getOptions(),{publicKey:r}=e.getDsn()||{},o=U({environment:n.environment||Ft,release:n.release,public_key:r,trace_id:t});return e.emit("createDsc",o),o}function be(t){const e=wt();if(!e)return{};const n=ve(fe(t).trace_id||"",e),r=ge(t),o=r[ye];if(o)return o;const s=r.spanContext().traceState,i=s&&s.get("sentry.dsc"),a=i&&Zt(i);if(a)return a;const c=fe(r),u=c.data||{},p=u[ne];null!=p&&(n.sample_rate=`${p}`);const l=u[ee],d=c.description;return"url"!==l&&d&&(n.transaction=d),n.sampled=String(he(r)),e.emit("createDsc",n,r),n}function Ee(t,e){const{fingerprint:n,span:r,breadcrumbs:o,sdkProcessingMetadata:s}=e;!function(t,e){const{extra:n,tags:r,user:o,contexts:s,level:i,transactionName:a}=e,c=U(n);c&&Object.keys(c).length&&(t.extra={...c,...t.extra});const u=U(r);u&&Object.keys(u).length&&(t.tags={...u,...t.tags});const p=U(o);p&&Object.keys(p).length&&(t.user={...p,...t.user});const l=U(s);l&&Object.keys(l).length&&(t.contexts={...l,...t.contexts});i&&(t.level=i);a&&"transaction"!==t.type&&(t.transaction=a)}(t,e),r&&function(t,e){t.contexts={trace:pe(e),...t.contexts},t.sdkProcessingMetadata={dynamicSamplingContext:be(e),...t.sdkProcessingMetadata};const n=ge(e),r=fe(n).description;r&&!t.transaction&&"transaction"===t.type&&(t.transaction=r)}(t,r),function(t,e){t.fingerprint=t.fingerprint?W(t.fingerprint):[],e&&(t.fingerprint=t.fingerprint.concat(e));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,n),function(t,e){const n=[...t.breadcrumbs||[],...e];t.breadcrumbs=n.length?n:void 0}(t,o),function(t,e){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...e}}(t,s)}function Se(t,e){const{extra:n,tags:r,user:o,contexts:s,level:i,sdkProcessingMetadata:a,breadcrumbs:c,fingerprint:u,eventProcessors:p,attachments:l,propagationContext:d,transactionName:f,span:h}=e;xe(t,"extra",n),xe(t,"tags",r),xe(t,"user",o),xe(t,"contexts",s),xe(t,"sdkProcessingMetadata",a),i&&(t.level=i),f&&(t.transactionName=f),h&&(t.span=h),c.length&&(t.breadcrumbs=[...t.breadcrumbs,...c]),u.length&&(t.fingerprint=[...t.fingerprint,...u]),p.length&&(t.eventProcessors=[...t.eventProcessors,...p]),l.length&&(t.attachments=[...t.attachments,...l]),t.propagationContext={...t.propagationContext,...d}}function xe(t,e,n){if(n&&Object.keys(n).length){t[e]={...t[e]};for(const r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[e][r]=n[r])}}function we(t,e,n,r,o,a){const{normalizeDepth:c=3,normalizeMaxBreadth:u=1e3}=t,p={...e,event_id:e.event_id||n.event_id||B(),timestamp:e.timestamp||it()},l=n.integrations||t.integrations.map((t=>t.name));!function(t,e){const{environment:n,release:r,dist:o,maxValueLength:s=250}=e;"environment"in t||(t.environment="environment"in e?n:Ft);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==o&&(t.dist=o);t.message&&(t.message=$(t.message,s));const i=t.exception&&t.exception.values&&t.exception.values[0];i&&i.value&&(i.value=$(i.value,s));const a=t.request;a&&a.url&&(a.url=$(a.url,s))}(p,t),function(t,e){e.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...e])}(p,l),o&&o.emit("applyFrameMetadata",e),void 0===e.type&&function(t,e){const n=s._sentryDebugIds;if(!n)return;let r;const o=ke.get(e);o?r=o:(r=new Map,ke.set(e,r));const i=Object.entries(n).reduce(((t,[n,o])=>{let s;const i=r.get(n);i?s=i:(s=e(n),r.set(n,s));for(let e=s.length-1;e>=0;e--){const n=s[e];if(n.filename){t[n.filename]=o;break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=i[t.filename])}))}))}catch(t){}}(p,t.stackParser);const d=function(t,e){if(!e)return t;const n=t?t.clone():new mt;return n.update(e),n}(r,n.captureContext);n.mechanism&&G(p,n.mechanism);const f=o?o.getEventProcessors():[],h=i("globalScope",(()=>new mt)).getScopeData();if(a){Se(h,a.getScopeData())}if(d){Se(h,d.getScopeData())}const m=[...n.attachments||[],...h.attachments];m.length&&(n.attachments=m),Ee(p,h);return Kt([...f,...h.eventProcessors],p,n).then((t=>(t&&function(t){const e={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?e[t.abs_path]=t.debug_id:t.filename&&(e[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(e).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const n=t.debug_meta.images;Object.entries(e).forEach((([t,e])=>{n.push({type:"sourcemap",code_file:t,debug_id:e})}))}(t),"number"==typeof c&&c>0?function(t,e,n){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Yt(t.data,e,n)}})))},...t.user&&{user:Yt(t.user,e,n)},...t.contexts&&{contexts:Yt(t.contexts,e,n)},...t.extra&&{extra:Yt(t.extra,e,n)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Yt(t.contexts.trace.data,e,n)));t.spans&&(r.spans=t.spans.map((t=>({...t,...t.data&&{data:Yt(t.data,e,n)}}))));return r}(t,c,u):t)))}const ke=new WeakMap;function Oe(t){if(t)return function(t){return t instanceof mt||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>Te.includes(t)))}(t)?{captureContext:t}:t}const Te=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function $e(t,e){return St().captureException(t,Oe(e))}function De(t,e){return St().captureEvent(t,e)}function Ne(t){const e=wt(),n=xt(),r=St(),{release:o,environment:i=Ft}=e&&e.getOptions()||{},{userAgent:a}=s.navigator||{},c=ut({release:o,environment:i,user:r.getUser()||n.getUser(),...a&&{userAgent:a},...t}),u=n.getSession();return u&&"ok"===u.status&&pt(u,{status:"exited"}),Ie(),n.setSession(c),r.setSession(c),c}function Ie(){const t=xt(),e=St(),n=e.getSession()||t.getSession();n&&function(t,e){let n={};e?n={status:e}:"ok"===t.status&&(n={status:"exited"}),pt(t,n)}(n),je(),t.setSession(),e.setSession()}function je(){const t=xt(),e=St(),n=wt(),r=e.getSession()||t.getSession();r&&n&&n.captureSession(r)}function Ce(t=!1){t?Ie():je()}const Pe=s;function Re(){if(!("fetch"in Pe))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function Ae(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}const Le={},Me={};function Ue(t,e){Le[t]=Le[t]||[],Le[t].push(e)}function qe(t,e){Me[t]||(e(),Me[t]=!0)}function Be(t,e){const n=t&&Le[t];if(n)for(const o of n)try{o(e)}catch(e){r&&p.error(`Error while triggering instrumentation handler.\nType: ${t}\nName: ${Rt(o)}\nError:`,e)}}const Fe=s;const Ye=s;let He;function Ge(t){const e="history";Ue(e,t),qe(e,ze)}function ze(){if(!function(){const t=Fe.chrome,e=t&&t.app&&t.app.runtime,n="history"in Fe&&!!Fe.history.pushState&&!!Fe.history.replaceState;return!e&&n}())return;const t=Ye.onpopstate;function e(t){return function(...e){const n=e.length>2?e[2]:void 0;if(n){const t=He,e=String(n);He=e;Be("history",{from:t,to:e})}return t.apply(this,e)}}Ye.onpopstate=function(...e){const n=Ye.location.href,r=He;He=n;if(Be("history",{from:r,to:n}),t)try{return t.apply(this,e)}catch(t){}},j(Ye.history,"pushState",e),j(Ye.history,"replaceState",e)}const We=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function Je(t,e=!1){const{host:n,path:r,pass:o,port:s,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&o?`:${o}`:""}@${n}${s?`:${s}`:""}/${r?`${r}/`:r}${i}`}function Ve(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Ke(t){const e="string"==typeof t?function(t){const e=We.exec(t);if(!e)return void u((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[n,r,o="",s="",i="",a=""]=e.slice(1);let c="",p=a;const l=p.split("/");if(l.length>1&&(c=l.slice(0,-1).join("/"),p=l.pop()),p){const t=p.match(/^\d+/);t&&(p=t[0])}return Ve({host:s,pass:o,path:c,projectId:p,port:i,protocol:n,publicKey:r})}(t):Ve(t);if(e&&function(t){if(!r)return!0;const{port:e,projectId:n,protocol:o}=t;return!(["protocol","publicKey","host","projectId"].find((e=>!t[e]&&(p.error(`Invalid Sentry Dsn: ${e} missing`),!0)))||(n.match(/^\d+$/)?function(t){return"http"===t||"https"===t}(o)?e&&isNaN(parseInt(e,10))&&(p.error(`Invalid Sentry Dsn: Invalid port ${e}`),1):(p.error(`Invalid Sentry Dsn: Invalid protocol ${o}`),1):(p.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),1)))}(e))return e}function Xe(t,e=[]){return[t,e]}function Qe(t,e){const[n,r]=t;return[n,[...r,e]]}function Ze(t,e){const n=t[1];for(const t of n){if(e(t,t[0].type))return!0}return!1}function tn(t){return s.__SENTRY__&&s.__SENTRY__.encodePolyfill?s.__SENTRY__.encodePolyfill(t):(new TextEncoder).encode(t)}function en(t){const[e,n]=t;let r=JSON.stringify(e);function o(t){"string"==typeof r?r="string"==typeof t?r+t:[tn(r),t]:r.push("string"==typeof t?tn(t):t)}for(const t of n){const[e,n]=t;if(o(`\n${JSON.stringify(e)}\n`),"string"==typeof n||n instanceof Uint8Array)o(n);else{let t;try{t=JSON.stringify(n)}catch(e){t=JSON.stringify(Yt(n))}o(t)}}return"string"==typeof r?r:function(t){const e=t.reduce(((t,e)=>t+e.length),0),n=new Uint8Array(e);let r=0;for(const e of t)n.set(e,r),r+=e.length;return n}(r)}function nn(t){const e="string"==typeof t.data?tn(t.data):t.data;return[U({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",statsd:"metric_bucket"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:e,version:n}=t.sdk;return{name:e,version:n}}class an extends Error{constructor(t,e="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=e}}const cn="7";function un(t){const e=t.protocol?`${t.protocol}:`:"",n=t.port?`:${t.port}`:"";return`${e}//${t.host}${n}${t.path?`/${t.path}`:""}/api/`}function pn(t,e){return n={sentry_key:t.publicKey,sentry_version:cn,...e&&{sentry_client:`${e.name}/${e.version}`}},Object.keys(n).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`)).join("&");var n}function ln(t,e,n){return e||`${function(t){return`${un(t)}${t.projectId}/envelope/`}(t)}?${pn(t,n)}`}function dn(t,e,n,r){const o=sn(n),s=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,e){e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=[...t.sdk.integrations||[],...e.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...e.packages||[]])}(t,n&&n.sdk);const i=function(t,e,n,r){const o=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...e&&{sdk:e},...!!n&&r&&{dsn:Je(r)},...o&&{trace:U({...o})}}}(t,o,r,e);delete t.sdkProcessingMetadata;return Xe(i,[[{type:s},t]])}const fn="Not capturing exception because it's already been captured.";class hn{constructor(t){if(this._options=t,this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],t.dsn?this._dsn=Ke(t.dsn):J&&p.warn("No DSN provided, client will not send events."),this._dsn){const e=ln(this._dsn,t.tunnel,t._metadata?t._metadata.sdk:void 0);this._transport=t.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:e})}}captureException(t,e,n){const r=B();if(z(t))return J&&p.log(fn),r;const o={event_id:r,...e};return this._process(this.eventFromException(t,o).then((t=>this._captureEvent(t,o,n)))),o.event_id}captureMessage(t,e,n,r){const o={event_id:B(),...n},s=g(t)?t:String(t),i=y(t)?this.eventFromMessage(s,e,o):this.eventFromException(t,o);return this._process(i.then((t=>this._captureEvent(t,o,r)))),o.event_id}captureEvent(t,e,n){const r=B();if(e&&e.originalException&&z(e.originalException))return J&&p.log(fn),r;const o={event_id:r,...e},s=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this._process(this._captureEvent(t,o,s||n)),o.event_id}captureSession(t){"string"!=typeof t.release?J&&p.warn("Discarded session because of missing or non-string release"):(this.sendSession(t),pt(t,{init:!1}))}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(t){const e=this._transport;return e?(this.emit("flush"),this._isClientDoneProcessing(t).then((n=>e.flush(t).then((t=>n&&t))))):Wt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.emit("close"),t)))}getEventProcessors(){return this._eventProcessors}addEventProcessor(t){this._eventProcessors.push(t)}init(){this._isEnabled()&&this._setupIntegrations()}getIntegrationByName(t){return this._integrations[t]}addIntegration(t){const e=this._integrations[t.name];Q(this,t,this._integrations),e||X(this,[t])}sendEvent(t,e={}){this.emit("beforeSendEvent",t,e);let n=dn(t,this._dsn,this._options._metadata,this._options.tunnel);for(const t of e.attachments||[])n=Qe(n,nn(t));const r=this.sendEnvelope(n);r&&r.then((e=>this.emit("afterSendEvent",t,e)),null)}sendSession(t){const e=function(t,e,n,r){const o=sn(n);return Xe({sent_at:(new Date).toISOString(),...o&&{sdk:o},...!!r&&e&&{dsn:Je(e)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(e)}recordDroppedEvent(t,e,n){if(this._options.sendClientReports){const n=`${t}:${e}`;J&&p.log(`Adding outcome: "${n}"`),this._outcomes[n]=(this._outcomes[n]||0)+1}}on(t,e){const n=this._hooks[t]=this._hooks[t]||[];return n.push(e),()=>{const t=n.indexOf(e);t>-1&&n.splice(t,1)}}emit(t,...e){const n=this._hooks[t];n&&n.forEach((t=>t(...e)))}sendEnvelope(t){return this.emit("beforeEnvelope",t),this._isEnabled()&&this._transport?this._transport.send(t).then(null,(t=>(J&&p.error("Error while sending event:",t),t))):(J&&p.error("Transport disabled"),Wt({}))}_setupIntegrations(){const{integrations:t}=this._options;this._integrations=function(t,e){const n={};return e.forEach((e=>{e&&Q(t,e,n)})),n}(this,t),X(this,t)}_updateSessionFromEvent(t,e){let n=!1,r=!1;const o=e.exception&&e.exception.values;if(o){r=!0;for(const t of o){const e=t.mechanism;if(e&&!1===e.handled){n=!0;break}}}const s="ok"===t.status;(s&&0===t.errors||s&&n)&&(pt(t,{...n&&{status:"crashed"},errors:t.errors||Number(r||n)}),this.captureSession(t))}_isClientDoneProcessing(t){return new Vt((e=>{let n=0;const r=setInterval((()=>{0==this._numProcessing?(clearInterval(r),e(!0)):(n+=1,t&&n>=t&&(clearInterval(r),e(!1)))}),1)}))}_isEnabled(){return!1!==this.getOptions().enabled&&void 0!==this._transport}_prepareEvent(t,e,n,r=xt()){const o=this.getOptions(),s=Object.keys(this._integrations);return!e.integrations&&s.length>0&&(e.integrations=s),this.emit("preprocessEvent",t,e),t.type||r.setLastEventId(t.event_id||e.event_id),we(o,t,e,n,this,r).then((t=>{if(null===t)return t;const e={...r.getPropagationContext(),...n?n.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&e){const{traceId:n,spanId:r,parentSpanId:o,dsc:s}=e;t.contexts={trace:U({trace_id:n,span_id:r,parent_span_id:o}),...t.contexts};const i=s||ve(n,this);t.sdkProcessingMetadata={dynamicSamplingContext:i,...t.sdkProcessingMetadata}}return t}))}_captureEvent(t,e={},n){return this._processEvent(t,e,n).then((t=>t.event_id),(t=>{if(J){const e=t;"log"===e.logLevel?p.log(e.message):p.warn(e)}}))}_processEvent(t,e,n){const r=this.getOptions(),{sampleRate:o}=r,s=_n(t),i=mn(t),a=t.type||"error",c=`before send for type \`${a}\``,u=void 0===o?void 0:function(t){if("boolean"==typeof t)return Number(t);const e="string"==typeof t?parseFloat(t):t;if(!("number"!=typeof e||isNaN(e)||e<0||e>1))return e;J&&p.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(t)} of type ${JSON.stringify(typeof t)}.`)}(o);if(i&&"number"==typeof u&&Math.random()>u)return this.recordDroppedEvent("sample_rate","error",t),Jt(new an(`Discarding event because it's not included in the random sample (sampling rate = ${o})`,"log"));const l="replay_event"===a?"replay":a,d=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this._prepareEvent(t,e,n,d).then((n=>{if(null===n)throw this.recordDroppedEvent("event_processor",l,t),new an("An event processor returned `null`, will not send event.","log");if(e.data&&!0===e.data.__sentry__)return n;const o=function(t,e,n,r){const{beforeSend:o,beforeSendTransaction:s,beforeSendSpan:i}=e;if(mn(n)&&o)return o(n,r);if(_n(n)){if(n.spans&&i){const e=[];for(const r of n.spans){const n=i(r);n?e.push(n):t.recordDroppedEvent("before_send","span")}n.spans=e}if(s)return s(n,r)}return n}(this,r,n,e);return function(t,e){const n=`${e} must return \`null\` or a valid event.`;if(E(t))return t.then((t=>{if(!v(t)&&null!==t)throw new an(n);return t}),(t=>{throw new an(`${e} rejected with ${t}`)}));if(!v(t)&&null!==t)throw new an(n);return t}(o,c)})).then((r=>{if(null===r){if(this.recordDroppedEvent("before_send",l,t),_n(t)){const e=1+(t.spans||[]).length;this._outcomes.span=(this._outcomes.span||0)+e}throw new an(`${c} returned \`null\`, will not send event.`,"log")}const o=n&&n.getSession();!s&&o&&this._updateSessionFromEvent(o,r);const i=r.transaction_info;if(s&&i&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...i,source:t}}return this.sendEvent(r,e),r})).then(null,(t=>{if(t instanceof an)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new an(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}_process(t){this._numProcessing++,t.then((t=>(this._numProcessing--,t)),(t=>(this._numProcessing--,t)))}_clearOutcomes(){const t=this._outcomes;return this._outcomes={},Object.entries(t).map((([t,e])=>{const[n,r]=t.split(":");return{reason:n,category:r,quantity:e}}))}_flushOutcomes(){J&&p.log("Flushing outcomes...");const t=this._clearOutcomes();if(0===t.length)return void(J&&p.log("No outcomes to send"));if(!this._dsn)return void(J&&p.log("No dsn provided, will not send outcomes"));J&&p.log("Sending outcomes:",t);const e=(n=t,Xe((r=this._options.tunnel&&Je(this._dsn))?{dsn:r}:{},[[{type:"client_report"},{timestamp:o||it(),discarded_events:n}]]));var n,r,o;this.sendEnvelope(e)}}function mn(t){return void 0===t.type}function _n(t){return"transaction"===t.type}const gn="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__;function yn(t,e){const n=En(t,e),r={type:e&&e.name,value:xn(e)};return n.length&&(r.stacktrace={frames:n}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function vn(t,e,n,r){const o=wt(),s=o&&o.getOptions().normalizeDepth,i=function(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];if(n instanceof Error)return n}return}(e),a={__serialized__:Ht(e,s)};if(i)return{exception:{values:[yn(t,i)]},extra:a};const c={exception:{values:[{type:b(e)?e.constructor.name:r?"UnhandledRejection":"Error",value:On(e,{isUnhandledRejection:r})}]},extra:a};if(n){const e=En(t,n);e.length&&(c.exception.values[0].stacktrace={frames:e})}return c}function bn(t,e){return{exception:{values:[yn(t,e)]}}}function En(t,e){const n=e.stacktrace||e.stack||"",r=function(t){if(t&&Sn.test(t.message))return 1;return 0}(e),o=function(t){if("number"==typeof t.framesToPop)return t.framesToPop;return 0}(e);try{return t(n,r,o)}catch(t){}return[]}const Sn=/Minified React error #\d+;/i;function xn(t){const e=t&&t.message;return e?e.error&&"string"==typeof e.error.message?e.error.message:e:"No error message"}function wn(t,e,n,r,o){let s;if(h(e)&&e.error){return bn(t,e.error)}if(m(e)||f(e,"DOMException")){const o=e;if("stack"in e)s=bn(t,e);else{const e=o.name||(m(o)?"DOMError":"DOMException"),i=o.message?`${e}: ${o.message}`:e;s=kn(t,i,n,r),H(s,i)}return"code"in o&&(s.tags={...s.tags,"DOMException.code":`${o.code}`}),s}if(d(e))return bn(t,e);if(v(e)||b(e)){return s=vn(t,e,n,o),G(s,{synthetic:!0}),s}return s=kn(t,e,n,r),H(s,`${e}`,void 0),G(s,{synthetic:!0}),s}function kn(t,e,n,r){const o={};if(r&&n){const r=En(t,n);r.length&&(o.exception={values:[{value:e,stacktrace:{frames:r}}]})}if(g(e)){const{__sentry_template_string__:t,__sentry_template_values__:n}=e;return o.logentry={message:t,params:n},o}return o.message=e,o}function On(t,{isUnhandledRejection:e}){const n=function(t,e=40){const n=Object.keys(A(t));n.sort();const r=n[0];if(!r)return"[object has no keys]";if(r.length>=e)return $(r,e);for(let t=n.length;t>0;t--){const r=n.slice(0,t).join(", ");if(!(r.length>e))return t===n.length?r:$(r,e)}return""}(t),r=e?"promise rejection":"exception";if(h(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(b(t)){return`Event \`${function(t){try{const e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${n}`}const Tn=s;let $n=0;function Dn(){return $n>0}function Nn(t,e={},n){if("function"!=typeof t)return t;try{const e=t.__sentry_wrapped__;if(e)return e;if(R(t))return t}catch(e){return t}const r=function(){const r=Array.prototype.slice.call(arguments);try{n&&"function"==typeof n&&n.apply(this,arguments);const o=r.map((t=>Nn(t,e)));return t.apply(this,o)}catch(t){throw $n++,setTimeout((()=>{$n--})),function(...t){const e=Et(nt());if(2===t.length){const[n,r]=t;return n?e.withSetScope(n,r):e.withScope(r)}e.withScope(t[0])}((n=>{n.addEventProcessor((t=>(e.mechanism&&(H(t,void 0,void 0),G(t,e.mechanism)),t.extra={...t.extra,arguments:r},t))),$e(t)})),t}};try{for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e])}catch(t){}P(r,t),C(t,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return t.name}})}catch(t){}return r}class In extends hn{constructor(t){const e={parentSpanIsAlwaysRootSpan:!0,...t};!function(t,e,n=[e],r="npm"){const s=t._metadata||{};s.sdk||(s.sdk={name:`sentry.javascript.${e}`,packages:n.map((t=>({name:`${r}:@sentry/${t}`,version:o}))),version:o}),t._metadata=s}(e,"browser",["browser"],Tn.SENTRY_SDK_SOURCE||"npm"),super(e),e.sendClientReports&&Tn.document&&Tn.document.addEventListener("visibilitychange",(()=>{"hidden"===Tn.document.visibilityState&&this._flushOutcomes()}))}eventFromException(t,e){return function(t,e,n,r){const o=wn(t,e,n&&n.syntheticException||void 0,r);return G(o),o.level="error",n&&n.event_id&&(o.event_id=n.event_id),Wt(o)}(this._options.stackParser,t,e,this._options.attachStacktrace)}eventFromMessage(t,e="info",n){return function(t,e,n="info",r,o){const s=kn(t,e,r&&r.syntheticException||void 0,o);return s.level=n,r&&r.event_id&&(s.event_id=r.event_id),Wt(s)}(this._options.stackParser,t,e,n,this._options.attachStacktrace)}captureUserFeedback(t){if(!this._isEnabled())return void(gn&&p.warn("SDK not enabled, will not capture user feedback."));const e=function(t,{metadata:e,tunnel:n,dsn:r}){const o={event_id:t.event_id,sent_at:(new Date).toISOString(),...e&&e.sdk&&{sdk:{name:e.sdk.name,version:e.sdk.version}},...!!n&&!!r&&{dsn:Je(r)}},s=function(t){return[{type:"user_report"},t]}(t);return Xe(o,[s])}(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.sendEnvelope(e)}_prepareEvent(t,e,n){return t.platform=t.platform||"javascript",super._prepareEvent(t,e,n)}}const jn=1e3;let Cn,Pn,Rn;function An(){if(!Ye.document)return;const t=Be.bind(null,"dom"),e=Ln(t,!0);Ye.document.addEventListener("click",e,!1),Ye.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach((e=>{const n=Ye[e]&&Ye[e].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(j(n,"addEventListener",(function(e){return function(n,r,o){if("click"===n||"keypress"==n)try{const r=this,s=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},i=s[n]=s[n]||{refCount:0};if(!i.handler){const r=Ln(t);i.handler=r,e.call(this,n,r,o)}i.refCount++}catch(t){}return e.call(this,n,r,o)}})),j(n,"removeEventListener",(function(t){return function(e,n,r){if("click"===e||"keypress"==e)try{const n=this,o=n.__sentry_instrumentation_handlers__||{},s=o[e];s&&(s.refCount--,s.refCount<=0&&(t.call(this,e,s.handler,r),s.handler=void 0,delete o[e]),0===Object.keys(o).length&&delete n.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,e,n,r)}})))}))}function Ln(t,e=!1){return n=>{if(!n||n._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(n);if(function(t,e){return"keypress"===t&&(!e||!e.tagName||"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName&&!e.isContentEditable)}(n.type,r))return;C(n,"_sentryCaptured",!0),r&&!r._sentryId&&C(r,"_sentryId",B());const o="keypress"===n.type?"input":n.type;if(!function(t){if(t.type!==Pn)return!1;try{if(!t.target||t.target._sentryId!==Rn)return!1}catch(t){}return!0}(n)){t({event:n,name:o,global:e}),Pn=n.type,Rn=r?r._sentryId:void 0}clearTimeout(Cn),Cn=Ye.setTimeout((()=>{Rn=void 0,Pn=void 0}),jn)}}const Mn="__sentry_xhr_v3__";function Un(){if(!Ye.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;j(t,"open",(function(t){return function(...e){const n=1e3*at(),r=_(e[0])?e[0].toUpperCase():void 0,o=function(t){if(_(t))return t;try{return t.toString()}catch(t){}return}(e[1]);if(!r||!o)return t.apply(this,e);this[Mn]={method:r,url:o,request_headers:{}},"POST"===r&&o.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const s=()=>{const t=this[Mn];if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}Be("xhr",{endTimestamp:1e3*at(),startTimestamp:n,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?j(this,"onreadystatechange",(function(t){return function(...e){return s(),t.apply(this,e)}})):this.addEventListener("readystatechange",s),j(this,"setRequestHeader",(function(t){return function(...e){const[n,r]=e,o=this[Mn];return o&&_(n)&&_(r)&&(o.request_headers[n.toLowerCase()]=r),t.apply(this,e)}})),t.apply(this,e)}})),j(t,"send",(function(t){return function(...e){const n=this[Mn];if(!n)return t.apply(this,e);void 0!==e[0]&&(n.body=e[0]);return Be("xhr",{startTimestamp:1e3*at(),xhr:this}),t.apply(this,e)}}))}const qn=100;function Bn(t,e){const n=wt(),r=xt();if(!n)return;const{beforeBreadcrumb:o=null,maxBreadcrumbs:s=qn}=n.getOptions();if(s<=0)return;const i={timestamp:it(),...t},a=o?u((()=>o(i,e))):i;null!==a&&(n.emit&&n.emit("beforeAddBreadcrumb",a,e),r.addBreadcrumb(a,s))}function Fn(){"console"in s&&a.forEach((function(t){t in s.console&&j(s.console,t,(function(e){return c[t]=e,function(...e){Be("console",{args:e,level:t});const n=c[t];n&&n.apply(s.console,e)}}))}))}function Yn(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!Re())return!1;if(Ae(Pe.fetch))return!0;let t=!1;const e=Pe.document;if(e&&"function"==typeof e.createElement)try{const n=e.createElement("iframe");n.hidden=!0,e.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(t=Ae(n.contentWindow.fetch)),e.head.removeChild(n)}catch(t){r&&p.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",t)}return t})()&&j(s,"fetch",(function(t){return function(...e){const{method:n,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[e,n]=t;return{url:Gn(e),method:Hn(n,"method")?String(n.method).toUpperCase():"GET"}}const e=t[0];return{url:Gn(e),method:Hn(e,"method")?String(e.method).toUpperCase():"GET"}}(e),o={args:e,fetchData:{method:n,url:r},startTimestamp:1e3*at()};Be("fetch",{...o});const i=(new Error).stack;return t.apply(s,e).then((t=>(Be("fetch",{...o,endTimestamp:1e3*at(),response:t}),t)),(t=>{throw Be("fetch",{...o,endTimestamp:1e3*at(),error:t}),d(t)&&void 0===t.stack&&(t.stack=i,C(t,"framesToPop",1)),t}))}}))}function Hn(t,e){return!!t&&"object"==typeof t&&!!t[e]}function Gn(t){return"string"==typeof t?t:t?Hn(t,"url")?t.url:t.toString?t.toString():"":""}const zn=["fatal","error","warning","log","info","debug"];function Wn(t){return"warn"===t?"warning":zn.includes(t)?t:"log"}function Jn(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}const Vn=1024,Kn=(t={})=>{const e={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:"Breadcrumbs",setup(t){var n;e.console&&function(t){const e="console";Ue(e,t),qe(e,Fn)}(function(t){return function(e){if(wt()!==t)return;const n={category:"console",data:{arguments:e.args,logger:"console"},level:Wn(e.level),message:D(e.args," ")};if("assert"===e.level){if(!1!==e.args[0])return;n.message=`Assertion failed: ${D(e.args.slice(1)," ")||"console.assert"}`,n.data.arguments=e.args.slice(1)}Bn(n,{input:e.args,level:e.level})}}(t)),e.dom&&(n=function(t,e){return function(n){if(wt()!==t)return;let r,o,s="object"==typeof e?e.serializeAttribute:void 0,i="object"==typeof e&&"number"==typeof e.maxStringLength?e.maxStringLength:void 0;i&&i>Vn&&(gn&&p.warn(`\`dom.maxStringLength\` cannot exceed 1024, but a value of ${i} was configured. Sentry will use 1024 instead.`),i=Vn),"string"==typeof s&&(s=[s]);try{const t=n.event,e=function(t){return!!t&&!!t.target}(t)?t.target:t;r=O(e,{keyAttrs:s,maxStringLength:i}),o=function(t){if(!w.HTMLElement)return null;let e=t;for(let t=0;t<5;t++){if(!e)return null;if(e instanceof HTMLElement){if(e.dataset.sentryComponent)return e.dataset.sentryComponent;if(e.dataset.sentryElement)return e.dataset.sentryElement}e=e.parentNode}return null}(e)}catch(t){r="<unknown>"}if(0===r.length)return;const a={category:`ui.${n.name}`,message:r};o&&(a.data={"ui.component_name":o}),Bn(a,{event:n.event,name:n.name,global:n.global})}}(t,e.dom),Ue("dom",n),qe("dom",An)),e.xhr&&function(t){Ue("xhr",t),qe("xhr",Un)}(function(t){return function(e){if(wt()!==t)return;const{startTimestamp:n,endTimestamp:r}=e,o=e.xhr[Mn];if(!n||!r||!o)return;const{method:s,url:i,status_code:a,body:c}=o;Bn({category:"xhr",data:{method:s,url:i,status_code:a},type:"http"},{xhr:e.xhr,input:c,startTimestamp:n,endTimestamp:r})}}(t)),e.fetch&&function(t){const e="fetch";Ue(e,t),qe(e,Yn)}(function(t){return function(e){if(wt()!==t)return;const{startTimestamp:n,endTimestamp:r}=e;if(r&&(!e.fetchData.url.match(/sentry_key/)||"POST"!==e.fetchData.method))if(e.error){Bn({category:"fetch",data:e.fetchData,level:"error",type:"http"},{data:e.error,input:e.args,startTimestamp:n,endTimestamp:r})}else{const t=e.response;Bn({category:"fetch",data:{...e.fetchData,status_code:t&&t.status},type:"http"},{input:e.args,response:t,startTimestamp:n,endTimestamp:r})}}}(t)),e.history&&Ge(function(t){return function(e){if(wt()!==t)return;let n=e.from,r=e.to;const o=Jn(Tn.location.href);let s=n?Jn(n):void 0;const i=Jn(r);s&&s.path||(s=o),o.protocol===i.protocol&&o.host===i.host&&(r=i.relative),o.protocol===s.protocol&&o.host===s.host&&(n=s.relative),Bn({category:"navigation",data:{from:n,to:r}})}}(t)),e.sentry&&t.on("beforeSendEvent",function(t){return function(e){wt()===t&&Bn({category:"sentry."+("transaction"===e.type?"transaction":"event"),event_id:e.event_id,level:e.level,message:Y(e)},{event:e})}}(t))}}};const Xn=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qn=(t={})=>{const e={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:"BrowserApiErrors",setupOnce(){e.setTimeout&&j(Tn,"setTimeout",Zn),e.setInterval&&j(Tn,"setInterval",Zn),e.requestAnimationFrame&&j(Tn,"requestAnimationFrame",tr),e.XMLHttpRequest&&"XMLHttpRequest"in Tn&&j(XMLHttpRequest.prototype,"send",er);const t=e.eventTarget;if(t){(Array.isArray(t)?t:Xn).forEach(nr)}}}};function Zn(t){return function(...e){const n=e[0];return e[0]=Nn(n,{mechanism:{data:{function:Rt(t)},handled:!1,type:"instrument"}}),t.apply(this,e)}}function tr(t){return function(e){return t.apply(this,[Nn(e,{mechanism:{data:{function:"requestAnimationFrame",handler:Rt(t)},handled:!1,type:"instrument"}})])}}function er(t){return function(...e){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in n&&"function"==typeof n[t]&&j(n,t,(function(e){const n={mechanism:{data:{function:t,handler:Rt(e)},handled:!1,type:"instrument"}},r=R(e);return r&&(n.mechanism.data.handler=Rt(r)),Nn(e,n)}))})),t.apply(this,e)}}function nr(t){const e=Tn,n=e[t]&&e[t].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(j(n,"addEventListener",(function(e){return function(n,r,o){try{"function"==typeof r.handleEvent&&(r.handleEvent=Nn(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:Rt(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return e.apply(this,[n,Nn(r,{mechanism:{data:{function:"addEventListener",handler:Rt(r),target:t},handled:!1,type:"instrument"}}),o])}})),j(n,"removeEventListener",(function(t){return function(e,n,r){const o=n;try{const n=o&&o.__sentry_wrapped__;n&&t.call(this,e,n,r)}catch(t){}return t.call(this,e,o,r)}})))}let rr=null;function or(){rr=s.onerror,s.onerror=function(t,e,n,r,o){return Be("error",{column:r,error:o,line:n,msg:t,url:e}),!(!rr||rr.__SENTRY_LOADER__)&&rr.apply(this,arguments)},s.onerror.__SENTRY_INSTRUMENTED__=!0}let sr=null;function ir(){sr=s.onunhandledrejection,s.onunhandledrejection=function(t){return Be("unhandledrejection",t),!(sr&&!sr.__SENTRY_LOADER__)||sr.apply(this,arguments)},s.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const ar=(t={})=>{const e={onerror:!0,onunhandledrejection:!0,...t};return{name:"GlobalHandlers",setupOnce(){Error.stackTraceLimit=50},setup(t){e.onerror&&(!function(t){!function(t){const e="error";Ue(e,t),qe(e,or)}((e=>{const{stackParser:n,attachStacktrace:r}=ur();if(wt()!==t||Dn())return;const{msg:o,url:s,line:i,column:a,error:c}=e,u=function(t,e,n,r){const o=t.exception=t.exception||{},s=o.values=o.values||[],i=s[0]=s[0]||{},a=i.stacktrace=i.stacktrace||{},c=a.frames=a.frames||[],u=isNaN(parseInt(r,10))?void 0:r,p=isNaN(parseInt(n,10))?void 0:n,l=_(e)&&e.length>0?e:function(){try{return w.document.location.href}catch(t){return""}}();0===c.length&&c.push({colno:u,filename:l,function:Dt,in_app:!0,lineno:p});return t}(wn(n,c||o,void 0,r,!1),s,i,a);u.level="error",De(u,{originalException:c,mechanism:{handled:!1,type:"onerror"}})}))}(t),cr("onerror")),e.onunhandledrejection&&(!function(t){!function(t){const e="unhandledrejection";Ue(e,t),qe(e,ir)}((e=>{const{stackParser:n,attachStacktrace:r}=ur();if(wt()!==t||Dn())return;const o=function(t){if(y(t))return t;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch(t){}return t}(e),s=y(o)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(o)}`}]}}:wn(n,o,void 0,r,!0);s.level="error",De(s,{originalException:o,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t),cr("onunhandledrejection"))}}};function cr(t){gn&&p.log(`Global Handler attached: ${t}`)}function ur(){const t=wt();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const pr=()=>({name:"HttpContext",preprocessEvent(t){if(!Tn.navigator&&!Tn.location&&!Tn.document)return;const e=t.request&&t.request.url||Tn.location&&Tn.location.href,{referrer:n}=Tn.document||{},{userAgent:r}=Tn.navigator||{},o={...t.request&&t.request.headers,...n&&{Referer:n},...r&&{"User-Agent":r}},s={...t.request,...e&&{url:e},headers:o};t.request=s}});function lr(t,e,n=250,r,o,s,i){if(!(s.exception&&s.exception.values&&i&&S(i.originalException,Error)))return;const a=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;var c,u;a&&(s.exception.values=(c=dr(t,e,o,i.originalException,r,s.exception.values,a,0),u=n,c.map((t=>(t.value&&(t.value=$(t.value,u)),t)))))}function dr(t,e,n,r,o,s,i,a){if(s.length>=n+1)return s;let c=[...s];if(S(r[o],Error)){fr(i,a);const s=t(e,r[o]),u=c.length;hr(s,o,u,a),c=dr(t,e,n,r[o],o,[s,...c],s,u)}return Array.isArray(r.errors)&&r.errors.forEach(((r,s)=>{if(S(r,Error)){fr(i,a);const u=t(e,r),p=c.length;hr(u,`errors[${s}]`,p,a),c=dr(t,e,n,r,o,[u,...c],u,p)}})),c}function fr(t,e){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,..."AggregateError"===t.type&&{is_exception_group:!0},exception_id:e}}function hr(t,e,n,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}const mr=(t={})=>{const e=t.limit||5,n=t.key||"cause";return{name:"LinkedErrors",preprocessEvent(t,r,o){const s=o.getOptions();lr(yn,s.stackParser,s.maxValueLength,n,e,t,r)}}};function _r(t,e,n,r){const o={filename:t,function:"<anonymous>"===e?Dt:e,in_app:!0};return void 0!==n&&(o.lineno=n),void 0!==r&&(o.colno=r),o}const gr=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,yr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,vr=/\((\S*)(?::(\d+))(?::(\d+))\)/,br=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Er=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Sr=jt(...[[30,t=>{const e=gr.exec(t);if(e){const[,t,n,r]=e;return _r(t,Dt,+n,+r)}const n=yr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=vr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=xr(n[1]||Dt,n[2]);return _r(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],[50,t=>{const e=br.exec(t);if(e){if(e[3]&&e[3].indexOf(" > eval")>-1){const t=Er.exec(e[3]);t&&(e[1]=e[1]||"eval",e[3]=t[1],e[4]=t[2],e[5]="")}let t=e[3],n=e[1]||Dt;return[n,t]=xr(n,t),_r(t,n,e[4]?+e[4]:void 0,e[5]?+e[5]:void 0)}}]]),xr=(t,e)=>{const n=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return n||r?[-1!==t.indexOf("@")?t.split("@")[0]:Dt,n?`safari-extension:${e}`:`safari-web-extension:${e}`]:[t,e]},wr="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,kr={};function Or(t){const e=kr[t];if(e)return e;let n=Ye[t];if(Ae(n))return kr[t]=n.bind(Ye);const r=Ye.document;if(r&&"function"==typeof r.createElement)try{const e=r.createElement("iframe");e.hidden=!0,r.head.appendChild(e);const o=e.contentWindow;o&&o[t]&&(n=o[t]),r.head.removeChild(e)}catch(e){wr&&p.warn(`Could not create sandbox iframe for ${t} check, bailing to window.${t}: `,e)}return n?kr[t]=n.bind(Ye):n}function Tr(t){kr[t]=void 0}function $r(t){const e=[];function n(t){return e.splice(e.indexOf(t),1)[0]||Promise.resolve(void 0)}return{$:e,add:function(r){if(!(void 0===t||e.length<t))return Jt(new an("Not adding Promise because buffer limit was reached."));const o=r();return-1===e.indexOf(o)&&e.push(o),o.then((()=>n(o))).then(null,(()=>n(o).then(null,(()=>{})))),o},drain:function(t){return new Vt(((n,r)=>{let o=e.length;if(!o)return n(!0);const s=setTimeout((()=>{t&&t>0&&n(!1)}),t);e.forEach((t=>{Wt(t).then((()=>{--o||(clearTimeout(s),n(!0))}),r)}))}))}}}const Dr=6e4;function Nr(t,{statusCode:e,headers:n},r=Date.now()){const o={...t},s=n&&n["x-sentry-rate-limits"],i=n&&n["retry-after"];if(s)for(const t of s.trim().split(",")){const[e,n,,,s]=t.split(":",5),i=parseInt(e,10),a=1e3*(isNaN(i)?60:i);if(n)for(const t of n.split(";"))"metric_bucket"===t&&s&&!s.split(";").includes("custom")||(o[t]=r+a);else o.all=r+a}else i?o.all=r+function(t,e=Date.now()){const n=parseInt(`${t}`,10);if(!isNaN(n))return 1e3*n;const r=Date.parse(`${t}`);return isNaN(r)?Dr:r-e}(i,r):429===e&&(o.all=r+6e4);return o}const Ir=64;function jr(t,e,n=$r(t.bufferSize||Ir)){let r={};return{send:function(o){const s=[];if(Ze(o,((e,n)=>{const o=on(n);if(function(t,e,n=Date.now()){return function(t,e){return t[e]||t.all||0}(t,e)>n}(r,o)){const r=Cr(e,n);t.recordDroppedEvent("ratelimit_backoff",o,r)}else s.push(e)})),0===s.length)return Wt({});const i=Xe(o[0],s),a=e=>{Ze(i,((n,r)=>{const o=Cr(n,r);t.recordDroppedEvent(e,on(r),o)}))};return n.add((()=>e({body:en(i)}).then((t=>(void 0!==t.statusCode&&(t.statusCode<200||t.statusCode>=300)&&J&&p.warn(`Sentry responded with status code ${t.statusCode} to sent event.`),r=Nr(r,t),t)),(t=>{throw a("network_error"),t})))).then((t=>t),(t=>{if(t instanceof an)return J&&p.error("Skipped sending event because buffer is full."),a("queue_overflow"),Wt({});throw t}))},flush:t=>n.drain(t)}}function Cr(t,e){if("event"===e||"transaction"===e)return Array.isArray(t)?t[1]:void 0}function Pr(t,e=Or("fetch")){let n=0,r=0;return jr(t,(function(o){const s=o.body.length;n+=s,r++;const i={body:o.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:n<=6e4&&r<15,...t.fetchOptions};if(!e)return Tr("fetch"),Jt("No fetch implementation available");try{return e(t.url,i).then((t=>(n-=s,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return Tr("fetch"),n-=s,r--,Jt(t)}}))}function Rr(t,e){$e(t)}!function(t={}){const e=function(t={}){return{defaultIntegrations:[tt(),Tt(),Qn(),Kn(),ar(),mr(),Lt(),pr()],release:"string"==typeof __SENTRY_RELEASE__?__SENTRY_RELEASE__:Tn.SENTRY_RELEASE&&Tn.SENTRY_RELEASE.id?Tn.SENTRY_RELEASE.id:void 0,autoSessionTracking:!0,sendClientReports:!0,...t}}(t);if(function(){const t=Tn,e=t[t.chrome?"chrome":"browser"],n=e&&e.runtime&&e.runtime.id,r=Tn.location&&Tn.location.href||"",o=!!n&&Tn===Tn.top&&["chrome-extension:","moz-extension:","ms-browser-extension:"].some((t=>r.startsWith(`${t}//`))),s=void 0!==t.nw;return!!n&&!o&&!s}())return void u((()=>{console.error("[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}));gn&&(Re()||p.warn("No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill."));const n={...e,stackParser:(r=e.stackParser||Sr,Array.isArray(r)?jt(...r):r),integrations:K(e),transport:e.transport||Pr};var r;const o=Bt(In,n);e.autoSessionTracking&&function(){if(void 0===Tn.document)return void(gn&&p.warn("Session tracking in non-browser environment with @sentry/browser is not supported."));Ne({ignoreDuration:!0}),Ce(),Ge((({from:t,to:e})=>{void 0!==t&&t!==e&&(Ne({ignoreDuration:!0}),Ce())}))}()}({dsn:"https://2ce89e78d56909fc19d7a6fa245ed243@o4506705197662208.ingest.us.sentry.io/4507379309477888",environment:document.head.querySelector('[property="env"]').content,allowUrls:[/.*freeagent.com|.*deploy-preview-\d*--freeagent-website\.netlify\.app|.*staging-website[12].fa-app-int.com/],attachStacktrace:!1})},2733:function(t){t.exports=function(){"use strict";function t(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function e(n,r){function o(e,o,s){if("undefined"!=typeof document){"number"==typeof(s=t({},r,s)).expires&&(s.expires=new Date(Date.now()+864e5*s.expires)),s.expires&&(s.expires=s.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var a in s)s[a]&&(i+="; "+a,!0!==s[a]&&(i+="="+s[a].split(";")[0]));return document.cookie=e+"="+n.write(o,e)+i}}function s(t){if("undefined"!=typeof document&&(!arguments.length||t)){for(var e=document.cookie?document.cookie.split("; "):[],r={},o=0;o<e.length;o++){var s=e[o].split("="),i=s.slice(1).join("=");try{var a=decodeURIComponent(s[0]);if(r[a]=n.read(i,a),t===a)break}catch(t){}}return t?r[t]:r}}return Object.create({set:o,get:s,remove:function(e,n){o(e,"",t({},n,{expires:-1}))},withAttributes:function(n){return e(this.converter,t({},this.attributes,n))},withConverter:function(n){return e(t({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(r)},converter:{value:Object.freeze(n)}})}return e({read:function(t){return'"'===t[0]&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(t){return encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var s=e[r]={exports:{}};return t[r].call(s.exports,s,s.exports,n),s.exports}n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r,o=n(2733),s=n(354);try{r=o.get("location")}catch(t){s.reportError("Unable to read location cookie. Error: "+t)}dataLayer.push({locale:{GB:"en-GB",US:"en-US",EN:"en"}[r]});var i=function(t){switch(t){case"":return"home";case"hc":return"support";case"features":return"tour";default:return t}}(window.location.pathname.split("/")[1]);-1!==["support","guides","pricing","tour","accountants","home"].indexOf(i)&&dataLayer.push({page_type:i})}();</script> <script type=text/plain class="optanon-category-C0009">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-K8WSGS');</script> <script type=text/plain class="optanon-category-C0004">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-T8TM9K8');</script> <script type="application/ld+json">{ "@context": "https://schema.org", "@type": "Organization", "name": "FreeAgent", "url": "https://www.freeagent.com/", "logo": "https://freeagent-res.cloudinary.com/image/upload/v1680514225/website-images/brand/open-graph/social-mark.png", "sameAs": [ "https://www.facebook.com/freeagentapp", "https://www.twitter.com/freeagent", "https://www.linkedin.com/company/freeagent/", "https://www.instagram.com/freeagentapp/", "https://en.wikipedia.org/wiki/FreeAgent", "https://beta.companieshouse.gov.uk/company/SC316774" ], "address": [ { "@type": "PostalAddress", "addressCountry": "UK", "addressRegion": "Scotland", "addressLocality": "Edinburgh", "postalCode": "EH3 9QG", "streetAddress": "One Edinburgh Quay, 133 Fountainbridge" } ], "contactPoint": [ { "@type": "ContactPoint", "telephone": "+44 800 288 8691", "contactType": "customer support", "areaServed": "GB", "contactOption": "TollFree" } ], "award": [ "2024 UK Customer Experience Awards - SME, Silver for Customers at the Heart of Everything", "2024, 2023, 2022, 2020 and 2019 ICB Luca Awards, Friendliest Software of the Year", "2024 Contracting Awards, Best Contractor Accounting Software", "2021 and 2020 AccountingWEB Software Awards, SME Accounting / Bookkeeping Software" ], "founder": "Ed Molyneux", "foundingDate": "2007-02-19", "foundingLocation": "Edinburgh", "alternateName": "FreeAgent Central Ltd", "legalName": "FreeAgent Central Ltd", "description": "Accounting software for businesses in the UK.", "potentialAction": [ { "@type": "Action", "name": "Try FreeAgent", "target": "https://signup.freeagent.com/signup" } ] }</script> <script type="application/ld+json">{ "@context": "https://schema.org", "@type": "WebSite", "name": "FreeAgent", "url": "https://www.freeagent.com/", "keywords": "accounting software, cloud accounting, business finances, small business tools, accountants, bookkeeping, freelancers, sole traders, limited companies, invoicing, expenses, tax" }</script> <script type="application/ld+json">{ "@context": "https://schema.org", "@type": "WebPage", "name": "Accounting software you'll love - FreeAgent", "url": "https://www.freeagent.com/", "description": "Nail the daily admin, take care of tax and file directly to HMRC. Nine out of 10 customers say FreeAgent has made them more confident about their business finances.", "about": [ { "@type": "Thing", "name": "FreeAgent", "sameAs": "https://en.wikipedia.org/wiki/FreeAgent" }, { "@type": "Thing", "name": "Accounting software", "sameAs": "https://en.wikipedia.org/wiki/Accounting_software" } ], "mentions": [ { "@type": "Thing", "name": "FreeAgent", "sameAs": "https://en.wikipedia.org/wiki/FreeAgent" }, { "@type": "Thing", "name": "Accounting software", "sameAs": "https://en.wikipedia.org/wiki/Accounting_software" }, { "@type": "Thing", "name": "Businesses", "sameAs": "https://en.wikipedia.org/wiki/Business" }, { "@type": "Thing", "name": "Accountants", "sameAs": "https://en.wikipedia.org/wiki/Accountant" } ], "isPartOf": { "@type": "WebSite", "name": "FreeAgent", "url": "https://www.freeagent.com/", "publisher": { "@type": "Organization", "name": "FreeAgent", "url": "https://www.freeagent.com/", "sameAs": [ "https://en.wikipedia.org/wiki/FreeAgent" ] } } }</script> <meta itemprop="name" content="Easy-to-use accounting software for UK small businesses"/> <meta property="og:title" content="Easy-to-use accounting software for UK small businesses"/> <meta name="twitter:title" content="Easy-to-use accounting software for UK small businesses"/> <meta itemprop="description" content="Nail the daily admin, take care of tax and file directly to HMRC. Nine out of 10 customers say FreeAgent has made them more confident about their business finances."/> <meta property="og:description" content="Nail the daily admin, take care of tax and file directly to HMRC. Nine out of 10 customers say FreeAgent has made them more confident about their business finances."/> <meta name="twitter:description" content="Nail the daily admin, take care of tax and file directly to HMRC. Nine out of 10 customers say FreeAgent has made them more confident about their business finances."/> <meta itemprop="image" content="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1200/dpr_auto,f_auto/website-images/brand/open-graph/social-mark.png"/> <meta property="og:image" content="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1200/dpr_auto,f_auto/website-images/brand/open-graph/social-mark.png"/> <meta name="twitter:image:src" content="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1200/dpr_auto,f_auto/website-images/brand/open-graph/social-mark.png"/> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@freeagent"> <meta name="twitter:creator" content="@freeagent"> <meta property="og:type" content="article"/> <meta property="og:site_name" content="FreeAgent"/> <meta property="article:section" content="FreeAgent"/> <meta property="article:tag" content="Article"> <meta property="fb:app_id" content="777450285677048"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Accounting software you'll love - FreeAgent</title> <link rel="canonical" href="https://www.freeagent.com/"/> <meta name="description" content="Nail the daily admin, take care of tax and file directly to HMRC. Nine out of 10 customers say FreeAgent has made them more confident about their business finances."/> <meta name='zd-site-verification' content='em46kbbockhagszlveow76'/> <meta name="google-site-verification" content="Rli15xZhytimgGOFWG10bYkvmiL179Fkf2XhUd8Iizw"/> <meta name="google-site-verification" content="InsC4ibQyOgYQp24GYrQ6kdkWz4eXAQD7ylDQOeq4UY"/> <link rel="alternate" hreflang="en-GB" href="https://www.freeagent.com/"/> <link rel="alternate" hreflang="en-US" href="https://www.freeagent.com/us/"/> <link rel="alternate" hreflang="en" href="https://www.freeagent.com/en/"/> <link rel="alternate" hreflang="x-default" href="https://www.freeagent.com/"/> <link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="any"> <link rel="icon" href="/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="/apple-touch-icon.png"> <link rel="manifest" href="/manifest.webmanifest" crossorigin="use-credentials"> <link rel="publisher" href="https://plus.google.com/109033797595158662694"> <link rel="alternate" type="application/rss+xml" title="FreeAgent Blog Feed" href="https://www.freeagent.com/feed.rss"> <link href="/components/stylesheets/main-7f7d53c7.css" rel="stylesheet"/> <link href="/components/stylesheets/pages/homepage-f11a124f.css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'"/> <noscript><link href="/components/stylesheets/pages/homepage-f11a124f.css" rel="stylesheet"/></noscript> <script src="/components/javascript/ios_check-cc1d8046.js" defer="defer"></script> <script src="/components/javascript/main-84643c75.js" defer="defer"></script> <script src="/components/javascript/referral_code-17c89953.js" type="text/plain" class="optanon-category-C0003" defer="defer"></script> <link rel="preload" href="/components/fonts/source-sans-pro/source-sans-pro-v13-latin-700-bd2de9c0.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/components/fonts/source-sans-pro/source-sans-pro-v13-latin-300-ff430aa2.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/components/fonts/source-sans-pro/source-sans-pro-v13-latin-regular-d2e2faa9.woff2" as="font" type="font/woff2" crossorigin> <link href="https://res.cloudinary.com" rel="preconnect"> <link href="https://www.googletagmanager.com" rel="preconnect"> <link href="https://www.google-analytics.com" rel="preconnect"> <link href="https://ssl.google-analytics.com" rel="preconnect"> <link rel="preconnect" href="https://dev.visualwebsiteoptimizer.com"/> <script id='vwoCode'> /** * OneTrust-specific code * OptanonWrapper function that runs any time there is a change to consent via OneTrust */ function OptanonWrapper() { let hasConsent = OnetrustActiveGroups.indexOf('C0002') !== -1; if(hasConsent) { window._vwo_code || (function() { var account_id=744269, version=2.0, settings_tolerance=2000, hide_element='body', hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important', /* DO NOT EDIT BELOW THIS LINE */ f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(){if(!f){f=true;var e=d.getElementById('_vis_opt_path_hides');if(e)e.parentNode.removeChild(e)}},finished:function(){return f},load:function(e){var t=this.getSettings(),n=d.createElement('script'),i=this;if(t){n.textContent=t;d.getElementsByTagName('head')[0].appendChild(n);if(!w.VWO||VWO.caE){stT.removeItem(cK);i.load(e)}}else{n.fetchPriority='high';n.src=e;n.type='text/javascript';n.onerror=function(){_vwo_code.finish()};d.getElementsByTagName('head')[0].appendChild(n)}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t=d.currentScript,n=d.createElement('style'),i=this.hide_element(),r=t&&!t.async&&i?i+this.hide_element_style():'',c=d.getElementsByTagName('head')[0];n.setAttribute('id','_vis_opt_path_hides');v&&n.setAttribute('nonce',v.nonce);n.setAttribute('type','text/css');if(n.styleSheet)n.styleSheet.cssText=r;else n.appendChild(d.createTextNode(r));c.appendChild(n);this.load('https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&vn='+version)}};w._vwo_code=code;code.init();})(); } } </script> <link href="https://www.googleadservices.com" rel="preconnect"> <link href="https://adservice.google.com" rel="preconnect"> <link href="https://adservice.google.co.uk" rel="preconnect"> <link href="https://www.google.com" rel="preconnect"> <link href="https://www.google.co.uk" rel="preconnect"> <link href="https://8046254.fls.doubleclick.net" rel="preconnect"> <link href="https://googleads.g.doubleclick.net" rel="preconnect"> <link href="https://stats.g.doubleclick.net" rel="preconnect"> <link href="https://snap.licdn.com" rel="preconnect"> <link href="https://px.ads.linkedin.com" rel="preconnect"> <link href="https://www.linkedin.com" rel="preconnect"> <link href="https://p.adsymptotic.com" rel="preconnect"> </head> <body> <img src="https://freeagent-res.cloudinary.com/image/upload/website-images/1pixel_transparent.png" style="display:none" alt> <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-K8WSGS" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T8TM9K8" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <dialog aria-describedby="dialog-description" aria-labelledby="dialog-title" class="dialog" data-dialog-escape="false" data-dialog-id="location" data-dialog-trap="true" data_vr="location-dialog"> <h2 class="text-preset-4 font-weight--medium margin-bottom--x-small" id="dialog-title">You are currently viewing our <span data-location>[Locale]</span> site</h2> <p class="text-preset-5 line-length--medium margin-bottom--small" id="dialog-description">For information more relevant to your location, select a region from the drop down and press continue.</p> <form class="flex flex-direction--column md-flex-direction--row gap--x-small" method="dialog"> <select class="fe-form-select" data-select="location" name="LocationNotification-select" required> <option disabled selected value="">Select your location...</option> <option value="GB">United Kingdom</option> <option value="US">United States</option> <option value="EN">Global</option> </select> <button class="Button Button--disabled" data-modal-dismiss disabled>Continue</button> </form> </dialog> <a class="fw-skip-link" href="#content">Skip to main content</a> <header class="header header--primary header--sticky" data-t-header=""><div class="header__content"> <a href="/" class="logo color--white" data-t-logo="" aria-label="FreeAgent homepage" style=""> <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 168 40" focusable="false" height="40" width="168"> <title>FreeAgent logo</title> <g fill="currentColor"> <path d="M114.7,17.8c-1.1-1.6-2.9-2.6-5.1-2.6-4.6,0-8.7,4.5-8.6,9.8,0,4.3,2.9,7.7,6.7,7.7s4-1.1,5.1-2.5l-.2,1.4c-.4,2.8-2.4,4-5.1,4s-4.4-.9-6.2-2.8l-.6,4.6c1.8,1.6,4.6,2.4,7.1,2.4,4.9,0,9-2.5,9.8-8.6l1.4-10.4c.3-1.9.6-3.7,1.2-5.3h-2.7c-1.2,0-2.4,1-2.7,2.2ZM109.4,28.7c-1.9,0-3.4-1.7-3.4-3.9,0-2.7,1.9-5.2,4.4-5.2s3.4,1.8,3.5,3.9c0,2.5-1.9,5.2-4.5,5.2Z"/> <path d="M60.8,20.5c0-3.2-2.6-5.2-6.5-5.2-6,0-9.5,4.7-9.5,9.6s3.2,8,8.4,8,4.4-.4,6.4-1.2l.6-4.4c-1.6.9-3.8,1.6-6.3,1.6s-4-1.2-4.2-2.9c.8,0,1.7.2,2.6.2,4,0,8.3-1.1,8.3-5.7ZM50,22.8c.4-2.2,2.2-3.9,4-3.9s1.9.5,1.9,1.5c0,1.9-2.8,2.7-6,2.4Z"/> <path d="M66.8,26c.8,0,1.7.2,2.6.2,4,0,8.3-1.1,8.3-5.7s-2.6-5.2-6.5-5.2c-6,0-9.5,4.7-9.5,9.6s3.2,8,8.4,8,4.4-.4,6.4-1.2l.6-4.4c-1.6.9-3.8,1.6-6.3,1.6-2.7,0-4-1.2-4.2-2.9ZM71,18.9c1.2,0,1.9.5,1.9,1.5,0,1.9-2.8,2.7-6,2.4.4-2.2,2.2-3.9,4-3.9Z"/> <path d="M136.3,20.5c0-3.2-2.6-5.2-6.5-5.2-6,0-9.5,4.7-9.5,9.6s3.2,8,8.4,8,4.4-.4,6.4-1.2l.6-4.4c-1.6.9-3.8,1.6-6.3,1.6s-4-1.2-4.2-2.9c.8,0,1.7.2,2.6.2,4,0,8.3-1.1,8.3-5.7ZM125.5,22.8c.4-2.2,2.2-3.9,4-3.9s1.9.5,1.9,1.5c0,1.9-2.8,2.7-6,2.4Z"/> <path d="M148.7,15.2c-2.3,0-4.1,1-5.3,2.7,0-1.2-1-2.3-2.2-2.3h-2.4c.3,1.6,0,3.6-.1,5.3l-1.5,11.5h4.9l1.3-9.7c.2-1.8,1.4-3.2,3.3-3.2s2.5,1.6,2.3,3l-1.3,9.9h4.9l1.5-11.1c.5-3.8-1.9-6.1-5.2-6.1Z"/> <path d="M162.6,19.6h1.5c2.6,0,4-1.6,4-4h-4.9l.7-5h-4.3l-.4,2.6c-.3,2.1-1.7,2.7-3.2,2.7l-.5,3.7h2.4l-.9,6.4c-.5,3.6,1,6.8,6,6.8s2.6-.2,3.3-.5l.6-4.2c-.8.2-1.8.4-2.5.4-2,0-2.8-1-2.5-3l.8-6Z"/> <path d="M25.3,20.1l.8-5.8h5.1c2.6,0,4.8-1.1,4.7-4.5h-14.1l-3,22.7h5l1.1-8.1h4.1c2.8,0,4.3-1.7,4.2-4.2h-7.7Z"/> <path d="M45.6,15.4c-.4-.1-.9-.2-1.3-.2-1.5,0-3.4.7-4.8,2.7,0-1.2-1-2.3-2.2-2.3h-2.4c.3,1.6,0,3.6-.1,5.3l-1.5,11.5h4.9l1.1-8.3c.4-3.2,2.2-4.4,4.4-4.4s1,0,1.4.2l.6-4.5Z"/> <path d="M98.1,22.1l-2.9-12.3h-5.8l-11.8,22.7h5.4l2.4-4.7h4.7c1.8,0,3.3-1,3.9-2.5l1.5,7.2h5.6c-1-1.8-1.7-5.1-3-10.3ZM87.5,23.5l4.3-8.6,1.8,8.6h-6.1Z"/> <path d="M8,8.2h4.2c3.6,0,5.9,1.4,7.2,3.4.1-2.6-1.3-4.5-4.3-5.9l-7.2-3.3c-1.6-.7-2.9-1.6-3.2-2.4-1.6,2.2-1,6.1,3.4,8.2Z"/> <path d="M12.1,9.8H3.9c-1.6,0-3.3-.2-3.9-.8-.5,2.6,1.2,5.6,6.2,5.6h5.4c2.3,0,3.7.9,4,2-.6-.3-2-.4-3.4-.4h-5.8c.8,2.5,2.7,4,5.8,4h3.2c1.7,0,2.7.2,3.3.8,1.5-7.1-.8-11.1-6.5-11.1Z"/> </g> </svg> </a> <nav class="nav nav--small" aria-label="Primary Navigation" data-navigation=""> <div class="menu-wrapper--relative "> <button class="menu-button nav-item" aria-controls="menu" data-event-action="clickMenu" data-event-category="mainNavigation" data-menu-button=""> Menu <span class="icon icon--px-10 color--white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </button> <div class="menu menu-anchor menu-anchor--right fade-in animation-duration--200ms padding--none" id="menu" data-menu=""><div class="menu-layout menu-layout--block"> <div class="padding--px-16"> <details class="fe-accordion"><summary class="fe-accordion__summary" data-event-action="clickFeatures" data-event-category="mainNavigation"> Features <span class="fe-accordion__marker"> <span class="icon icon--px-10 color--black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </span></summary><div class="fe-accordion__content"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Meet FreeAgent</h2> <ul class="menu-list"> <li> <a href="/features/accounting-software/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Overview" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Overview</a> </li> <li> <a href="/features/dashboard/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Dashboard" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Dashboard</a> </li> <li> <a href="/features/radar/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Business insights from Radar" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Business insights from Radar</a> </li> <li> <a href="/features/mobile/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Mobile apps" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Mobile apps</a> </li> <li> <a href="/features/security/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Security" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Security</a> </li> <li> <a href="/features/competitors/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="FreeAgent vs competitors" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent vs competitors</a> </li> <li> <a href="/features/switch-to-freeagent/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Switch to FreeAgent?" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Switch to FreeAgent?</a> </li> <li> <a href="/features/customer-stories/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Customer stories" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Customer stories</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Nail your admin</h2> <ul class="menu-list"> <li> <a href="/features/estimates/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Estimates" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Estimates</a> </li> <li> <a href="/features/invoicing/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Invoicing" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Invoicing</a> </li> <li> <a href="/features/expenses/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Expenses" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Expenses</a> </li> <li> <a href="/features/banking/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Banking" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Banking</a> </li> <li> <a href="/features/cashflow/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Cashflow" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Cashflow</a> </li> <li> <a href="/features/projects/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Projects" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Projects</a> </li> <li> <a href="/features/time-tracking/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Time tracking" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Time tracking</a> </li> <li> <a href="/features/payroll/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Payroll" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Payroll</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Relax about tax</h2> <ul class="menu-list"> <li> <a href="/features/accounting/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Accounting" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Accounting</a> </li> <li> <a href="/features/vat/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="VAT" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">VAT</a> </li> <li> <a href="/features/self-assessment/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Self Assessment" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Self Assessment</a> </li> <li> <a href="/features/end-of-year/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="End of year filing" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">End of year filing</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Get connected</h2> <ul class="menu-list"> <li> <a href="/features/amazon-seller/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Amazon" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Amazon</a> </li> <li> <a href="/features/taking-payments/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Taking payments" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Taking payments</a> </li> <li> <a href="/features/small-business-insurance/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Small business insurance" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Small business insurance</a> </li> <li> <a href="/features/copilot/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Find a CoPilot accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find a CoPilot accountant</a> </li> <li> <a href="/integrations/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="App integrations" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">App integrations</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Manage your property</h2> <ul class="menu-list"> <li> <a href="/features/property/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="FreeAgent for Landlords" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent for Landlords</a> </li> </ul> </div> </div> </div></details> <details class="fe-accordion"><summary class="fe-accordion__summary" data-event-action="clickPricing" data-event-category="mainNavigation"> Pricing <span class="fe-accordion__marker"> <span class="icon icon--px-10 color--black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </span></summary><div class="fe-accordion__content"> <div class="menu-group"> <div class="menu-category"> <ul class="menu-list"> <li> <a href="/pricing/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Pricing" data-event-label="Pricing plans" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Pricing plans</a> </li> <li> <a href="/pricing/free-accounting-software/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Pricing" data-event-label="Get FreeAgent for free" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Get FreeAgent for free</a> </li> </ul> </div> </div> </div></details> <details class="fe-accordion"><summary class="fe-accordion__summary" data-event-action="clickFeatures" data-event-category="mainNavigation"> Accountants <span class="fe-accordion__marker"> <span class="icon icon--px-10 color--black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </span></summary><div class="fe-accordion__content"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Accountants & bookkeepers</h2> <ul class="menu-list"> <li> <a href="/accountants/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="FreeAgent for accountants" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent for accountants</a> </li> <li> <a href="/accountants/who-is-freeagent-for/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Who's FreeAgent for?" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Who's FreeAgent for?</a> </li> <li> <a href="/accountants/partner-programme/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Partner Programme" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Partner Programme</a> </li> <li> <a href="/accountants/partner-stories/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Partner stories" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Partner stories</a> </li> <li> <a href="/accountants/freelancer-accountants/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Freelancer accountants" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Freelancer accountants</a> </li> <li> <a href="/accountants/#request-trial" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Try FreeAgent for free" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Try FreeAgent for free</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Resources</h2> <ul class="menu-list"> <li> <a href="/accountants/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/accountants/resources/#guides-for-you-and-your-clients" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Guides for you and your clients" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for you and your clients</a> </li> <li> <a href="/accountants/resources/#webinars-and-videos" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Webinar recordings and videos" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Webinar recordings and videos</a> </li> <li> <a href="/find-an-accountant/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Find an accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find an accountant</a> </li> <li> <a href="/accountants/first-steps-for-partners/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="First steps for partners" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">First steps for partners</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Latest news</h2> <ul class="menu-list"> <li> <a href="/blog/category/accountants-bookkeepers/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Blog" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Blog</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Making Tax Digital</h2> <ul class="menu-list"> <li> <a href="/accountants/making-tax-digital/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="MTD information hub" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">MTD information hub</a> </li> <li> <a href="/accountants/mtd-consultation/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Free consultation" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Free consultation</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Partner logins</h2> <ul class="menu-list"> <li> <a href="/practice-portal/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Practice Portal" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Practice Portal</a> </li> <li> <a href="https://login.freeagent.com/login" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Practice Dashboard" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Practice Dashboard</a> </li> </ul> </div> </div> </div></details> <details class="fe-accordion"><summary class="fe-accordion__summary" data-event-action="clickResources" data-event-category="mainNavigation"> Resources <span class="fe-accordion__marker"> <span class="icon icon--px-10 color--black"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </span></summary><div class="fe-accordion__content"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Product help & support</h2> <ul class="menu-list"> <li> <a href="https://support.freeagent.com/hc/en-gb" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Knowledge Base" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Knowledge Base</a> </li> <li> <a href="https://support.freeagent.com/hc/en-gb/p/getting-started/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Getting started with FreeAgent" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Getting started with FreeAgent</a> </li> <li> <a href="/company/contact-us/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Contact us" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Contact us</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Latest news</h2> <ul class="menu-list"> <li> <a href="/blog/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Blog" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Blog</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Small business resources</h2> <ul class="menu-list"> <li> <a href="/guides/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Guides for running your business" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for running your business</a> </li> <li> <a href="/small-businesses/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/glossary/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Accounting glossary" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Accounting glossary</a> </li> <li> <a href="/rates/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="UK tax rates" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">UK tax rates</a> </li> <li> <a href="/apps/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Interactive tools" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Interactive tools</a> </li> <li> <a href="/find-an-accountant/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Find an accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find an accountant</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Accountant & bookkeeper resources</h2> <ul class="menu-list"> <li> <a href="/accountants/resources/#guides-for-you-and-your-clients" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Guides for you and your clients" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for you and your clients</a> </li> <li> <a href="/accountants/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/accountants/resources/#webinars-and-videos" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Webinar recordings and videos" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Webinar recordings and videos</a> </li> <li> <a href="/accountants/first-steps-for-partners/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="First steps for partners" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">First steps for partners</a> </li> </ul> </div> </div> </div></details> </div> <div class="auto-grid background-color--grey-20 column-count--2 gap--px-8 padding--px-16"> <a href="https://login.freeagent.com/login" class="Button Button--outline Button--small fill-inline gtm-tracked-link" data-event-category="Login" data-event-action="clickedNavButton" data-event-label="/onetrust/cookie-jar/" data-event-value="" data-event-name="Log-in CTA" data-cd-index="1" data-cm-index="17">Login</a> <a href="https://signup.freeagent.com/signup" class="Button Button--primary Button--small gtm-tracked-link" data-event-category="Trial Signup CTA" data-event-action="stickyHeader" data-event-label="Try FreeAgent" data-event-value="" data-event-name="Trial Signup CTA" data-cd-index="1" data-cm-index="5">Try FreeAgent</a> </div> </div></div> </div> </nav> <nav class="nav nav--large" aria-label="Primary Navigation" data-navigation=""> <div class="menu-wrapper--static "> <button class="menu-button nav-item" aria-controls="features" data-event-action="clickFeatures" data-event-category="mainNavigation" data-menu-button=""> Features <span class="icon icon--px-10 color--white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </button> <div class="menu menu-anchor menu-anchor--stretch fade-in animation-duration--200ms" id="features" data-menu=""><div class="menu-layout menu-layout--grid"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Meet FreeAgent</h2> <ul class="menu-list"> <li> <a href="/features/accounting-software/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Overview" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Overview</a> </li> <li> <a href="/features/dashboard/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Dashboard" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Dashboard</a> </li> <li> <a href="/features/radar/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Business insights from Radar" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Business insights from Radar</a> </li> <li> <a href="/features/mobile/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Mobile apps" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Mobile apps</a> </li> <li> <a href="/features/security/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Security" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Security</a> </li> <li> <a href="/features/competitors/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="FreeAgent vs competitors" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent vs competitors</a> </li> <li> <a href="/features/switch-to-freeagent/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Switch to FreeAgent?" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Switch to FreeAgent?</a> </li> <li> <a href="/features/customer-stories/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Customer stories" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Customer stories</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Nail your admin</h2> <ul class="menu-list"> <li> <a href="/features/estimates/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Estimates" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Estimates</a> </li> <li> <a href="/features/invoicing/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Invoicing" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Invoicing</a> </li> <li> <a href="/features/expenses/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Expenses" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Expenses</a> </li> <li> <a href="/features/banking/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Banking" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Banking</a> </li> <li> <a href="/features/cashflow/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Cashflow" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Cashflow</a> </li> <li> <a href="/features/projects/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Projects" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Projects</a> </li> <li> <a href="/features/time-tracking/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Time tracking" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Time tracking</a> </li> <li> <a href="/features/payroll/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Payroll" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Payroll</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Relax about tax</h2> <ul class="menu-list"> <li> <a href="/features/accounting/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Accounting" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Accounting</a> </li> <li> <a href="/features/vat/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="VAT" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">VAT</a> </li> <li> <a href="/features/self-assessment/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Self Assessment" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Self Assessment</a> </li> <li> <a href="/features/end-of-year/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="End of year filing" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">End of year filing</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Get connected</h2> <ul class="menu-list"> <li> <a href="/features/amazon-seller/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Amazon" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Amazon</a> </li> <li> <a href="/features/taking-payments/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Taking payments" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Taking payments</a> </li> <li> <a href="/features/small-business-insurance/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Small business insurance" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Small business insurance</a> </li> <li> <a href="/features/copilot/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="Find a CoPilot accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find a CoPilot accountant</a> </li> <li> <a href="/integrations/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="App integrations" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">App integrations</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Manage your property</h2> <ul class="menu-list"> <li> <a href="/features/property/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Features" data-event-label="FreeAgent for Landlords" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent for Landlords</a> </li> </ul> </div> </div> </div></div> </div> <div class="menu-wrapper--relative "> <button class="menu-button nav-item" aria-controls="pricing" data-event-action="clickPricing" data-event-category="mainNavigation" data-menu-button=""> Pricing <span class="icon icon--px-10 color--white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </button> <div class="menu menu-anchor menu-anchor--center fade-in animation-duration--200ms" id="pricing" data-menu=""><div class="menu-layout menu-layout--block"> <div class="menu-group"> <div class="menu-category"> <ul class="menu-list"> <li> <a href="/pricing/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Pricing" data-event-label="Pricing plans" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Pricing plans</a> </li> <li> <a href="/pricing/free-accounting-software/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Pricing" data-event-label="Get FreeAgent for free" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Get FreeAgent for free</a> </li> </ul> </div> </div> </div></div> </div> <div class="menu-wrapper--static "> <button class="menu-button nav-item" aria-controls="accountants" data-event-action="clickAccountants" data-event-category="mainNavigation" data-menu-button=""> Accountants <span class="icon icon--px-10 color--white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </button> <div class="menu menu-anchor menu-anchor--stretch fade-in animation-duration--200ms" id="accountants" data-menu=""><div class="menu-layout menu-layout--grid"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Accountants & bookkeepers</h2> <ul class="menu-list"> <li> <a href="/accountants/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="FreeAgent for accountants" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent for accountants</a> </li> <li> <a href="/accountants/who-is-freeagent-for/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Who's FreeAgent for?" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Who's FreeAgent for?</a> </li> <li> <a href="/accountants/partner-programme/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Partner Programme" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Partner Programme</a> </li> <li> <a href="/accountants/partner-stories/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Partner stories" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Partner stories</a> </li> <li> <a href="/accountants/freelancer-accountants/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Freelancer accountants" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Freelancer accountants</a> </li> <li> <a href="/accountants/#request-trial" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Try FreeAgent for free" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Try FreeAgent for free</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Resources</h2> <ul class="menu-list"> <li> <a href="/accountants/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/accountants/resources/#guides-for-you-and-your-clients" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Guides for you and your clients" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for you and your clients</a> </li> <li> <a href="/accountants/resources/#webinars-and-videos" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Webinar recordings and videos" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Webinar recordings and videos</a> </li> <li> <a href="/find-an-accountant/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Find an accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find an accountant</a> </li> <li> <a href="/accountants/first-steps-for-partners/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="First steps for partners" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">First steps for partners</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Latest news</h2> <ul class="menu-list"> <li> <a href="/blog/category/accountants-bookkeepers/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Blog" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Blog</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Making Tax Digital</h2> <ul class="menu-list"> <li> <a href="/accountants/making-tax-digital/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="MTD information hub" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">MTD information hub</a> </li> <li> <a href="/accountants/mtd-consultation/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Free consultation" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Free consultation</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Partner logins</h2> <ul class="menu-list"> <li> <a href="/practice-portal/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Practice Portal" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Practice Portal</a> </li> <li> <a href="https://login.freeagent.com/login" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Accountants" data-event-label="Practice Dashboard" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Practice Dashboard</a> </li> </ul> </div> </div> </div></div> </div> <div class="menu-wrapper--static "> <button class="menu-button nav-item" aria-controls="resources" data-event-action="clickResources" data-event-category="mainNavigation" data-menu-button=""> Resources <span class="icon icon--px-10 color--white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" focusable="false" height="10" width="10"> <path d="M8.3,2.3c0.4-0.4,1-0.4,1.4,0c0.4,0.4,0.4,1,0,1.4l-4,4c-0.4,0.4-1,0.4-1.4,0l-4-4c-0.4-0.4-0.4-1,0-1.4c0.4-0.4,1-0.4,1.4,0L5,5.6L8.3,2.3z"/> </svg> </span> </button> <div class="menu menu-anchor menu-anchor--stretch fade-in animation-duration--200ms" id="resources" data-menu=""><div class="menu-layout menu-layout--grid"> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Product help & support</h2> <ul class="menu-list"> <li> <a href="https://support.freeagent.com/hc/en-gb" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Knowledge Base" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Knowledge Base</a> </li> <li> <a href="https://support.freeagent.com/hc/en-gb/p/getting-started/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Getting started with FreeAgent" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Getting started with FreeAgent</a> </li> <li> <a href="/company/contact-us/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Contact us" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Contact us</a> </li> </ul> </div> <div class="menu-category"> <h2 class="menu-label">Latest news</h2> <ul class="menu-list"> <li> <a href="/blog/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Blog" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Blog</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Small business resources</h2> <ul class="menu-list"> <li> <a href="/guides/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Guides for running your business" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for running your business</a> </li> <li> <a href="/small-businesses/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/glossary/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Accounting glossary" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Accounting glossary</a> </li> <li> <a href="/rates/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="UK tax rates" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">UK tax rates</a> </li> <li> <a href="/apps/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Interactive tools" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Interactive tools</a> </li> <li> <a href="/find-an-accountant/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Find an accountant" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Find an accountant</a> </li> </ul> </div> </div> <div class="menu-group"> <div class="menu-category"> <h2 class="menu-label">Accountant & bookkeeper resources</h2> <ul class="menu-list"> <li> <a href="/accountants/resources/#guides-for-you-and-your-clients" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Guides for you and your clients" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Guides for you and your clients</a> </li> <li> <a href="/accountants/events/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Events and webinars" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Events and webinars</a> </li> <li> <a href="/accountants/resources/#webinars-and-videos" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="Webinar recordings and videos" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Webinar recordings and videos</a> </li> <li> <a href="/accountants/first-steps-for-partners/" class="menu-item gtm-tracked-link" data-event-category="Main Navigation" data-event-action="Resources" data-event-label="First steps for partners" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">First steps for partners</a> </li> </ul> </div> </div> </div></div> </div> <a href="https://login.freeagent.com/login" class="Button Button--outline--reversed Button--small gtm-tracked-link" data-event-category="Login" data-event-action="clickedNavButton" data-event-label="/onetrust/cookie-jar/" data-event-value="" data-event-name="Log-in CTA" data-cd-index="1" data-cm-index="17">Login</a> <a href="https://signup.freeagent.com/signup" class="Button Button--primary Button--small gtm-tracked-link" data-event-category="Trial Signup CTA" data-event-action="stickyHeader" data-event-label="Try FreeAgent" data-event-value="" data-event-name="Trial Signup CTA" data-cd-index="1" data-cm-index="5">Try FreeAgent</a> </nav> </div></header> <main id="content" role="main"> <div class="homepage-carousel" data-carousel-id="homepage"> <section id="hero" data-small-business-segment-container> <div class="gradient-50--to-bottom padding-block--px-32" id="hero-default"> <div class="container"> <div class="grid align-items--center"> <div class="grid__item md-5 md-order-2 md-padding-inline--px-24"> <h1 class="color--white">Accounting software that helps you thrive</h1> <p class="text-5 color--white">Whether you’re scaling up or seasoned pros, FreeAgent helps you manage your business finances with clarity and confidence.</p> <a href="https://signup.freeagent.com/signup" class="Button Button--primary margin-bottom--px-24 gtm-tracked-link" data-event-category="Trial Signup CTA" data-event-action="top" data-event-label="Try FreeAgent" data-event-value="" data-event-name="Trial Signup CTA" data-cd-index="1" data-cm-index="5">Try FreeAgent</a> <p class="text-7 color--white md-padding-block--px-24"> Check out <a href="/accountants/" class="color--white text-decoration--underline gtm-tracked-link" data-event-category="homepage hero" data-event-action="top" data-event-label="FreeAgent for accountants and bookkeepers" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">FreeAgent for accountants and bookkeepers</a> </p> </div> <div class="grid__item md-7"> <video autoplay="autoplay" class="display--block" data-lazy="" loop="loop" muted="muted" playsinline="" poster="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1000/dpr_auto,f_auto/website-images/video/ui-animations/tablet--001--overview--with-offer--poster"> <source data-src="https://freeagent-res.cloudinary.com/video/upload/website-images/video/ui-animations/tablet--001--overview--with-offer--mp4.mp4" type="video/mp4; codecs="hvc1""/> <source data-src="https://freeagent-res.cloudinary.com/video/upload/website-images/video/ui-animations/tablet--001--overview--with-offer--webm.webm" type="video/webm"/> </video> </div> </div> </div> </div> <div class="toggle-visibility hide" data-event-action="top - displayed" data-event-label="Many hands make light work" data-small-business-segments="direct_subscribed,employees_mini direct_subscribed,employees_medium direct_subscribed,employees_max nwg_subscribed,employees_mini nwg_subscribed,employees_medium nwg_subscribed,employees_max direct_subscribed,age_early direct_subscribed,age_established nwg_subscribed,age_early nwg_subscribed,age_established direct_free_trial,age_established"> <div class="gradient-20--to-bottom fill-block padding-block--px-32"> <div class="container fill-block"> <div class="grid align-items--center fill-block"> <div class="grid__item sm-10 sm-offset-1 md-5 md-offset-1 lg-offset-1"> <h1 class="text-1 text-wrap--balance margin-bottom--px-12 color--black"> Many hands make light work </h1> <div class="text-5 margin-bottom--px-16 color--black color--cascade"> Did you know you can add team members to your FreeAgent account? With more users, you can: </div> <ul class="list-style-type--disc margin-bottom--px-16 stack space-between--px-12 text-6 text-wrap--pretty color--black"> <li>save time by delegating admin tasks like adding expenses or updating projects</li> <li>make more informed decisions with the same reporting views</li> <li>control what they see by setting each user’s permissions level</li> </ul> <div class="flex flex-wrap align-items--center gap--px-16 width--fit-content"> <a href="https://login.freeagent.com/company/users/new" class="Button Button--primary gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="https://login.freeagent.com/company/users/new" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Add a new user</a> <a href="https://support.freeagent.com/hc/en-gb/articles/115001218590-Add-a-new-user-to-your-FreeAgent-account" class="text-decoration--underline gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="https://support.freeagent.com/hc/en-gb/articles/115001218590-Add-a-new-user-to-your-FreeAgent-account" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">How it works</a> </div> </div> <div class="grid__item md-6 md-order-2 toggle-visibility hide md-show"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1280/dpr_auto,f_auto/website-images/netlify/Small-Biz_web-segmentation_Adding-Users_1200x900_BG_Gradient-20.png" alt="Two hand-shaped balloons floating in the clouds." class="aspect-ratio--4x3 image-container image-fit--contain" img_size_override="w_1280" loading="lazy"/> </div> </div> </div> </div> </div><div class="toggle-visibility hide" data-event-action="top - displayed" data-event-label="Catch up: efficiency hacks for busy businesses" data-small-business-segments="direct_subscribed nwg_subscribed"> <div class="background-color--blue-30 fill-block padding-block--px-32"> <div class="container fill-block"> <div class="grid align-items--center fill-block"> <div class="grid__item sm-10 sm-offset-1 md-5 md-offset-1 lg-offset-1"> <h1 class="text-1 text-wrap--balance margin-bottom--px-12 color--black"> Catch up: efficiency hacks for busy businesses </h1> <div class="text-5 margin-bottom--px-16 color--black color--cascade"> Missed our free webinar full of time-saving tips? Catch up on the full recording where we show you how to: </div> <ul class="list-style-type--disc margin-bottom--px-16 stack space-between--px-12 text-6 text-wrap--pretty color--black"> <li>quickly explain lots of bank transactions using AI</li> <li>use a price list to create invoicing shortcuts</li> <li>view reports that show you all the invoices and payments from each contact</li> </ul> <div class="flex flex-wrap align-items--center gap--px-16 width--fit-content"> <a href="https://www.freeagent.com/small-businesses/recordings/time-saving-hacks" class="Button Button--primary gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="https://www.freeagent.com/small-businesses/recordings/time-saving-hacks" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Watch the recording</a> <a href="Read%20hacks%20from%20fellow%20users" class="text-decoration--underline gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="Read hacks from fellow users" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Read hacks from fellow users</a> </div> </div> <div class="grid__item md-6 md-order-2 toggle-visibility hide md-show"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1280/dpr_auto,f_auto/website-images/netlify/FA_Life-Hacks_Onion-Charger_Web-Segmentation_1200x900_BG_bfe2ff.png" alt="Phone charger plugged in to an onion." class="aspect-ratio--4x3 image-container image-fit--contain" img_size_override="w_1280" loading="lazy"/> </div> </div> </div> </div> </div><div class="toggle-visibility hide" data-event-action="top - displayed" data-event-label="Win a £500 John Lewis voucher" data-small-business-segments="direct_free_trial,age_startup direct_free_trial,age_early"> <div class="background-color--blue-30 fill-block padding-block--px-32"> <div class="container fill-block"> <div class="grid align-items--center fill-block"> <div class="grid__item sm-10 sm-offset-1 md-5 md-offset-1 lg-offset-1"> <h1 class="text-1 text-wrap--balance margin-bottom--px-12 color--black"> Win a £500 John Lewis voucher </h1> <div class="text-5 margin-bottom--px-16 color--black color--cascade"> Simply subscribe to FreeAgent before your trial ends and you'll automatically be entered into our draw for a chance to win! </div> <ul class="list-style-type--disc margin-bottom--px-16 stack space-between--px-12 text-6 text-wrap--pretty color--black"> <li>Pay monthly and get 50% off your first six months</li> <li>Or choose an annual subscription for 50% off your first 12 months</li> </ul> <div class="text-6 margin-bottom--px-24 color--black color--cascade"> <p>Plus, you’ll still receive the remaining days left on your free trial.</p> </div> <div class="flex flex-wrap align-items--center gap--px-16 width--fit-content"> <a href="https://login.freeagent.com/company/payments/new" class="Button Button--primary gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="https://login.freeagent.com/company/payments/new" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Subscribe now</a> <a href="https://cloud.biz.freeagent.com/new-subscriber-500-voucher-promotion" class="text-decoration--underline gtm-tracked-link" data-event-category="segmentation - small business" data-event-action="top - clicked" data-event-label="https://cloud.biz.freeagent.com/new-subscriber-500-voucher-promotion" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">Terms and conditions apply</a> </div> </div> <div class="grid__item md-6 md-order-2 toggle-visibility hide md-show"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1280/dpr_auto,f_auto/website-images/netlify/Small-Biz_web-segmentation_Free-trialists_1200x900_BG_BFE2FF_1.png" alt="Envelope opening with a £500 gift voucher inside and confetti exploding out." class="aspect-ratio--4x3 image-container image-fit--contain" img_size_override="w_1280" loading="lazy"/> </div> <div class="grid__item sm-10 sm-offset-1 md-offset-1 lg-offset-1 md-order-3 text-preset-6 color--black color--cascade"> The winner will be contacted in the first week of the month. </div> </div> </div> </div> </div> </section> <div id="homepage-carousel__controls" class="container homepage-carousel__controls toggle-visibility hide"> <button class="glider-prev position--unset toggle-visibility" aria-label="Previous"> <span class="icon icon--px-16 color--white"><svg xmlns="http://www.w3.org/2000/svg" focusable="false" viewBox="0 0 20 20" height="20" width="20"> <path d="M14.4,16.6c0.8,0.8,0.8,2,0,2.8c-0.8,0.8-2,0.8-2.8,0l-8-8c-0.8-0.8-0.8-2,0-2.8l8-8c0.8-0.8,2-0.8,2.8,0c0.8,0.8,0.8,2,0,2.8L7.8,10L14.4,16.6z"/> </svg> </span> </button> <button class="glider-next position--unset toggle-visibility" aria-label="Next"> <span class="icon icon--px-16 color--white"><svg xmlns="http://www.w3.org/2000/svg" focusable="false" viewBox="0 0 20 20" height="20" width="20"> <path d="M5.6,3.4c-0.8-0.8-0.8-2,0-2.8s2-0.8,2.8,0l8,8c0.8,0.8,0.8,2,0,2.8l-8,8c-0.8,0.8-2,0.8-2.8,0s-0.8-2,0-2.8l6.6-6.6L5.6,3.4z"/> </svg> </span> </button> </div> </div> <div class="container container--narrow padding-block--medium"> <div class="grid"> <div class="grid__item text-align--center"> <div style="width:100%;margin:0 auto;display:block;" data-js="trustpilot-carousel-section"> <div class="trustpilot-widget u-text-align--center" data_vr="trustpilot-widget" data-locale="en-GB" data-template-id="53aa8912dec7e10d38f59f36" data-businessunit-id="5145da0e0000640005242670" data-style-height="140px" data-style-width="100%" data-theme="light" data-stars="4,5"> <a rel="noopener noreferrer" href="https://uk.trustpilot.com/review/www.freeagent.com" class="font-weight--semi-bold" target="_blank" rel="noreferer, noopener">View FreeAgent's reviews on Trustpilot</a> </div> </div> </div> </div> </div> <section class="container margin-bottom--xx-large toggle-visibility show" id="campaign-banner"> <article class="billboard gradient-50--to-bottom"> <div class="billboard__content padding--px-24 md-padding--px-32"> <h2 class="text-2 text-wrap--balance margin-bottom--px-12 color--white">The perfect blend for any business size</h2> <p class="text-6 text-wrap--pretty margin-bottom--px-24 color--white">From payroll and VAT to integrations that keep things smooth, FreeAgent is built to fit businesses of all sizes.</p> <div class="flex flex-wrap align-items--center gap--px-16 width--fit-content"> <a href="/features/accounting-software/" class="Button Button--outline--reversed gtm-tracked-link" data-event-category="Tracked Button" data-event-action="Larger Business Banner" data-event-label="See what’s brewing" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="">See what’s brewing</a> </div> </div> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1280/dpr_auto,f_auto/website-images/banners/Homepage-banner-perfect-blend-png-core_gradient" alt="Four cups of hot coffee in different sizes, arranged in a row from smallest to largest, with steam rising." class="aspect-ratio--2x1 image-container image-fit--contain padding--px-16" img_size_override="w_1280" loading="lazy"/> </article> </section> <div id="bank-offer-banner" class="margin-bottom--xx-large toggle-visibility show"> <div class="container container--narrow"> <div class="grid align-items--center"> <div class="grid__item md-4 md-offset-1 lg-offset-1"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/illustrations/bank-cards--scattered" alt="" class="image-container" img_size_override="w_640" width="100%" loading="lazy"/> </div> <div class="grid__item md-6"> <h2 class="text-3 margin-bottom--px-8">Take it, it's yours (for free)</h2> <p class="text-preset-5">Get FreeAgent for free while you retain a business bank account with <a href="/pricing/free-accounting-software/" data-event-category="Bank Offering" data-event-action="nwg" data-event-label="" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="" class=" gtm-tracked-link">NatWest, Royal Bank of Scotland or Ulster Bank</a>, or make at least one transaction a month through a <a href="/mettle/" data-event-category="Bank Offering" data-event-action="mettle" data-event-label="" data-event-value="" data-event-name="" data-cd-index="" data-cm-index="" class=" gtm-tracked-link">Mettle</a> bank account. Optional add-ons may be chargeable.</p> </div> </div> </div> </div> <div class="gradient-20--to-bottom padding-top--px-64 text-align--center"> <div class="container"> <h2 class="text-2 margin-bottom--px-8">Run your business from anywhere</h2> <p class="text-6 margin-bottom--px-16">Send invoices, track cashflow, manage expenses, file tax returns. And do it all on the go.</p> <p class="text-6 line-length--short margin-inline--auto">FreeAgent has everything you need to manage your business. See <a href="/features/competitors/">how we stack up against the competition</a> and <a href="/features/switch-to-freeagent/">make the switch</a>.</p> <div class="grid"> <div class="grid__item md-10 md-offset-1 lg-8 lg-offset-2"> <video autoplay="autoplay" class="display--block" data-lazy="" loop="loop" muted="muted" playsinline="" poster="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1000/dpr_auto,f_auto/website-images/video/ui-animations/homepage-ui-swipe--poster"> <source data-src="https://freeagent-res.cloudinary.com/video/upload/website-images/video/ui-animations/homepage-ui-swipe--mp4.mp4" type="video/mp4; codecs="hvc1""/> <source data-src="https://freeagent-res.cloudinary.com/video/upload/website-images/video/ui-animations/homepage-ui-swipe--webm.webm" type="video/webm"/> </video> </div> </div> </div> </div> <div class="container padding-block--px-64 text-align--center"> <div class="grid margin-bottom--px-64"> <div class="grid__item md-6 lg-4"> <div class="background-color--yellow-30 border-radius--px-4 margin-bottom--px-12 padding--px-24"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/ui/admin-to-do-list" alt="" class="image-container" img_size_override="w_640" loading="lazy"/> </div> <div class="md-padding-inline--px-32"> <h3 class="margin-bottom--px-12">Keep admin to a min</h3> <p class="margin-bottom--small">No more mess - invoicing, expenses, and more all in one place</p> <p class="text-preset-5 color--white"> <a href="/features/accounting-software/" class="arrow-link"> More about features <span class="icon icon--px-12 color--blue--70"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 12 12" focusable="false" height="12" width="12"> <path d="M0,6c0-0.6,0.4-1,1-1l7.6,0L6.3,2.7C6.2,2.6,6.1,2.5,6.1,2.4C6,2.3,6,2.1,6,2c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.4-0.4,1-0.4,1.4,0l4,4c0.1,0.1,0.2,0.2,0.2,0.4c0,0.1,0,0.1,0,0.2c0,0,0,0.1,0,0.1v0c0,0,0,0,0,0L12,6c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.1,0.2-0.2,0.3l-4,4C7.5,10.9,7.3,11,7,11c-0.3,0-0.5-0.1-0.7-0.3c-0.1-0.1-0.2-0.2-0.2-0.3C6,10.3,6,10.1,6,10c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3L8.6,7H1C0.4,7,0,6.6,0,6z"/> </svg> </span> </a> </p> </div> </div> <div class="grid__item md-6 lg-4"> <div class="background-color--blue-30 border-radius--px-4 margin-bottom--px-12 padding--px-24"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/ui/cashflow-forecast" alt="" class="image-container" img_size_override="w_640" loading="lazy"/> </div> <div class="md-padding-inline--px-32"> <h3 class="margin-bottom--px-12">Know your cashflow</h3> <p class="margin-bottom--small">One tidy dashboard that gives an overview of your whole business</p> <p class="text-preset-5 color--white"> <a href="/features/cashflow/" class="arrow-link"> More about cashflow <span class="icon icon--px-12 color--blue--70"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 12 12" focusable="false" height="12" width="12"> <path d="M0,6c0-0.6,0.4-1,1-1l7.6,0L6.3,2.7C6.2,2.6,6.1,2.5,6.1,2.4C6,2.3,6,2.1,6,2c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.4-0.4,1-0.4,1.4,0l4,4c0.1,0.1,0.2,0.2,0.2,0.4c0,0.1,0,0.1,0,0.2c0,0,0,0.1,0,0.1v0c0,0,0,0,0,0L12,6c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.1,0.2-0.2,0.3l-4,4C7.5,10.9,7.3,11,7,11c-0.3,0-0.5-0.1-0.7-0.3c-0.1-0.1-0.2-0.2-0.2-0.3C6,10.3,6,10.1,6,10c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3L8.6,7H1C0.4,7,0,6.6,0,6z"/> </svg> </span> </a> </p> </div> </div> <div class="grid__item md-6 md-offset-3 lg-4"> <div class="background-color--green-30 border-radius--px-4 margin-bottom--px-12 padding--px-24"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/ui/self-assessment" alt="" class="image-container" img_size_override="w_640" loading="lazy"/> </div> <div class="md-padding-inline--px-32"> <h3 class="margin-bottom--px-12">Relax about tax</h3> <p class="margin-bottom--small">Take a weight off with automatic tax forecasts and reminders</p> <p class="text-preset-5 color--white"> <a href="/features/self-assessment/" class="arrow-link"> Relax about your tax <span class="icon icon--px-12 color--blue--70"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 12 12" focusable="false" height="12" width="12"> <path d="M0,6c0-0.6,0.4-1,1-1l7.6,0L6.3,2.7C6.2,2.6,6.1,2.5,6.1,2.4C6,2.3,6,2.1,6,2c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.4-0.4,1-0.4,1.4,0l4,4c0.1,0.1,0.2,0.2,0.2,0.4c0,0.1,0,0.1,0,0.2c0,0,0,0.1,0,0.1v0c0,0,0,0,0,0L12,6c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.1,0.2-0.2,0.3l-4,4C7.5,10.9,7.3,11,7,11c-0.3,0-0.5-0.1-0.7-0.3c-0.1-0.1-0.2-0.2-0.2-0.3C6,10.3,6,10.1,6,10c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3L8.6,7H1C0.4,7,0,6.6,0,6z"/> </svg> </span> </a> </p> </div> </div> </div> <h2>Start your free 30-day trial</h2> <p class="margin-bottom--px-32">No payment card needed.</p> <a href="https://signup.freeagent.com/signup" class="Button Button--primary gtm-tracked-link" data-event-category="Trial Signup CTA" data-event-action="middle" data-event-label="Try FreeAgent" data-event-value="" data-event-name="Trial Signup CTA" data-cd-index="1" data-cm-index="5">Try FreeAgent</a> </div> <div class="gradient-20--to-bottom padding-block--px-64"> <div class="container"> <div class="margin-bottom--px-64"> <section class="text-align--center"> <h2 class="margin-bottom--xx-large">Award-winning software… with award-winning support</h2> <div class="auto-grid align-items--center md-column-count--2 lg-column-count--3"> <div class="stack space-between--large"> <figure class="margin--none"> <div class="badge background-color--blue-70 color--white font-weight--medium margin-bottom--px-8 margin-inline--auto">Winner</div> <figcaption class="text-preset-6"> <span class="font-weight--regular">2024 UK Customer Experience Awards - SME</span><br/> Silver for Customers at the Heart of Everything </figcaption> </figure> <figure class="margin--none"> <div class="badge background-color--blue-70 color--white font-weight--medium margin-bottom--px-8 margin-inline--auto">Winner</div> <figcaption class="text-preset-6"> <span class="font-weight--regular">2024 Contracting Awards</span><br/> Best Contractor Accounting Software </figcaption> </figure> </div> <div class="toggle-visibility hide lg-show"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_720/dpr_auto,f_auto/website-images/brand/illustrations/trophy--multiple-awards" alt="Illustration of a gold trophy with '#1' engraved upon a star sitting on the front of the cup and 'The Best' engraved upon a plaque on the base." class="image-container" img_size_override="w_720" width="100%" loading="lazy"/> </div> <div class="stack space-between--large"> <figure class="margin--none"> <div class="badge background-color--blue-70 color--white font-weight--medium margin-bottom--px-8 margin-inline--auto">Winner</div> <figcaption class="text-preset-6"> <span class="font-weight--regular">2024, 2023, 2022, 2020 and 2019 ICB Luca Awards</span><br/> Friendliest Software of the Year </figcaption> </figure> <figure class="margin--none"> <div class="badge background-color--blue-70 color--white font-weight--medium margin-bottom--px-8 margin-inline--auto">Top Product</div> <figcaption class="text-preset-6"> <span class="font-weight--regular">2021 and 2020 AccountingWEB Software Awards</span><br/> SME Accounting / Bookkeeping Software </figcaption> </figure> </div> </div> </section> </div> <section class="margin-bottom--px-64"> <div class="grid"> <div class="grid__item lg-10 lg-offset-1"> <div class="billboard"> <div class="billboard__content background-color--blue--dark color--white padding--px-32 md-padding--px-64"> <h2>Don't stress - our incredible support team is here to help</h2> <p>Gary, Gillian, Mike and Moriah are just some of the friendly, UK-based support accountants who are ready to help when you get stuck.</p> </div> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_1000/dpr_auto,f_auto/website-images/homepage/photograph-support-homepage.png?960" alt="Two members of the FreeAgent support team" class="billboard__media" img_size_override="960" width="100%" loading="lazy"/> </div> </div> </div> </section> <section class="text-align--center"> <h2>Working with an accountant or going DIY?</h2> <p class="margin-bottom--xx-large text-preset-4">FreeAgent works great either way.</p> <div class="grid"> <div class="grid__item md-6 lg-4 md-padding-inline--px-32 stack space-between--px-12"> <div class="counter counter--blue-50 counter--x-large margin-inline--auto"> <span class="icon icon--px-16 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" focusable="false" height="16" width="16"> <path d="M6.1,14.2c-0.3,0-0.7-0.1-0.9-0.4L0.9,9.4c-0.5-0.5-0.5-1.3,0-1.8c0.5-0.5,1.3-0.5,1.8,0L6,11.1l7.2-8.9 C13.7,1.7,14.5,1.6,15,2c0.5,0.4,0.6,1.2,0.2,1.8l-8.1,10C6.9,14.1,6.5,14.2,6.1,14.2C6.2,14.2,6.1,14.2,6.1,14.2z"/> </svg> </span> </div> <h3>Find an accountant</h3> <p>If you’re looking for the support of an accountant, we’ve got you covered – choose an accountant from our <a href="/find-an-accountant/">directory of trusted partners</a>.</p> </div> <div class="grid__item md-6 lg-4 md-padding-inline--px-32 stack space-between--px-12"> <div class="counter counter--blue-50 counter--x-large margin-inline--auto"> <span class="icon icon--px-16 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" focusable="false" height="16" width="16"> <path d="M6.1,14.2c-0.3,0-0.7-0.1-0.9-0.4L0.9,9.4c-0.5-0.5-0.5-1.3,0-1.8c0.5-0.5,1.3-0.5,1.8,0L6,11.1l7.2-8.9 C13.7,1.7,14.5,1.6,15,2c0.5,0.4,0.6,1.2,0.2,1.8l-8.1,10C6.9,14.1,6.5,14.2,6.1,14.2C6.2,14.2,6.1,14.2,6.1,14.2z"/> </svg> </span> </div> <h3>Invite your accountant</h3> <p>No more swapping spreadsheets with your accountant - send them an invite and start working from the same set of books.</p> </div> <div class="grid__item md-6 md-offset-3 lg-4 md-padding-inline--px-32 stack space-between--px-12"> <div class="counter counter--blue-50 counter--x-large margin-inline--auto"> <span class="icon icon--px-16 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" focusable="false" height="16" width="16"> <path d="M6.1,14.2c-0.3,0-0.7-0.1-0.9-0.4L0.9,9.4c-0.5-0.5-0.5-1.3,0-1.8c0.5-0.5,1.3-0.5,1.8,0L6,11.1l7.2-8.9 C13.7,1.7,14.5,1.6,15,2c0.5,0.4,0.6,1.2,0.2,1.8l-8.1,10C6.9,14.1,6.5,14.2,6.1,14.2C6.2,14.2,6.1,14.2,6.1,14.2z"/> </svg> </span> </div> <h3>Do it yourself</h3> <p>No accountant? No problem. You can use FreeAgent <a href="/features/accounting-software/">accounting software</a> without an accountant, especially if your books are straightforward.</p> </div> </div> </section> </div> </div> <section class="gradient-50--to-bottom color--white padding-block--px-64 text-align--center"> <div class="container"> <div class="grid align-items--center gap--px-0"> <div class="grid__item lg-3 align-self--start"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/illustrations/yellow-plane--fashionistas" alt="" class="image-container toggle-visibility hide lg-show" img_size_override="w_640" loading="lazy"/> </div> <div class="grid__item lg-6"> <h2>Start your free 30-day trial</h2> <p class="text-5 margin-bottom--px-32">No payment card needed.</p> <a href="https://signup.freeagent.com/signup" class="Button Button--primary gtm-tracked-link" data-event-category="Trial Signup CTA" data-event-action="bottom" data-event-label="Try FreeAgent" data-event-value="" data-event-name="Trial Signup CTA" data-cd-index="1" data-cm-index="5">Try FreeAgent</a> </div> <div class="grid__item lg-3 align-self--end"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_640/dpr_auto,f_auto/website-images/brand/illustrations/yellow-plane--barista" alt="" class="image-container toggle-visibility hide lg-show" img_size_override="w_640" loading="lazy"/> </div> </div> </div> </section> <script id="ze-widget"> window.zESettings = { webWidget: { answerBot: { avatar: { url: "https://freeagent-res.cloudinary.com/image/upload/c_limit,w_64/dpr_auto,f_auto/website-images/icons/ruby-the-robot.gif", name: { "*" : "Ruby the Robot" }, }, title: { "*": "Ruby the Robot", }, }, chat: { departments: { enabled: ["01 Support", "02 Practice Support", "03 Login and Subscriptions", "04 Bank Connections and Integrations"], }, }, } }; </script> <div data-chat-channel="zendesk" data_vr="web-widget"> <script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=a446a325-b707-495f-a0d2-7462e473eb5b"> </script> </div> </main> <footer class="background-color--blue--xxx-dark padding-block--x-large" data-t-footer> <div class="container"> <ul class="inline-list column-gap--large row-gap--small margin-bottom--medium text-preset-5" data-keylinks> <li><a href="/company/" class="color--white">About us</a></li> <li><a href="https://careers.freeagent.com/" class="color--white">Careers</a></li> <li><a href="/company/contact-us/" class="color--white">Contact us</a></li> <li><a href="https://support.freeagent.com/hc/en-gb" class="color--white">Knowledge Base</a></li> <li><a href="/find-an-accountant/" class="color--white">Find an accountant</a></li> </ul> <hr class="background-color--blue--x-dark margin-bottom--medium"> <div class="grid margin-bottom--medium" data-t-footer-sitemap> <div class="grid__item sm-6 md-2"> <h2 class="text-preset-5 color--blue--x-light font-weight--medium margin-bottom--x-small">Product</h2> <ul class="stack space-between--x-small text-preset-6"> <li><a href="/features/accounting-software/" class="color--white font-weight--regular">Features</a></li> <li><a href="/pricing/" class="color--white font-weight--regular">Pricing</a></li> <li><a href="/features/security/" class="color--white font-weight--regular">Security</a></li> <li><a href="https://status.freeagent.com" class="color--white font-weight--regular">App status</a></li> <li><a href="/depot/" class="color--white font-weight--regular">The depot</a></li> </ul> </div> <div class="grid__item sm-6 md-2"> <h2 class="text-preset-5 color--blue--x-light font-weight--medium margin-bottom--x-small">Company</h2> <ul class="stack space-between--x-small text-preset-6"> <li><a href="/blog/" class="color--white font-weight--regular">Blog</a></li> <li><a href="/timeline/" class="color--white font-weight--regular">Product timeline</a></li> <li><a href="/company/press-room/" class="color--white font-weight--regular">Press room</a></li> <li><a href="/partners/" class="color--white font-weight--regular">Partners</a></li> <li><a href="/user-research-group/" class="color--white font-weight--regular">User research group</a></li> </ul> </div> <div class="grid__item sm-6 md-2"> <h2 class="text-preset-5 color--blue--x-light font-weight--medium margin-bottom--x-small">Community</h2> <ul class="stack space-between--x-small text-preset-6"> <li><a href="/integrations/" class="color--white font-weight--regular">Integrations</a></li> <li><a href="https://dev.freeagent.com/" class="color--white font-weight--regular">FreeAgent API</a></li> <li><a href="/apps/" class="color--white font-weight--regular">Calculators</a></li> <li><a href="/company/accessibility/" class="color--white font-weight--regular">Accessibility</a></li> <li><a href="/referrals/" class="color--white font-weight--regular">Referrals</a></li> </ul> </div> <div class="grid__item sm-6 md-2"> <h2 class="text-preset-5 color--blue--x-light font-weight--medium margin-bottom--x-small">Legal stuff</h2> <ul class="stack space-between--x-small text-preset-6"> <li><a href="/privacy/" class="color--white font-weight--regular">Privacy notices</a></li> <li><a href="/privacy/cookies-notice/" class="color--white font-weight--regular">Cookie Notice</a></li> <li><a href="/company/terms/" class="color--white font-weight--regular">Terms of service</a></li> <li><a href="/company/terms/site-terms/" class="color--white font-weight--regular">Site terms</a></li> <li><a href="/privacy/freeagent-and-gdpr-compliance/" class="color--white font-weight--regular">GDPR</a></li> <li><a href="/company/terms/anti-tax-evasion/" class="color--white font-weight--regular">Anti-tax evasion</a></li> <li><a href="/company/gender-pay-gap-report/" class="color--white font-weight--regular">Inclusion</a></li> <li><a href="/company/whistleblowing/" class="color--white font-weight--regular">Whistleblowing</a></li> <li><a href="/company/sustainability/" class="color--white font-weight--regular">Sustainability</a></li> </ul> </div> <div class="grid__item sm-12 md-4"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,w_400/dpr_auto,f_auto/website-images/awards/CXA24_winner_logo_silver.png" alt="2024 UK Customer Experience Awards, Silver Award Winner" class="image-container margin-inline--auto md-margin-inline--none lg-margin-left--auto" width="400" img_size_override="w_400" loading="lazy"/> </div> </div> <div class="md-flex align-items--center margin-bottom--large"> <div class="flex flex-wrap column-gap--px-24 row-gap--px-16 justify-content--center margin-bottom--px-16 md-margin-bottom--px-0 width--fit-content"> <div class="flex align-items--start gap--px-8"> <a href="https://www.facebook.com/freeagentapp/" class="social-link" data-social-link="facebook" cd_index="1" event_action="Social Icon" event_category="Trust Signal" event_label="facebook" event_name="Trust Signal" event_value="5"><div inert=""> <span class="icon icon--px-24 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" height="64" width="64"> <path d="M37.5,64V35.7h9.3l1.8-11.5h-11v-7.5c0-3.1,1.5-6.2,6.5-6.2h5V0.8c0,0-4.6-0.8-8.9-0.8c-9.1,0-15,5.5-15,15.5v8.8H15v11.5h10.1V64H37.5z"/> </svg> </span> </div> <span class="visually-hidden">facebook</span> </a> <a href="https://www.instagram.com/freeagentapp/" class="social-link" data-social-link="instagram" cd_index="1" event_action="Social Icon" event_category="Trust Signal" event_label="instagram" event_name="Trust Signal" event_value="5"><div inert=""> <span class="icon icon--px-24 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" height="64" width="64"> <path d="M18.7,0.2C15.3,0.4,13,0.9,11,1.7C8.9,2.5,7.1,3.6,5.3,5.4C3.5,7.2,2.5,9,1.6,11.1c-0.8,2-1.3,4.4-1.5,7.8C0,22.3,0,23.4,0,32.1c0,8.7,0.1,9.8,0.2,13.2C0.4,48.7,0.9,51,1.7,53c0.8,2.1,1.9,3.9,3.7,5.7c1.8,1.8,3.6,2.9,5.7,3.7c2,0.8,4.4,1.3,7.8,1.5C22.3,64,23.4,64,32.1,64c8.7,0,9.8-0.1,13.2-0.2c3.4-0.2,5.7-0.7,7.8-1.5c2.1-0.8,3.9-1.9,5.7-3.7c1.8-1.8,2.9-3.6,3.7-5.7c0.8-2,1.3-4.4,1.5-7.8C64,41.7,64,40.6,64,31.9c0-8.7-0.1-9.8-0.2-13.2c-0.2-3.4-0.7-5.7-1.5-7.8c-0.8-2.1-1.9-3.9-3.7-5.7c-1.8-1.8-3.6-2.9-5.7-3.7c-2-0.8-4.4-1.3-7.8-1.5C41.7,0,40.6,0,31.9,0C23.2,0,22.2,0.1,18.7,0.2M19.1,58.1c-3.1-0.1-4.8-0.7-5.9-1.1c-1.5-0.6-2.6-1.3-3.7-2.4c-1.1-1.1-1.8-2.2-2.4-3.7c-0.4-1.1-1-2.8-1.1-5.9C5.8,41.6,5.8,40.6,5.8,32c0-8.5,0-9.6,0.2-12.9C6.1,16,6.6,14.3,7,13.2c0.6-1.5,1.3-2.6,2.4-3.7c1.1-1.1,2.2-1.8,3.7-2.4c1.1-0.4,2.8-1,5.9-1.1c3.4-0.2,4.4-0.2,12.9-0.2c8.5,0,9.6,0,12.9,0.2C48,6.1,49.7,6.6,50.8,7c1.5,0.6,2.6,1.3,3.7,2.4c1.1,1.1,1.8,2.2,2.4,3.7c0.4,1.1,1,2.8,1.1,5.9c0.2,3.4,0.2,4.4,0.2,12.9c0,8.5,0,9.6-0.2,12.9c-0.1,3.1-0.7,4.8-1.1,5.9c-0.6,1.5-1.3,2.6-2.4,3.7c-1.1,1.1-2.2,1.8-3.7,2.4c-1.1,0.4-2.8,1-5.9,1.1c-3.4,0.2-4.4,0.2-12.9,0.2C23.5,58.2,22.5,58.2,19.1,58.1 M45.2,14.9c0,2.1,1.7,3.8,3.8,3.8c2.1,0,3.8-1.7,3.8-3.8c0-2.1-1.7-3.8-3.8-3.8C46.9,11.1,45.2,12.8,45.2,14.9 M15.6,32c0,9.1,7.4,16.4,16.5,16.4c9.1,0,16.4-7.4,16.4-16.5c0-9.1-7.4-16.4-16.5-16.4C22.9,15.6,15.6,23,15.6,32 M21.3,32c0-5.9,4.8-10.7,10.6-10.7c5.9,0,10.7,4.8,10.7,10.6c0,5.9-4.8,10.7-10.6,10.7C26.1,42.7,21.3,37.9,21.3,32"/> </svg> </span> </div> <span class="visually-hidden">instagram</span> </a> <a href="https://www.linkedin.com/company/freeagent/" class="social-link" data-social-link="linkedin" cd_index="1" event_action="Social Icon" event_category="Trust Signal" event_label="linkedin" event_name="Trust Signal" event_value="5"><div inert=""> <span class="icon icon--px-24 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" height="64" width="64"> <g> <rect x="0.8" y="21.3" width="13.7" height="41.3"/> <path id="path13-0" d="M7.8,1.4C3.1,1.4,0,4.5,0,8.5c0,4,3,7.1,7.6,7.1h0.1c4.8,0,7.8-3.2,7.8-7.1C15.3,4.5,12.5,1.4,7.8,1.4z"/> <path id="path15" d="M48.2,20.3c-7.3,0-10.5,4-12.4,6.8v-5.8H22.1c0.2,3.9,0,41.3,0,41.3h13.7V39.5c0-1.2,0.1-2.5,0.5-3.3c1-2.5,3.2-5,7-5c5,0,6.9,3.8,6.9,9.3v22.1H64V38.9C64,26.2,57.2,20.3,48.2,20.3z"/> </g> </svg> </span> </div> <span class="visually-hidden">linkedin</span> </a> <a href="https://www.threads.net/freeagentapp/" class="social-link" data-social-link="threads" cd_index="1" event_action="Social Icon" event_category="Trust Signal" event_label="threads" event_name="Trust Signal" event_value="5"><div inert=""> <span class="icon icon--px-24 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" height="64" width="64"> <path d="M47.3,29.7c-0.3-0.1-0.6-0.3-0.8-0.4C46,20.2,41,15,32.7,14.9c0,0-0.1,0-0.1,0c-5,0-9.1,2.1-11.7,6l4.6,3.2c1.9-2.9,4.9-3.5,7.1-3.5c0,0,0.1,0,0.1,0c2.7,0,4.8,0.8,6.2,2.4c1,1.1,1.6,2.7,2,4.7c-2.4-0.4-5.1-0.5-7.9-0.4c-7.9,0.5-13,5.1-12.7,11.5c0.2,3.3,1.8,6.1,4.6,7.9c2.3,1.6,5.4,2.3,8.5,2.1c4.2-0.2,7.4-1.8,9.7-4.7c1.7-2.2,2.8-5.1,3.3-8.6c2,1.2,3.4,2.8,4.3,4.7c1.4,3.2,1.5,8.5-2.8,12.8c-3.8,3.8-8.3,5.4-15.2,5.5c-7.6-0.1-13.4-2.5-17.1-7.2C11.9,46.7,10.1,40.2,10,32c0.1-8.2,1.9-14.7,5.4-19.1c3.7-4.8,9.5-7.2,17.1-7.2c7.7,0.1,13.5,2.5,17.4,7.3c1.9,2.3,3.3,5.3,4.3,8.7l5.4-1.4c-1.1-4.2-3-7.9-5.4-10.9c-5-6.1-12.3-9.3-21.6-9.3h0c-9.4,0.1-16.6,3.2-21.4,9.4C6.8,14.8,4.5,22.4,4.5,32l0,0l0,0c0.1,9.5,2.3,17.1,6.6,22.6c4.8,6.1,12,9.3,21.4,9.4h0c8.3-0.1,14.2-2.2,19-7.1c6.3-6.3,6.1-14.2,4-19.1C54.1,34.4,51.2,31.5,47.3,29.7z M32.9,43.2c-3.5,0.2-7.1-1.4-7.3-4.7c-0.1-2.5,1.8-5.2,7.5-5.6c0.7,0,1.3-0.1,1.9-0.1c2.1,0,4,0.2,5.8,0.6C40.2,41.6,36.4,43,32.9,43.2z"/> </svg> </span> </div> <span class="visually-hidden">threads</span> </a> <a href="https://www.x.com/freeagent/" class="social-link" data-social-link="x" cd_index="1" event_action="Social Icon" event_category="Trust Signal" event_label="x" event_name="Trust Signal" event_value="5"><div inert=""> <span class="icon icon--px-24 color--white"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" focusable="false" height="64" width="64"> <path d="M38.1,27.1L61.9,0h-5.6L35.6,23.5L19.1,0H0l25,35.6L0,64h5.6l21.8-24.9L44.9,64H64 M7.7,4.2h8.7L56.3,60h-8.7"/> </svg> </span> </div> <span class="visually-hidden">x</span> </a> </div> <div class="flex gap--px-8"> <a href="/features/security/"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,h_96/dpr_auto,f_auto/website-images/shared/logo-cyber-essentials-plus.png" alt="Cyber Essentials Plus Accreditation logo" height="48" img_size_override="h_96" loading="lazy"/> </a><a href="https://www.plainenglish.co.uk/"> <img src="https://freeagent-res.cloudinary.com/image/upload/c_limit,h_96/dpr_auto,f_auto/website-images/logos/Internet_Crystal_Mark.png" alt="The FreeAgent website is part of the Plain English Campaign" height="48" img_size_override="h_96" loading="lazy"/> </a> </div> </div> <div class="flex gap--x-small margin-inline--auto md-margin-inline--none md-margin-left--auto width--fit-content"> <label class="text-preset-7 color--white" for="LocationSelect">Select location:</label> <select class="LocationSelect" id="LocationSelect" data-js-location-select> <option value="GB" id="GB" selected> United Kingdom </option> <option value="US" id="US"> United States </option> <option value="EN" id="EN"> Global </option> </select> </div> </div> <div class="grid" data-t-footer-copyright> <div class="grid__item md-10 lg-8"> <small class="color--blue-30"> <p class="text-preset-7 margin-bottom--small">FreeAgent is registered with the Financial Conduct Authority under the Payment Services Regulations 2017 (register no. 799763) for the provision of account information services</p> <p class="text-preset-7 margin-bottom--small">Registered in sunny Scotland No. SC316774 - One Edinburgh Quay, 133 Fountainbridge, Edinburgh, Scotland, UK EH3 9QG</p> <p class="text-preset-7">Copyright © 2025 by FreeAgent Central</p> </small> </div> </div> </div> </footer> <script src="/components/javascript/small_business_segmentation-dd77228f.js"></script> <script type="text/plain" class="optanon-category-C0003" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script> <script type="text/plain" class="optanon-category-C0003" src="//geoip-js.com/js/apis/geoip2/v2.1/geoip2.js" defer></script> </body> </html>