1<!DOCTYPE html> 2<html lang="en-US"> 3 <head>
4<script> 5 window.ddjskey = "D9F68DAD89670E48567E99279F458A"; 6 window.ddoptions = {}; 7 </script>
7 8
8<script src="https://dd.bostonmagazine.com/tags.js" async> 9</script>
9 10 11 <meta name="viewport" content="width=device-width, initial-scale=1" /> 12 <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
12<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1134648183",accountID:"2293006",trustKey:"2293006",xpid:"VgQOUlZTDhABVFZaBgEHVl0I",licenseKey:"b9d80a2312",applicationID:"1078100099",browserID:"1134648183"};;/*! For license information please see nr-loader-spa-1.322.0.min.js.LICENSE.txt */ 13(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
13e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
13const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
13if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
13o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
13(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
13;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.322.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,s,a)=>
13{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-SARROoir04gFygxlr/+mTI+PyMeFL+epi1vnUA2G5mTQ7s3G44ItQBJKbOaIMdIE5OBzuaKhb4k5JYta0NICxg==",249:"sha512-6DKQo5WP7YlpzX6l9UfYkgGLGK2oITdoaYTcZtgl5Foa22NY63lED/0z1hBBLeD7qZCz/YdlY19/r8drlol1tg==",212:"sha512-CYxuvSpDx6ErqWJwAvpoHn54eY37YdMcFao/axOumlw3BsSL7yioOeB2LWViY/Njs818sQG10dSglUhYCMfLPw==",238:"sha512-mvbMILWa3ohYst+u6TLfNrmtY2swUIB3rbJFN/uzt3W62KhgvUVwB81UEZ1R0/it5bfrQ5EVz864pi/CAmucNQ=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
13ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
13{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
13null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
13dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
13imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
13return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,ye.ZF)(),a=(0,ye.el)(),o=Date.now(),c={spanId:s,traceId:a,timestamp:o};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,a),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,o,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,a,o,r,n,i)),c}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
13!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
13if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
13);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
13class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
13h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
13 14 <meta content="utf-8" http-equiv="encoding"> 15
15<script type="text/javascript" id="OptanonWrapper"> 16 /** 17 * Delete all cookies except whitelisted ones 18 */ 19 function deleteUnconsentedCookies() { 20 // Get all cookies 21 const cookies = document.cookie.split(';'); 22 23 // Get whitelisted cookies from PHP 24 const whitelistedCookies = ["wordpress_logged_in","wordpress_logged_in_*","wordpress_sec_*","OptanonConsent","OptanonAlertBoxClosed","eupubconsent-v2","OneTrustWPCCPANotice","OneTrustGroupConsent","gform_*","gf_csrf_token_*","ep_auth_token","wp-query-monitor-*","wp_fail2ban_*","srm_redirect_*"]; 25 26 // Get all domains to try 27 const domain = window.location.hostname; 28 const domains = domain.split('.'); 29 const paths = ['/', '']; 30 31 // Try to delete each cookie 32 cookies.forEach(cookie => { 33 const cookieName = cookie.split('=')[0].trim(); 34 35 // Check if cookie matches any whitelist pattern 36 const isWhitelisted = whitelistedCookies.some(pattern => { 37 const regexPattern = pattern 38 .replace(/\./g, '\\.') 39 .replace(/\*/g, '.*'); 40 return new RegExp('^' + regexPattern + '$').test(cookieName); 41 }); 42 43 if (!isWhitelisted) { 44 45 // Try every combination of domain and path 46 domains.forEach((d, i) => { 47 const domainPart = '.' + domains.slice(i).join('.'); 48 paths.forEach(path => { 49 // Try with domain 50 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domainPart}; path=${path}`; 51 // Try without domain 52 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}`; 53 // Try with exact domain 54 document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domain}; path=${path}`; 55 }); 56 }); 57 } 58 }); 59 } 60 /** 61 * OptanonWrapper callback function. We use the OptanonWrapper function to listen 62 * for a user event and determine script behavior based on the user event. 63 * 64 * @return void 65 */ 66 function OptanonWrapper() { 67 68 // Get all registered script IDs from js_onetrust_handles. 69 const scriptIds = ["mc-datalayer-yaml","gpt","mc-ads","mc-hubspot-subscription-form","mc-integrations-hubspot","mc-integrations-hubspot-legacy","metrocorp-ads-secondary","nativo-tracking"]; 70 71 // These will be needed for the fetch request, to delete HttpOnly cookies. 72 const ajaxurl = 'https://www.bostonmagazine.com/wp-admin/admin-ajax.php'; 73 const nonce = '70dec35bdd'; 74 75 76 // OneTrust event listener that fires when a user confirms consent preferences in the banner. 77 Optanon.OnConsentChanged( function() { 78 79 // Get the active groups from a OneTrust global. 80 const activeGroups = window.OnetrustActiveGroups; 81 const hasDeclinedCategories = !activeGroups.includes('C0002') || 82 !activeGroups.includes('C0003') || 83 !activeGroups.includes('C0004'); 84 85 // if any category is declined, disable all OT registered scripts. 86 if (hasDeclinedCategories) { 87 // Disable all tracked scripts 88 scriptIds.forEach(id => { 89 const script = document.getElementById(id); 90 if (script) { 91 script.type = 'text/plain'; 92 } 93 }); 94 // Delete all client side cookies except whitelisted ones. 95 deleteUnconsentedCookies(); 96 97 // Server request to delete server side (HttpOnly) cookies. 98 fetch(ajaxurl, { 99 method: 'POST', 100 credentials: 'same-origin', 101 headers: { 102 'Content-Type': 'application/x-www-form-urlencoded', 103 }, 104 body: new URLSearchParams({ 105 action: 'delete_unconsented_cookies', 106 nonce: nonce 107 }) 108 }); 109 } 110 }); 111 } 112 </script>
112 113
113<script type="text/javascript" id="ot-inserter"> 114 (function() { 115 const otUrl = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js'; 116 const otScript = document.createElement('script'); 117 otScript.async = true; 118 otScript.type = 'text/javascript'; 119 otScript.src = otUrl; 120 otScript.setAttribute('id', 'onetrustSDK'); 121 otScript.setAttribute('charset', 'UTF-8'); 122 otScript.setAttribute('data-domain-script', '01947541-75bb-7dce-8570-43f9ca73af23'); 123 const otNode = document.getElementById('ot-inserter'); 124 otNode.parentNode.insertBefore(otScript, otNode.nextSibling); 125 })(); 126 </script>
126 127 <link rel="preconnect" href="https://securepubads.g.doubleclick.net" /><link rel="preconnect" href="https://www.googleadservices.com" /><link rel="preconnect" href="https://s.ntv.io" /><link rel="preconnect" href="https://ib.adnxs.com" /><link rel="preconnect" href="https://ap.lijit.com" /> <!-- Below is a recommended list of pre-connections, which allow the network to establish each connection quicker, speeding up response times and improving ad performance. --> 128 <link rel="preconnect" href="https://a.pub.network/" crossorigin /> 129 <link rel="preconnect" href="https://b.pub.network/" crossorigin /> 130 <link rel="preconnect" href="https://c.pub.network/" crossorigin /> 131 <link rel="preconnect" href="https://d.pub.network/" crossorigin /> 132 <link rel="preconnect" href="https://btloader.com/" crossorigin /> 133 <link rel="preconnect" href="https://api.btloader.com/" crossorigin /> 134 <link rel="preconnect" href="https://cdn.confiant-integrations.net" crossorigin /> 135 <!-- Below is a link to a CSS file that accounts for Cumulative Layout Shift, a new Core Web Vitals subset that Google uses to help rank your site in search --> 136 <!-- The file is intended to eliminate the layout shifts that are seen when ads load into the page. If you don't want to use this, simply remove this file --> 137 <!-- To find out more about CLS, visit https://web.dev/vitals/ --> 138 <link rel="stylesheet" href="https://a.pub.network/bostonmagazine-com/cls.css"> 139
139<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 140 var freestar = freestar || {}; 141 freestar.queue = freestar.queue || []; 142 freestar.config = freestar.config || {}; 143 freestar.config.enabled_slots = []; 144 freestar.config.targeting = [ 145 { 146 "bostonmagazine_banner-1": { 147 "pos": ["1"], 148 } 149 }, 150 { 151 "bostonmagazine_banner-2": { 152 "pos": ["2"], 153 } 154 }, 155 { 156 "bostonmagazine_banner-3": { 157 "pos": ["3"], 158 } 159 }, 160 { 161 "bostonmagazine_rail-1": { 162 "pos": ["1"], 163 } 164 }, 165 { 166 "bostonmagazine_rail-2": { 167 "pos": ["2"], 168 } 169 }, 170 { 171 "bostonmagazine_rail-3": { 172 "pos": ["3"], 173 } 174 }, 175 { 176 "bostonmagazine_curated_module-1": { 177 "pos": ["1"], 178 } 179 }, 180 { 181 "bostonmagazine_curated_module-2": { 182 "pos": ["2"], 183 } 184 }, 185 { 186 "bostonmagazine_curated_module-3": { 187 "pos": ["3"], 188 } 189 }, 190 ]; 191 freestar.initCallback = function () { (freestar.config.enabled_slots.length === 0) ? freestar.initCallbackCalled = false : freestar.newAdSlots(freestar.config.enabled_slots) } 192 </script>
192 193
193<script src="https://a.pub.network/bostonmagazine-com/pubfig.min.js" data-cfasync="false" async type="text/plain" class="optanon-category-C0004"></script>
193 194 <style> 195 #pmLink { 196 visibility: hidden; 197 text-decoration: none; 198 cursor: pointer; 199 background: transparent; 200 border: none; 201 } 202 203 #pmLink:hover { 204 visibility: visible; 205 color: grey; 206 } 207 </style> 208
208<script type="text/plain" class="optanon-category-C0004"> 209 freestar.config.disabledProducts = { 210 superflex: true 211 }; 212 </script>
212 213 <link rel="preconnect" href="https://www.bostonmagazine.com/" /><link rel="preconnect" href="https://s.ntv.io/" /><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1, noarchive' /> 214 215 <!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v27.9) - https://yoast.com/product/yoast-seo-premium-wordpress/ --> 216 <title>City Life Archives - Boston Magazine</title> 217 <meta name="description" content="Discover the news about Boston from the people who know the city best. Boston Magazine's news section will keep you up to date on the most relevant politics, weather, sports, policies, neighborhoods, and more." /> 218 <link rel="canonical" href="https://www.bostonmagazine.com/news/" /> 219 <link rel="next" href="https://www.bostonmagazine.com/news/page/2/" /> 220 <meta property="og:locale" content="en_US" /> 221 <meta property="og:type" content="article" /> 222 <meta property="og:title" content="City Life Archives" /> 223 <meta property="og:url" content="https://www.bostonmagazine.com/news/" /> 224 <meta property="og:site_name" content="Boston Magazine" /> 225 <meta name="twitter:card" content="summary_large_image" /> 226 <!-- / Yoast SEO Premium plugin. --> 227 228 229<link rel='dns-prefetch' href='//securepubads.g.doubleclick.net' /> 230<link rel='dns-prefetch' href='//s.ntv.io' /> 231<link rel='dns-prefetch' href='//use.typekit.net' /> 232<link rel='dns-prefetch' href='//p.typekit.net' /> 233<link rel='preconnect' href='https://use.typekit.net' /> 234<link rel='preconnect' href='https://p.typekit.net' /> 235<link rel="alternate" type="application/rss+xml" title="Boston Magazine » City Life Vertical Feed" href="https://www.bostonmagazine.com/news/feed/" /> 236<style id="wp-img-auto-sizes-contain-inline-css"> 237img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 238/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 239</style> 240<style id="wp-emoji-styles-inline-css"> 241 242 img.wp-smiley, img.emoji { 243 display: inline !important; 244 border: none !important; 245 box-shadow: none !important; 246 height: 1em !important; 247 width: 1em !important; 248 margin: 0 0.07em !important; 249 vertical-align: -0.1em !important; 250 background: none !important; 251 padding: 0 !important; 252 } 253/*# sourceURL=wp-emoji-styles-inline-css */ 254</style> 255<style id="classic-theme-styles-inline-css"> 256/*! This file is auto-generated */ 257.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 258/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 259</style> 260 261<style id="global-styles-inline-css"> 262:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
262--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
262.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 263/*# sourceURL=global-styles-inline-css */ 264</style> 265 266<link rel='stylesheet' id='metro_typekit-css' href='https://use.typekit.net/fhn8jjz.css?ver=7.1.2' media='all' /> 267<link rel='stylesheet' id='bostonmagazine-css' href='https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/css/boston.min.css?ver=1790091448' media='all' /> 268<link rel='stylesheet' id='tablepress-default-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/css/build/default.css?ver=3.2.1-BGMP' media='all' /> 269<link rel='stylesheet' id='tablepress-datatables-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.buttons.css?ver=3.2.1-BGMP' media='all' /> 270<link rel='stylesheet' id='tablepress-datatables-fixedheader-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedheader.css?ver=3.2.1-BGMP' media='all' /> 271<link rel='stylesheet' id='tablepress-datatables-fixedcolumns-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.fixedcolumns.css?ver=3.2.1-BGMP' media='all' /> 272<link rel='stylesheet' id='tablepress-datatables-scroll-buttons-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.scroll-buttons.css?ver=3.2.1-BGMP' media='all' /> 273<link rel='stylesheet' id='tablepress-responsive-tables-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/responsive-tables.css?ver=3.2.1-BGMP' media='all' /> 274<link rel='stylesheet' id='tablepress-datatables-columnfilterwidgets-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.columnfilterwidgets.css?ver=3.2.1-BGMP' media='all' /> 275<link rel='stylesheet' id='tablepress-datatables-serverside-processing-css' href='https://bomag.o0bc.com/wp-content/plugins/tablepress-premium/modules/css/build/datatables.serverside-processing.css?ver=3.2.1-BGMP' media='all' />
276<script id="gpt-js-extra"> 277var mcAds = {"advertiserSlug":"","currentSite":"bostonmagazine","gptNetworkID":"/61381659/site195.tmus/","hasBannerThree":"true","isArchive":"false","isGeodir":"false","isSingle":"","postType":"post","slots":{"banner-1":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [320, 50], [970, 90]]","id":"banner-1","mapping":"bannerOneMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"false","isPrebid":"true"},"banner-2":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90]]","id":"banner-2","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"banner-3":{"adUnit":"banner","adSizes":"[[728, 90], [320, 100], [970, 250], [300, 250], [320, 50], [970, 90], [1,1]]","id":"banner-3","mapping":"bannerMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"adslot_0":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_0","targeting":{"pos":"1"}},"adslot_1":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_1","targeting":{"pos":"2"}},"adslot_2":{"adUnit":"native_river","adSizes":"fluid","id":"adslot_2","targeting":{"pos":"3"}},"curated_module-1":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-1","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"curated_module-2":{"adUnit":"curated_module","adSizes":"fluid","id":"curated_module-2","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"false","isLazy":"true","isPrebid":"false"},"rail-1":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-1","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"1"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-2":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-2","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"2"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"rail-3":{"adUnit":"rail","adSizes":"[[320, 100], [320, 50], [300, 250], [300, 600], [1,1]]","id":"rail-3","mapping":"railMapping","hasSettings":true,"targeting":{"pos":"3"},"isRefresh":"true","isLazy":"true","isPrebid":"true"},"toprailsponsor-1":{"adUnit":"toprailsponsor","adSizes":"[[300, 150], [300, 90], [1,1]]","id":"toprailsponsor-1","mapping":"toprailMapping","targeting":{"pos":"1"}},"interstitial":{"adUnit":"interstitial","id":"interstitial","outOfPage":true},"skin":{"adUnit":"skin","adSizes":"[1, 1]","id":"skin"},"ad-reveal":{"adUnit":"ad-reveal","adSizes":"[[1300, 500], [780, 300], [360, 585]]","id":"ad-reveal","hasSettings":true,"mapping":"adrevealMapping","isRefresh":"false","isLazy":"false","isPrebid":"false"},"bottom-anchor":{"adUnit":"BOTTOM_ANCHOR","id":"bottom-anchor","isMobile":true,"outOfPage":true,"outOfPageFormat":"BOTTOM_ANCHOR","targeting":{"test":"outofpage"}}},"slotsFired":[],"slotsViewed":[],"targeting":{"vertical":"news","cat":[],"environment":"production","post_type":"section","vertical-landing":"news-171017"},"debug":""}; 278//# sourceURL=gpt-js-extra 279</script>
vendor: 1 bytes, line 279
279
280<script type="text/plain" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" id="gpt" class="optanon-category-C0004"></script>
280<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads/dist/js/metrocorp-ads.js?ver=1.0.0" id="mc-ads" class="optanon-category-C0004"></script>
280<script type="text/plain" src="https://s.ntv.io/serve/load.js" id="nativo-tracking" class="optanon-category-C0004"></script>
280<link rel="https://api.w.org/" href="https://www.bostonmagazine.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.bostonmagazine.com/wp-json/wp/v2/mc-tax-vertical/171017" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.bostonmagazine.com/xmlrpc.php?rsd" /> 281<meta name="generator" content="WordPress 7.1.2" /> 282<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/FoundersGrotesk/FoundersGroteskX-CondensedWeb-Medium.woff' as='font' type='font/woff' crossorigin> 283<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-regular.woff2' as='font' type='font/woff' crossorigin> 284<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter/inter-v12-latin-500.woff2' as='font' type='font/woff' crossorigin> 285<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-600.woff2' as='font' type='font/woff' crossorigin> 286<link rel='preload' href='https://www.bostonmagazine.com/wp-content/themes/metrocorp/dist/fonts/inter-v12-latin-700.woff2' as='font' type='font/woff' crossorigin>
287<script type="application/ld+json">{ 288 "@context": "http:\/\/schema.org", 289 "@type": "WebPage", 290 "publisher": { 291 "@type": "Organization", 292 "name": "Boston Magazine", 293 "logo": { 294 "@type": "ImageObject", 295 "url": "https:\/\/www.bostonmagazine.com\/wp-content\/themes\/metrocorp-bostonmagazine\/images\/logo-bostonmag.png" 296 } 297 }, 298 "mainEntityOfPage": { 299 "@type": "WebPage", 300 "@id": "https:\/\/www.bostonmagazine.com\/news" 301 } 302}</script>
302<meta name="google-site-verification" content="0XaV9QKUdAM56rDbamBZ6GVmS2NqzAhSO1DgPDye__o" /><link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-32x32.png" sizes="32x32" /> 303<link rel="icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-192x192.png" sizes="192x192" /> 304<link rel="apple-touch-icon" href="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-180x180.png" /> 305<meta name="msapplication-TileImage" content="https://bomag.o0bc.com/wp-content/uploads/sites/2/2017/10/cropped-boston-magazine-favicon-270x270.png" />
306<script type="text/javascript"> 307 window.dataLayer = window.dataLayer || []; 308</script>
308 309
310<script type="text/javascript"> 311 window.gtag = window.gtag || function() { 312 window.dataLayer.push( arguments ); 313 }; 314 315 /** 316 * Read the consent state OneTrust stores in the OptanonConsent cookie. 317 * 318 * @return {?string} The raw groups value, or null when nothing is stored. 319 */ 320 function mcStoredConsentGroups() { 321 var cookie = document.cookie.match( /(?:^|;\s*)OptanonConsent=([^;]*)/ ); 322 323 if ( ! cookie ) { 324 return null; 325 } 326 327 try { 328 var groups = decodeURIComponent( cookie[1] ).match( /groups=([^&]*)/ ); 329 return groups && groups[1] ? groups[1] : null; 330 } catch ( e ) { 331 return null; 332 } 333 } 334 335 /** 336 * Map OneTrust categories onto Consent Mode v2 signals. 337 * 338 * Reads either the cookie format ( C0002:1 ) or the OnetrustActiveGroups 339 * format ( ,C0001,C0002, ) so the default and update commands cannot 340 * drift apart. 341 * 342 * @param {string} groups The category string to read. 343 * @return {Object} Consent Mode v2 signals. 344 */ 345 function mcConsentSignals( groups ) { 346 var isActive = function( category ) { 347 return -1 !== groups.indexOf( category + ':1' ) || 348 -1 !== groups.indexOf( ',' + category + ',' ); 349 }; 350 351 var advertising = isActive( 'C0004' ) ? 'granted' : 'denied'; 352 353 return { 354 analytics_storage: isActive( 'C0002' ) ? 'granted' : 'denied', 355 ad_storage: advertising, 356 ad_user_data: advertising, 357 ad_personalization: advertising 358 }; 359 } 360 361 function mcUpdateGoogleConsent() { 362 window.gtag( 'consent', 'update', mcConsentSignals( window.OnetrustActiveGroups || '' ) ); 363 } 364 365 var mcStoredGroups = mcStoredConsentGroups(); 366 var mcDefaultConsent = mcStoredGroups ? mcConsentSignals( mcStoredGroups ) : { 367 analytics_storage: 'denied', 368 ad_storage: 'denied', 369 ad_user_data: 'denied', 370 ad_personalization: 'denied' 371 }; 372 373 mcDefaultConsent.wait_for_update = 1000; 374 375 window.gtag( 'consent', 'default', mcDefaultConsent ); 376 377 window.addEventListener( 'OneTrustGroupsUpdated', mcUpdateGoogleConsent ); 378 379 if ( window.OnetrustActiveGroups ) { 380 mcUpdateGoogleConsent(); 381 } 382</script>
382 383
384<script type="text/javascript">dataLayer.push({"content_type":"non-post","post_id":"non-post"}); var gtmLoaded=true;</script>
384 385<!-- Google Tag Manager --> 386<noscript> 387<iframe data-src="//www.googletagmanager.com/ns.html?id=GTM-WFHFBM" height="0" width="0" class="optanon-category-C0004" style="display:none;visibility:hidden"></iframe></noscript>
388<script type="text/javascript"> 389if ( typeof dataLayer[0].gaReferer === 'undefined' ) { 390 var referrer = document.referrer, siteURL = window.location.origin; 391 if ( ! referrer || referrer.indexOf( siteURL ) === 0 ) { 392 dataLayer[0].gaReferer = null; 393 } else { 394 dataLayer[0].gaReferer = referrer; 395 } 396} 397 398dataLayer.push({ 399 'gtm.start': new Date().getTime(), 400 event: 'gtm.js' 401}); 402</script>
vendor: 1 bytes, line 402
402
403<script async type="text/javascript" src="https://www.googletagmanager.com/gtm.js?id=GTM-WFHFBM"></script>
403<!-- End Google Tag Manager --> 404<!-- Start of HubSpot Embed Code -->
405<script type="text/plain" class="optanon-category-C0004" id="hs-script-loader" async defer src="//js.hs-scripts.com/43837035.js"></script>
405 406<!-- End of HubSpot Embed Code --> 407<meta name="p:domain_verify" content="3a9adbe7c6bf24035a0284a21da2840a"/> 408 </head> 409 <body class="archive tax-mc-tax-vertical term-news term-171017 wp-theme-metrocorp wp-child-theme-metrocorp-bostonmagazine current-site-bostonmagazine"> 410 <div class="hat-nav container"> 411 <nav class="hat-nav__menu"> 412 <ul class="hat-nav__list"> 413 <li> 414 <a href="https://www.bostonglobe.com/?p1=HatNav_BoMag" data-track-name="BDCHatNav_BG">The Boston Globe</a> 415 </li> 416 <li> 417 <a href="https://www.boston.com/?p1=HatNav_BoMag" data-track-name="BDCHatNav_BDC">Boston.com</a> 418 </li> 419 <li> 420 <a href="https://www.bostonmagazine.com/?utm_source=bomag&utm_medium=referral&utm_campaign=hatnav_bomag" class="active">Boston Magazine</a> 421 </li> 422 <li> 423 <a href="https://www.boston.com/tag/the-b-side/?p1=HatNav_BoMag" data-track-name="BDCHatNav_BSide">B-Side</a> 424 </li> 425 </ul> 426 </nav> 427</div> 428 <div align="center" data-freestar-ad="__360x585 __1300x500" id="bostonmagazine_ad-reveal" class="gpt-ad"> 429
429<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 430 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_ad-reveal", slotId: "bostonmagazine_ad-reveal" }); 431 </script>
431 432 </div><div id="under-reveal"></div><div class="header-navigation-spacer"></div> 433<div class="header-navigation js-header-menu-full" id="js-header-navigation"> 434 <div class="container header-navigation-inner"> 435 <div class="navigation-logo"> 436 <a href="//www.bostonmagazine.com" aria-label="Boston Magazine" > 437 <svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-logo"></svg> </a> 438 </div> 439 <button 440 id="js-mobile-menu-toggle" 441 class="mobile-menu-toggle" 442 aria-hidden="true" 443 aria-label="Toggle navigation menu" 444 aria-expanded="false" 445 aria-controls="js-header-navigation-wrapper" 446 > 447 <svg class="mc-icon hamburger" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-hamburger"></svg> <svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg> </button> 448 449 <div class="header-menu-wrapper" id="js-header-navigation-wrapper"> 450 451 <div class="header-menu"><ul id="menu-primary-menu" class="menu-header-main"><li id="menu-item-2933157" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li> 452<li id="menu-item-2417140" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a> 453<ul class="sub-menu"> 454 <li id="menu-item-2417143" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li> 455 <li id="menu-item-2417146" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li> 456 <li id="menu-item-2669250" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li> 457 <li id="menu-item-2763054" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li> 458 <li id="menu-item-2452224" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li> 459 <li id="menu-item-2464168" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li> 460 <li id="menu-item-2477508" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li> 461 <li id="menu-item-2511746" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li> 462</ul> 463</li> 464<li id="menu-item-2351177" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a> 465<ul class="sub-menu"> 466 <li id="menu-item-2667249" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li> 467 <li id="menu-item-2351199" class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li> 468 <li id="menu-item-2429289" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li> 469</ul> 470</li> 471<li id="menu-item-2351186" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a> 472<ul class="sub-menu"> 473 <li id="menu-item-2593122" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li> 474</ul> 475</li> 476<li id="menu-item-2351180" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
476ical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a> 477<ul class="sub-menu"> 478 <li id="menu-item-2351202" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li> 479 <li id="menu-item-2351205" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li> 480 <li id="menu-item-2351206" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li> 481</ul> 482</li> 483<li id="menu-item-2456643" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a> 484<ul class="sub-menu"> 485 <li id="menu-item-2593127" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides & Advice</a></li> 486 <li id="menu-item-2351247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li> 487 <li id="menu-item-2351214" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li> 488 <li id="menu-item-2351244" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li> 489 <li id="menu-item-2757961" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li> 490</ul> 491</li> 492<li id="menu-item-2351189" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home & Property</a> 493<ul class="sub-menu"> 494 <li id="menu-item-2593129" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties & News</a></li> 495 <li id="menu-item-2477503" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li> 496 <li id="menu-item-2511748" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li> 497 <li id="menu-item-2351251" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li> 498 <li id="menu-item-2351253" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li> 499</ul> 500</li> 501<li id="menu-item-2351183" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a> 502<ul class="sub-menu"> 503 <li id="menu-item-2351248" class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li> 504 <li id="menu-item-2351220" class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts & Entertainment</a></li> 505 <li id="menu-item-2351223" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li> 506 <li id="menu-item-2803594" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li> 507</ul> 508</li> 509<li id="menu-item-2351197" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a> 510<ul class="sub-menu"> 511 <li id="menu-item-2806575" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li> 512</ul> 513</li> 514<li id="menu-item-174761" class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a> 515<ul class="sub-menu"> 516 <li id="menu-item-2734635" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li> 517</ul> 518</li> 519</ul></div> 520 <div class="header-tablet-elements">
521 <div class="header-subscribe"> 522 <div class="thin-line"> 523 <span class="screen-reader-text">Subscribe</span> 524 <svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-subscribe"></svg> </div> 525 <ul id="menu-top-left" class="menu-header-subscribe"><li id="menu-item-2351233" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1732211763015&lsid=43261101552083486&vid=6">ALL ACCESS</a></li> 526<li id="menu-item-2655360" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li> 527<li id="menu-item-2351235" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li> 528</ul> </div> 529 530 <div class="header-social"> 531 <div class="thin-line"> 532 <span class="screen-reader-text">Follow</span> 533 <svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-follow"></svg> </div> 534 <ul id="menu-social" class="menu-header-social"><li id="menu-item-2351226" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 535<li id="menu-item-2351228" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 536<li id="menu-item-2351231" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 537</ul> </div> 538 </div> 539 540 </div> 541 <div class="header-search"> 542 <div class="search-form-wrapper" id="js-search-form-wrapper" aria-hidden="true"> 543 <form role="search" method="get" class="search-form" action="https://www.bostonmagazine.com/"> 544 <label> 545 <span class="screen-reader-text">Search for:</span> 546 <input type="search" class="search-field" 547 placeholder="Search â¦" 548 value="" name="s" 549 title="Search for:" /> 550 </label> 551 <button type="submit"> 552 <svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-icon-search"></svg> <span class="screen-reader-text">Search</span> 553 </button> 554</form>
555 </div> 556 <button id="js-toggle-search" aria-expanded="false" aria-controls="js-search-form-wrapper"> 557 <svg class="mc-icon icon-search" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-icon-search"></svg> <svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg> </button> 558 </div> 559 </div> 560</div> 561 </div> 562 <header class="site-header" role="banner" id="js-header"> 563 564 <div class="site-header-inner container"> 565 566 <div class="header-social"> 567 <div class="thin-line"> 568 <span class="screen-reader-text">Follow</span> 569 <svg class="mc-icon bostonmagazine-follow" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-follow"></svg> </div> 570 <ul id="menu-social-1" class="menu-header-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 571<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 572<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 573</ul> </div> 574 575 <div class="header-logo"> 576 <div itemscope itemtype="https://schema.org/Organization"> <a href="https://www.bostonmagazine.com/news" aria-label="Boston Magazine"> 577 <svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-section-news"></svg> </a> 578 <span class="section-front-tagline"></span></div></div> 579 580 <div class="header-subscribe"> 581 <div class="thin-line"> 582 <span class="screen-reader-text">Subscribe</span> 583 <svg class="mc-icon bostonmagazine-subscribe" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-subscribe"></svg> </div> 584 <ul id="menu-top-left-1" class="menu-header-subscribe"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351233"><a href="https://w1.buysub.com/pubs/PB/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1732211763015&lsid=43261101552083486&vid=6">ALL ACCESS</a></li> 585<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2655360"><a href="/newsletters">NEWSLETTERS</a></li> 586<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351235"><a href="https://bostonglobemedia.cloud.buysub.com">MY ACCOUNT</a></li> 587</ul> </div> 588 589 </div> 590 </header> 591 592 <div class="mobile-section-front"> 593 <a href="https://www.bostonmagazine.com/news"> 594 <svg class="mc-icon bostonmagazine-section-news" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-section-news"></svg> </a> 595 <span class="section-front-tagline"> 596 </span> 597 </div> 598 599 <div class="header-navigation-secondary container"><ul id="menu-primary-menu-1" class="menu-topics"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2933157"><a href="https://www.bostonmagazine.com/issues/">Magazine</a></li> 600<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2417140"><a href="/find-it-boston-search/">Find It / Boston</a> 601<ul class="sub-menu"> 602 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417143"><a href="/find-a-doctor/">Doctors</a></li> 603 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2417146"><a href="/dentists/">Dentists</a></li> 604 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2669250"><a href="/lawyers/">Lawyers</a></li> 605 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2763054"><a href="/senior-living/">Senior Living</a></li> 606 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2452224"><a href="/wedding/">Wedding Experts</a></li> 607 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2464168"><a href="/private-schools/">Private Schools</a></li> 608 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477508"><a href="/home-design/">Home Design Experts</a></li> 609 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511746"><a href="/real-estate-agents/">Real Estate Agents</a></li> 610</ul> 611</li> 612<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
612ical current-menu-item menu-item-has-children menu-item-2351177"><a href="https://www.bostonmagazine.com/news" aria-current="page">City Life</a> 613<ul class="sub-menu"> 614 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2667249"><a href="/fashion-style/">Style</a></li> 615 <li class="no-children menu-item menu-item-type-custom menu-item-object-custom menu-item-2351199"><a href="/education/">Education</a></li> 616 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2429289"><a href="/private-schools/">Find a Private School</a></li> 617</ul> 618</li> 619<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351186"><a href="https://www.bostonmagazine.com/restaurants">Restaurants</a> 620<ul class="sub-menu"> 621 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2593122"><a href="/best-restaurants-in-boston/">50 Best Restaurants</a></li> 622</ul> 623</li> 624<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351180"><a href="https://www.bostonmagazine.com/health">Wellness</a> 625<ul class="sub-menu"> 626 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2351202"><a href="https://www.bostonmagazine.com/health">Be Well Boston</a></li> 627 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351205"><a href="/dentists/">Find a Dentist</a></li> 628 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351206"><a href="/find-a-doctor/">Find a Doctor</a></li> 629</ul> 630</li> 631<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2456643"><a href="/weddings/">Weddings</a> 632<ul class="sub-menu"> 633 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593127"><a href="https://www.bostonmagazine.com/weddings">Guides & Advice</a></li> 634 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351247"><a href="/weddings/2026/01/06/best-of-boston-weddings-2026/">Best of Boston Weddings</a></li> 635 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351214"><a href="/wedding/">Find a Wedding Expert</a></li> 636 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351244"><a href="/category/real-weddings/">Real Weddings</a></li> 637 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2757961"><a href="/bubblybrunch">Bubbly Brunch Event</a></li> 638</ul> 639</li> 640<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351189"><a href="https://www.bostonmagazine.com/property">Home & Property</a> 641<ul class="sub-menu"> 642 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-2593129"><a href="https://www.bostonmagazine.com/property">Properties & News</a></li> 643 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2477503"><a href="/home-design/">Find a Home Design Expert</a></li> 644 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2511748"><a href="/realestate-agents/">Find a Real Estate Agent</a></li> 645 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351251"><a href="/tag/home-design">Home Design</a></li> 646 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351253"><a href="/property/2024/11/14/best-of-boston-home-2025/">Best of Boston Home</a></li> 647</ul> 648</li> 649<li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vertical menu-item-has-children menu-item-2351183"><a href="https://www.bostonmagazine.com/arts-entertainment">Things To Do</a> 650<ul class="sub-menu"> 651 <li class="topics-only menu-item menu-item-type-custom menu-item-object-custom menu-item-2351248"><a href="https://www.bostonmagazine.com/things-to-do/weekend/">Things To Do This Weekend</a></li> 652 <li class="menu-item menu-item-type-taxonomy menu-item-object-mc-tax-vert
652ical menu-item-2351220"><a href="https://www.bostonmagazine.com/arts-entertainment">Arts & Entertainment</a></li> 653 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351223"><a href="/events/">Boston magazine Events</a></li> 654 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2803594"><a href="https://www.bostonmagazine.com/bestofbostonsoiree/">Best of Boston Soiree 2026</a></li> 655</ul> 656</li> 657<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-2351197"><a href="/travel/">Travel</a> 658<ul class="sub-menu"> 659 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2806575"><a href="http://bostonmagazine.com/travelawards">New England Travel Awards</a></li> 660</ul> 661</li> 662<li class="menuBes menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-174761"><a href="/best-of-boston/">Best of Boston</a> 663<ul class="sub-menu"> 664 <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2734635"><a href="/best-of-boston/">Latest Winners</a></li> 665</ul> 666</li> 667</ul></div> 668 <div style="width:1px;height:1px;margin:-1px 0 0 0;padding:0;display:block;"> 669 <div align="center" data-freestar-ad="" id="bostonmagazine_skin" class="gpt-ad"> 670
670<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 671 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_skin", slotId: "bostonmagazine_skin" }); 672 </script>
672 673 </div> </div> 674 675 <div align="center" data-freestar-ad="" id="bostonmagazine_interstitial" class="gpt-ad out-of-page"> 676
676<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 677 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_interstitial", slotId: "bostonmagazine_interstitial" }); 678 </script>
678 679 </div><div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad out-of-page"> 680
680<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 681 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" }); 682 </script>
682 683 </div> 684 685 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-1" class="gpt-ad advertisement container"> 686
686<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 687 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-1" }); 688 </script>
688 689 </div> 690 <div class="list-post" style="display:none" aria-hidden="true"> 691 <a href="https://www.bostonmagazine.com/scrapertrap" class="post-image-link"><img width="400" height="250" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="attachment-image-list size-image-list wp-post-image" alt=""></a> 692 693 <div class="list-post-card"> 694 <a href="https://www.bostonmagazine.com/scrapertrap" class="post-slug">I'm a scraper</a> 695 <div class="post-title"> 696 <a href="https://www.bostonmagazine.com/scrapertrap">This search result is here to prevent scraping</a> 697 </div> 698 <div class="post-excerpt"> 699 <p>If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-) 700 Note that clicking the link below will block access to this site for 24 hours.</p> 701 </div> 702 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/scrapertrap" class="byline">I'm a scraper</a></span> 703 </div> 704</div> 705 706 <div class="content-with-sidebar"> 707 <div class="featured-post"> 708 709 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link"> 710 <img width="300" height="200" src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg" class="attachment-thumbnail size-thumbnail" alt="Stone archway above a doorway with the words "PUBLIC SCHOOL" carved into it, set in a brick building with three white-framed windows above." sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 * 2 ) - 35px ), 605px" srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-no-lazy="true" decoding="async" fetchpriority="high" /> </a> 711 <div class="featured-post-card"> 712 <a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a> <h2 class="post-title"> 713 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"> 714 The Top Public High Schools in Greater Boston, Ranked for 2026 </a> 715 </h2> 716 <div class="post-excerpt"> 717 <p> 718 <p><span class="s1">We crunched the numbers to come up with our guide to the regionâs top-performing schools. Does your town make the grade?</span></p> 719 </p> 720 </div> 721 </div> 722 </div> 723 <div class="trending-widget"> 724 <div align="center" data-freestar-ad="__300x150 __300x150" id="bostonmagazine_toprailsponsor-1" class="gpt-ad toprail-bewell"> 725
725<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 726 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_toprailsponsor", slotId: "bostonmagazine_toprailsponsor-1" }); 727 </script>
727 728 </div> 729 <h2 class="title-line">Trending</h2> 730 731 <ol> 732 <li> 733 <h3 class="trending-post-title post-title"> 734 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"> 735 The Top Public High Schools in Greater Boston, Ranked for 2026 </a> 736 </h3> 737 </li> 738 <li> 739 <h3 class="trending-post-title post-title"> 740 <a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/"> 741 Inside Demetri Tsolakis’s Legal Battle With His Former Boss </a> 742 </h3> 743 </li> 744 <li> 745 <h3 class="trending-post-title post-title"> 746 <a href="https://www.bostonmagazine.com/news/2026/09/23/jonathan-tucker-boston/"> 747 Jonathan Tucker Would Like a Word With TD Garden’s Owner </a> 748 </h3> 749 </li> 750 <li> 751 <h3 class="trending-post-title post-title"> 752 <a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/"> 753 A Wildly Inefficient Man’s Guide to Networking After 50 </a> 754 </h3> 755 </li> 756 <li> 757 <h3 class="trending-post-title post-title"> 758 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"> 759 Is College in Boston Still Worth It? </a> 760 </h3> 761 </li> 762 </ol> 763 764</div> 765 766 </div> 767 <div class="container"> 768 <hr class="double"> 769 <div class="grid-content"> 770 <div class="grid-post"> 771 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link"> 772 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words "NOW WHAT?" written in white on the top, set against a white background with the word "Boston" partially visible in large blue letters behind it." decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 773 <div class="grid-post-card"> 774 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"> 775 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"> 776 The Great College Reckoning: Is Higher Education Still Worth It? </a> 777 </h2> 778 </div> 779 </div> 780 <div class="grid-post"> 781 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link"> 782 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 783 <div class="grid-post-card"> 784 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"> 785 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/"> 786 What It Actually Takes to Apply to Private School </a> 787 </h2> 788 </div> 789 </div> 790 <div class="grid-post"> 791 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link"> 792 <img width="300" height="200" class="attachment-thumbnail size-thumbnail lazyload" alt="" decoding="async" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 969px) calc( ( ( 100vw - 30px ) / 3 ) - 35px ), 605px" /> </a> 793 <div class="grid-post-card"> 794 <a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a> <h2 class="post-title"> 795 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/"> 796 Greater Boston’s Top Hospitals for Surgery, By Procedure and Specialty </a> 797 </h2> 798 </div> 799 </div> 800 </div> 801 802 <hr class="solid"> 803 804 </div> 805 806 807 808 <div class="container find-a-pro-container"> 809 <div class="find-a-pro js-opened bdocs-open" id="js-find-a-pro"> 810 <h2 class="find-a-pro-title h2-dirmod-boston"><span><em>Find It Boston</em>What you need, when you need it.</span></h2> 811 <div class="find-a-pro-inner"> 812 <ul class="ul-bostonmagazine"> 813 <li><button class="js-directory-toggle" aria-expanded="true" aria-controls="js-find-a-pro-overlay-9"><span class="button">Doctors</span></button> <div class="find-a-pro-overlay js-expanded" id="js-find-a-pro-overlay-9" aria-hidden="false"> 814 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 815 816 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-9" aria-expanded="true"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 817 <div class="js-directory-form">
818<form id="directory-search-form_9" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/find-a-doctor/" method="get"> 819 820 <div class="directory-search-form__search-input s text"> 821 <label class="search-input-label" for="s_9"><span class="visually-hidden">Search For...</span> 822 823 <input id="s_9" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 824 825 </div> <div class="directory-search-form__search-input cat select"> 826 <label class="search-input-label" for="cat_9"><span class="visually-hidden">Specialty</span> 827 828 <select name="cat[]" id="cat_9" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="370">Addiction Psychiatry</option><option value="376">Adolescent Medicine</option><option value="325">Allergy & Immunology</option><option value="1254">Anesthesiology</option><option value="1246">Anti-Aging Regenerative Medicine</option><option value="1653">Bariatric Surgery</option><option value="408">Cardiac Electrophysiology</option><option value="423">Cardiovascular Disease</option><option value="437">Child & Adolescent Psychiatry</option><option value="442">Child Neurology</option><option value="445">Clinical Genetics</option><option value="460">Colon & Rectal Surgery</option><option value="23">Dermatology</option><option value="478">Developmental-Behavioral Pediatrics</option><option value="1222">Diabetes & Metabolism</option><option value="480">Diagnostic Radiology</option><option value="1261">Emergency Medicine</option><option value="1219">Endocrinology</option><option value="1264">Facial Plastic Surgery/Otolaryngology</option><option value="114">Family Medicine</option><option value="1234">Female Hair Loss</option><option value="496">Gastroenterology</option><option value="499">Geriatric Medicine</option><option value="502">Geriatric Psychiatry</option><option value="505">Gynecologic Oncology</option><option value="512">Hand Surgery</option><option value="513">Hematology</option><option value="866">Hospice & Palliative Medicine</option><option value="515">Infectious Disease</option><option value="1243">Integrative Gastroenterology</option><option value="54">Internal Medicine</option><option value="516">Interventional Cardiology</option><option value="517">Maternal & Fetal Medicine</option><option value="520">Medical Oncology</option><option value="839">Neonatal-Perinatal Medicine</option><option value="529">Nephrology</option><option value="533">Neurological Surgery</option><option value="536">Neurology</option><option value="538">Neuroradiology</option><option value="760">Nuclear Medicine</option><option value="215">Obstetrics & Gynecology</option><option value="540">Ophthalmology</option><option value="971">Orthopedic Surgery</option><option value="1737">Other</option><option value="547">Otolaryngology</option><option value="549">Pain Medicine</option><option value="78">Pathology</option><option value="1014">
828Pediatric Allergy & Immunology</option><option value="1265">Pediatric Anesthesiology</option><option value="553">Pediatric Cardiology</option><option value="1270">Pediatric Critical Care Medicine</option><option value="1252">Pediatric Dermatology</option><option value="1253">Pediatric Emergency Medicine</option><option value="555">Pediatric Endocrinology</option><option value="556">Pediatric Gastroenterology</option><option value="558">Pediatric Hematology-Oncology</option><option value="1646">Pediatric Infectious Diseases</option><option value="560">Pediatric Nephrology</option><option value="1648">Pediatric Neurological Surgery</option><option value="1649">Pediatric Orthopedic Surgery</option><option value="563">Pediatric Otolaryngology</option><option value="565">Pediatric Pulmonology</option><option value="1659">Pediatric Radiology</option><option value="1656">Pediatric Rehabilitation Medicine</option><option value="568">Pediatric Rheumatology</option><option value="571">Pediatric Surgery</option><option value="576">Pediatric Urology</option><option value="1228">
828Pediatrics</option><option value="582">Physical Medicine & Rehabilitation</option><option value="183">Plastic Surgery</option><option value="1267">Podiatry</option><option value="589">Psychiatry</option><option value="592">Pulmonary Disease</option><option value="594">Radiation Oncology</option><option value="963">Reproductive Endocrinology/Infertility</option><option value="597">Rheumatology</option><option value="603">Sleep Medicine</option><option value="1000">Sports Medicine</option><option value="178">Surgery</option><option value="1647">Surgical Oncology</option><option value="608">Thoracic & Cardiac Surgery</option><option value="1644">Thoracic Surgery</option><option value="996">Urogynecology/Female Pelvic Medicine & Reconstructive Surgery</option><option value="619">Urology</option><option value="624">Vascular & Interventional Radiology</option><option value="627">Vascular Surgery</option></select> </label> 829 830 </div> 831 832 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 833 834 <a href="https://www.bostonmagazine.com/find-a-doctor" class="directory-search-form__see-all">See All</a> 835</form> 836</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs"> 837 <a href="https://www.massgeneralbrigham.org/" id="find-mme-specialist" target="_blank"> 838 <span class="search-sponsor-cta-text">Find a specialist Today</span> 839 <em>Brought to you by</em> 840 <img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2020/12/300x250-mgb.png" alt="Mass General Brigham - logo"/> 841 </a> 842</div> 843 </div> 844 </div> 845 <!-- .find-a-pro-overlay --> 846 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-28"><span class="button">Weddings</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-28" aria-hidden="true"> 847 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 848 849 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-28" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 850 <div class="js-directory-form"> 851<form id="directory-search-form_28" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/wedding/" method="get"> 852 853 854 <div class="directory-search-form__search-input"> 855 <label class="search-input-label" for="search-input_28"> 856 <span class="visually-hidden"> 857 Search for... </span> 858 <input id="search-input_28" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 859 </div> 860 861 862 863 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 864 865 <a href="https://www.bostonmagazine.com/wedding" class="directory-search-form__see-all">See All</a> 866</form> 867</div> </div> 868 </div> 869 <!-- .find-a-pro-overlay --> 870 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-19"><span class="button">Dentists</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-19" aria-hidden="true"> 871 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 872 873 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-19" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 874 <div class="js-directory-form"> 875<form id="directory-search-form_19" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/dentists/" method="get"> 876 877 <div class="directory-search-form__search-input cat select"> 878 <label class="search-input-label" for="cat_19"><span class="visually-hidden">Specialty</span> 879 880 <select name="cat[]" id="cat_19" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="2454">Airway Dentistry</option><option value="87">Cosmetic Dentistry</option><option value="2393">Dental Anesthesiology</option><option value="2098">Dental Implants</option><option value="38">Endodontics</option><option value="2448">Functional Wellness</option><option value="29">General Dentistry</option><option value="2103">Implant Dentistry</option><option value="809">Oral and Maxillofacial Surgery</option><option value="2101">Oral Medicine</option><option value="2400">Oral Pathology</option><option value="99">Orthodontics</option><option value="115">
880Pediatric Dentistry</option><option value="68">Periodontics</option><option value="336">Prosthodontics</option><option value="2451">Sleep Dentistry</option><option value="2460">TMD</option><option value="2457">TMJ</option></select> </label> 881 882 </div> <div class="directory-search-form__search-input s text"> 883 <label class="search-input-label" for="s_19"><span class="visually-hidden">Search For...</span> 884 885 <input id="s_19" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 886 887 </div> 888 889 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 890 891 <a href="https://www.bostonmagazine.com/dentists" class="directory-search-form__see-all">See All</a> 892</form> 893</div> </div> 894 </div> 895 <!-- .find-a-pro-overlay --> 896 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-43"><span class="button">Schools</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-43" aria-hidden="true"> 897 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 898 899 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-43" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 900 <div class="js-directory-form"> 901<form id="directory-search-form_43" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/private-schools/" method="get"> 902 903 904 <div class="directory-search-form__search-input"> 905 <label class="search-input-label" for="search-input_43"> 906 <span class="visually-hidden"> 907 Search for... </span> 908 <input id="search-input_43" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 909 </div> 910 911 912 913 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 914 915 <a href="https://www.bostonmagazine.com/private-schools" class="directory-search-form__see-all">See All</a> 916</form> 917</div> </div> 918 </div> 919 <!-- .find-a-pro-overlay --> 920 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-47"><span class="button">Home Design</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-47" aria-hidden="true"> 921 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 922 923 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-47" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 924 <div class="js-directory-form"> 925<form id="directory-search-form_47" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/home-design/" method="get"> 926 927 928 <div class="directory-search-form__search-input"> 929 <label class="search-input-label" for="search-input_47"> 930 <span class="visually-hidden"> 931 Search for... </span> 932 <input id="search-input_47" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 933 </div> 934 935 936 937 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 938 939 <a href="https://www.bostonmagazine.com/home-design" class="directory-search-form__see-all">See All</a> 940</form> 941</div> </div> 942 </div> 943 <!-- .find-a-pro-overlay --> 944 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-51"><span class="button">Real Estate</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-51" aria-hidden="true"> 945 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 946 947 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-51" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 948 <div class="js-directory-form"> 949<form id="directory-search-form_51" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/real-estate-agents/" method="get"> 950 951 952 <div class="directory-search-form__search-input"> 953 <label class="search-input-label" for="search-input_51"> 954 <span class="visually-hidden"> 955 Search for... </span> 956 <input id="search-input_51" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 957 </div> 958 959 960 961 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 962 963 <a href="https://www.bostonmagazine.com/real-estate-agents" class="directory-search-form__see-all">See All</a> 964</form> 965</div> </div> 966 </div> 967 <!-- .find-a-pro-overlay --> 968 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-67"><span class="button">Lawyers</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-67" aria-hidden="true"> 969 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 970 971 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-67" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 972 <div class="js-directory-form"> 973<form id="directory-search-form_67" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/lawyers/" method="get"> 974 975 <div class="directory-search-form__search-input cat select"> 976 <label class="search-input-label" for="cat_67"><span class="visually-hidden">Specialty</span> 977 978 <select name="cat[]" id="cat_67" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Specialty</option><option value="127">Antitrust Law</option><option value="102">Appellate Law</option><option value="117">Arbitration And Mediation</option><option value="161">Attorneys for Nonprofits</option><option value="143">Aviation</option><option value="115">Banking And Financial</option><option value="88">Bankruptcy And Workout</option><option value="122">Business Law</option><option value="79">Civil Law Litigation</option><option value="50">Civil Rights</option><option value="47">Class Action</option><option value="105">Commercial Litigation</option><option value="99">Construction</option><option value="164">Consumer Debt</option><option value="84">Corporate Counsel</option><option value="31">Corporate Law</option><option value="55">
978Criminal Defense</option><option value="23">Criminal Defense/White Collar</option><option value="107">Education</option><option value="57">Elder Law</option><option value="136">Eminent Domain</option><option value="315">Energy/Oil and Gas</option><option value="320">Family Law</option><option value="63">First Amendment and Media</option><option value="167">Gaming Law</option><option value="128">Government And Administrative</option><option value="159">Healthcare Law</option><option value="93">Immigration Law</option><option value="110">Insurance</option><option value="87">Intellectual Property Rights</option><option value="341">International Law</option><option value="96">Labor And Employment</option><option value="317">Land Use/Environmental</option><option value="155">Medical Malpractice (Defense)</option><option value="153">Medical Malpractice (Plaintiff)</option><option value="40">Personal Injury</option><option value="116">Product Liability</option><option value="158">Professional Malpractice (Non-Medical Defense)</option><option value="337">Real Estate (Commercial)</option><option value="340">Real Estate (Residential)</option><option value="90">Securities Law</option><option value="137">Sports Law</option><option value="71">Tax Law</option><option value="162">Technology/Virtual</option><option value="45">Trusts and Estates</option><option value="62">Whistleblowers</option><option value="168">Workers' Compensation</option></select> </label> 979 980 </div> <div class="directory-search-form__search-input s text"> 981 <label class="search-input-label" for="s_67"><span class="visually-hidden">Search</span> 982 983 <input id="s_67" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search" autocomplete="off"/> </label> 984 985 </div> 986 987 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 988 989 <a href="https://www.bostonmagazine.com/lawyers" class="directory-search-form__see-all">See All</a> 990</form> 991</div><div class="bdoctors-search-sponsor-hm" id="hmbg-bdocs"> 992 <a href="https://www.rubinrudman.com/2024-boston-magazines-top-lawyers-list/?utm_source=bostonmagazine&utm_campaign=findit-lawyers&utm_term=dec2024" id="find-mme-specialist" target="_blank"> 993 <span class="search-sponsor-cta-text">Find a lawyer Today</span> 994 <em>Brought to you by</em> 995 <img src="https://www.bostonmagazine.com/wp-content/uploads/sites/2/2024/12/rubin-rudman-homepage-placement.png" id="logo-lawyers" alt="Rubin and Rudman - logo"/> 996 </a> 997</div> 998 </div> 999 </div> 1000 <!-- .find-a-pro-overlay --> 1001 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-69"><span class="button">Mortgages</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-69" aria-hidden="true"> 1002 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 1003 1004 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-69" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 1005 <div class="js-directory-form"> 1006<form id="directory-search-form_69" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/mortgage-lenders/" method="get"> 1007 1008 1009 <div class="directory-search-form__search-input"> 1010 <label class="search-input-label" for="search-input_69"> 1011 <span class="visually-hidden"> 1012 Search for... </span> 1013 <input id="search-input_69" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search for..."/> 1014 </div> 1015 1016 1017 1018 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 1019 1020 <a href="https://www.bostonmagazine.com/mortgage-lenders" class="directory-search-form__see-all">See All</a> 1021</form> 1022</div> </div> 1023 </div> 1024 <!-- .find-a-pro-overlay --> 1025 </li><li><button class="js-directory-toggle" aria-expanded="false" aria-controls="js-find-a-pro-overlay-74"><span class="button">Senior Living</span></button> <div class="find-a-pro-overlay" id="js-find-a-pro-overlay-74" aria-hidden="true"> 1026 <div class="find-a-pro-overlay-inner" id="find-pro-inner-bostonmagazine"> 1027 1028 <button class="js-close-directory-button" aria-controls="js-find-a-pro-overlay-74" aria-expanded="false"><svg class="mc-icon close" aria-hidden="true"><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-close"></svg><span class="screen-reader-text">Close form</span></button> 1029 <div class="js-directory-form"> 1030<form id="directory-search-form_74" class="directory-search-form" role="search" autocomplete="off" action="https://www.bostonmagazine.com/senior-living/" method="get"> 1031 1032 <div class="directory-search-form__search-input s text"> 1033 <label class="search-input-label" for="s_74"><span class="visually-hidden">Search For...</span> 1034 1035 <input id="s_74" class="directory-search-form__search-text-field" type="text" name="s" value="" placeholder="Search For..." autocomplete="off"/> </label> 1036 1037 </div> <div class="directory-search-form__search-input cat select"> 1038 <label class="search-input-label" for="cat_74"><span class="visually-hidden">Category</span> 1039 1040 <select name="cat[]" id="cat_74" class="postform header-search-select header-search-select--cat"><option value="0" selected="">Category</option><option value="140">Assisted Living</option><option value="139">Home Healthcare</option><option value="21">Independent Living</option><option value="122">Memory Care</option><option value="182">Personal Care</option></select> </label> 1041 1042 </div> 1043 1044 <input class="directory-search-form__submit-button" type="submit" value="Find" /> 1045 1046 <a href="https://www.bostonmagazine.com/senior-living" class="directory-search-form__see-all">See All</a> 1047</form> 1048</div> </div> 1049 </div> 1050 <!-- .find-a-pro-overlay --> 1051 </li> </ul> 1052 </div> 1053 </div> 1054</div> 1055 1056 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-2" class="gpt-ad advertisement container"> 1057
1057<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1058 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-2" }); 1059 </script>
1059 1060 </div> 1061 <div class="container"> 1062 <h2 class="title-line">Latest Stories</h2> <div class="content-with-sidebar"> 1063 1064 <div class="list-content"> 1065 <div class="list-post"> 1066 1067 <a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_hub_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1068 <div class="list-post-card"> 1069 <a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&A</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/arts-entertainment/2026/09/23/jonathan-tucker-boston/"><p>Jonathan Tucker Is Very Good at Playing Cops. He’s Also Being Sued Over a Weed Store.</p></a></h2> 1070 <div class="post-excerpt"> 1071 <p> 1072 <p>The Charlestown native danced with Boston Ballet as a kid and currently plays a Boston police officer on Netflixâs <em>
1072I Will Find You</em>. His local cannabis dispensaries are also going to court over their name. Heâd like to talk about the last one.</p> 1073</p> 1074 </div> 1075 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span> </div> 1076</div> 1077<div class="list-post"> 1078 1079 <a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Boston_OldNetwork_Finishfeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1080 <div class="list-post-card"> 1081 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/20/networking-after-50-awkward/"><p>A Wildly Inefficient Manâs Guide to Networking</p></a></h2> 1082 <div class="post-excerpt"> 1083 <p> 1084 <p>The career coach said itâs never too late to reconnect with colleagues. Our columnist, 30-plus years into his professional life, decided to find out.</p> 1085</p> 1086 </div> 1087 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/steve-calechman/" class="byline">Steve Calechman</a></span> </div> 1088</div> 1089<div class="list-post"> 1090 1091 <a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_fea_greekfeud_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1092 <div class="list-post-card"> 1093 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/13/boston-greek-restaurant-feud-lawsuit-xenia-krasi/"><p>Inside Boston’s Great Greek Restaurant Feud</p></a></h2> 1094 <div class="post-excerpt"> 1095 <p> 1096 <p>George Aboujaoude hired Demetri Tsolakis, and together they built one of the Seaportâs first great restaurants. Then Tsolakis went out on his own and built one of the best Greek restaurant groups in America. Now theyâre battling in courtâand neither of them is backing down.</p> 1097</p> 1098 </div> 1099 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/wyndham-lewis/" class="byline">Wyndham Lewis</a></span> </div> 1100</div> 1101<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-0" class="gpt-ad native-river"> 1102
1102<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1103 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-0" }); 1104 </script>
1104 1105 </div><div class="list-post"> 1106 1107 <a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/Sept2026_dept_college_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1108 <div class="list-post-card"> 1109 <a href="https://www.bostonmagazine.com/category/opinion/" class="post-slug">Opinion</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/09/08/why-you-should-have-college-roommates/"><p>Why You Should Have Roommates in College</p></a></h2> 1110 <div class="post-excerpt"> 1111 <p> 1112 <p>As loneliness among students reaches crisis levels, one writerâs case for not rooming aloneâand the real education that happens after midnight.</p> 1113</p> 1114 </div> 1115 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/john-d-spooner/" class="byline">John D. Spooner</a></span> </div> 1116</div> 1117<div class="list-post"> 1118 1119 <a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="An older man with white hair wearing a dark blue suit, white shirt, and blue patterned tie is standing behind a wooden podium, smiling and pointing forward. The background includes an American flag and blurred elements suggesting a formal setting." srcset="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/03/GettyImages-2206451078.jpg" data-srcset="" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1120 <div class="list-post-card"> 1121 <a href="https://www.bostonmagazine.com/category/qa/" class="post-slug">Q&A</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/03/ed-markey-interview-2026/"><p>Ed Markey Is a âWalking, Talking Antidepressant”</p></a></h2> 1122 <div class="post-excerpt"> 1123 <p> 1124 <p>The Senator would rather talk about Donald Trump than his 2026 primary challenger.</p> 1125</p> 1126 </div> 1127 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jonathan-soroff/" class="byline">Jonathan Soroff</a></span> </div> 1128</div> 1129<div class="nativo-section-front-1"></div><div class="list-post"> 1130 1131 <a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A blue graduation cap with a tassel, featuring the words "NOW WHAT?" written in white on the top, set against a white background with the word "Boston" partially visible in large blue letters behind it." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_September2026_cover_copy-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1132 <div class="list-post-card"> 1133 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/09/01/is-college-still-worth-it/"><p>The Great College Reckoning: Is Higher Education Still Worth It?</p></a></h2> 1134 <div class="post-excerpt"> 1135 <p> 1136 <p>The deal was simple: pay for the degree, get a good job. But now AI, school
1136closures, and a shrinking number of students are breaking that contractâand no American city has more riding on what happens next than ours.</p> 1137</p> 1138 </div> 1139 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span> </div> 1140</div> 1141 </div> 1142 1143 <div class="advertisement-side"> 1144 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-1" class="gpt-ad freestar-sticky"> 1145
1145<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1146 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-1" }); 1147 </script>
1147 1148 </div></div> </div> 1149 </div> 1150</div> 1151 1152 <div class="container post-article-container"> 1153 <hr class="double"> 1154 <div class="newsletter"> 1155 <h2 class="newsletter-title"> 1156 Get a compelling long read and must-have lifestyle tips in your inbox every Sunday morning â great with coffee! </h2> 1157 <div class="newsletter-inner"> 1158 <div class="hbspt-form js-hubspot-newsletter"></div> 1159 </div> 1160 </div> 1161</div> 1162 1163 <div class="three-column-module container"> 1164 <h2 class="title-line">In This Section</h2> 1165 <div class="grid-content with-separator"> 1166 <div class="grid-post"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/09/1200x800_GettyImages-184996589.jpg" alt="The Top Public High Schools in Greater Boston, Ranked" /></span><h3 class="post-title">The Top Public High Schools in Greater Boston, Ranked</h3></a><div class="guide-list"><p>We crunched the numbers to come up with our annual guide to the top-performing schools in the region.</p> 1167</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/boston-power-list-2026/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/05/1200x800_150-featured-image.jpg" alt="The 150 Most Influential Bostonians" /></span><h3 class="post-title">The 150 Most Influential Bostonians</h3></a><div class="guide-list"><p><span style="font-weight: 400">Power looks different in every town. </span>Ours comes with lab coats, a Bakemas cookie, and 351 town names in alphabetical order.</p> 1168</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-1" class="gpt-ad"> 1169
1169<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1170 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-1" }); 1171 </script>
1171 1172 </div></div> </div> 1173 </div> 1174 1175 <div class="container"> 1176 <hr class="double"> <div class="content-with-sidebar"> 1177 1178 <div class="list-content"> 1179 <div class="list-post"> 1180 1181 <a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="Stone archway above a doorway with the words "PUBLIC SCHOOL" carved into it, set in a brick building with three white-framed windows above." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200-GettyImages-510006525-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1182 <div class="list-post-card"> 1183 <a href="https://www.bostonmagazine.com/category/news/" class="post-slug">News</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/best-public-high-schools-boston-2026-2027-chart/"><p>The Top Public High Schools in Greater Boston, Ranked for 2026</p></a></h2> 1184 <div class="post-excerpt"> 1185 <p> 1186 <p><span class="s1">We crunched the numbers to come up with our guide to the regionâs top-performing schools. Does your town make the grade?</span></p> 1187</p> 1188 </div> 1189 </div> 1190</div> 1191<div class="list-post"> 1192 1193 <a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_flags_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1194 <div class="list-post-card"> 1195 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/23/massachusetts-state-flag/"><p>Why Can’t Massachusetts Make a Good State Flag?</p></a></h2> 1196 <div class="post-excerpt"> 1197 <p> 1198 <p>Maine rebranded itself with one of the countryâs most beloved flags. Massachusetts has held two commissions and produced reports, surveys, scoring systems, finalists, and no flags. What gives?</p> 1199</p> 1200 </div> 1201 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/jason-schwartz/" class="byline">Jason Schwartz</a></span> </div> 1202</div> 1203<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-1" class="gpt-ad native-river"> 1204
1204<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1205 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-1" }); 1206 </script>
1206 1207 </div><div class="list-post"> 1208 1209 <a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_dept_capecod_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1210 <div class="list-post-card"> 1211 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/08/16/cape-cod-rescue-story-wellfleet-navy-wreck/"><p>Adrift off Wellfleet: A Cape Cod Coming-of-Age Story</p></a></h2> 1212 <div class="post-excerpt"> 1213 <p> 1214 <p>Four teenagers set out for a sunken Navy wreck off Eastham. The trip did not go as planned.</p> 1215</p> 1216 </div> 1217 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/beth-mccullough-kerner/" class="byline">Beth McCullough-Kerner</a></span> </div> 1218</div> 1219<div class="list-post"> 1220 1221 <a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/relay-race-illofeat.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1222 <div class="list-post-card"> 1223 <a href="https://www.bostonmagazine.com/category/opinion/personal-essay/" class="post-slug">Personal Essay</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/education/2026/08/09/private-school-admissions/"><p>What It Actually Takes to Apply to Private School</p></a></h2> 1224 <div class="post-excerpt"> 1225 <p> 1226 <p>The admissions race means SSAT tutors, educational consultants, Zoom meetings, and mahjong nights. For one mom, at least, the actual acceptance was the easiest part.</p> 1227</p> 1228 </div> 1229 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/brittany-kooienga/" class="byline">Brittany Kooienga</a></span> </div> 1230</div> 1231<div class="nativo-section-front-2"></div><div class="list-post"> 1232 1233 <a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/08/1200x800_TopHospitals-widthbadges-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1234 <div class="list-post-card"> 1235 <a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/top-hospitals-greater-boston/"><p>Greater Boston’s Top Hospitals: Our First Directory Is Here</p></a></h2> 1236 <div class="post-excerpt"> 1237 <p> 1238 <p>Our inaugural guide to the region’s most excellent care.</p> 1239</p> 1240 </div> 1241 </div> 1242</div> 1243 </div> 1244 1245 <div class="advertisement-side"> 1246 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-2" class="gpt-ad freestar-sticky"> 1247
1247<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1248 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-2" }); 1249 </script>
1249 1250 </div></div> </div> 1251 </div> 1252</div> 1253 1254 <div class="three-column-module container"> 1255 <h2 class="title-line"></h2> 1256 <div class="grid-content with-separator"> 1257 <div class="grid-post"><a href="https://www.bostonmagazine.com/best-of-boston/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Best-of-Boston-2026.jpg" alt="Best of Boston 2026" /></span><h3 class="post-title">Best of Boston 2026</h3></a><div class="guide-list"><p>Our annual group love letter to the 250-plus things that are absolutely superlative about this city.</p> 1258</div></div><div class="grid-post"><a href="https://www.bostonmagazine.com/tag/the-salty-cod/" class="grid-post-card-link"><span class="post-image-link"><img class="lazyload" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2025/01/Driveway-Shovelerfeat.jpg" alt="The Salty Cod: A Column" /></span><h3 class="post-title">The Salty Cod: A Column</h3></a><div class="guide-list"><p>Humorist Steve Calechman grapples with your uniquely New England dilemmas.</p> 1259</div></div><div class="grid-post"><div align="center" data-freestar-ad="__372x409 __300x390" id="bostonmagazine_curated_module-2" class="gpt-ad"> 1260
1260<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1261 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_curated_module", slotId: "bostonmagazine_curated_module-2" }); 1262 </script>
1262 1263 </div></div> </div> 1264 </div> 1265 1266 <div class="container"> 1267 <hr class="double"> <div class="content-with-sidebar"> 1268 1269 <div class="list-content"> 1270 <div class="list-post"> 1271 1272 <a href="https://www.bostonmagazine.com/news/2026/07/29/blizzard-of-lies-karen-read-book-excerpt/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/960x640GettyImages-2155407465-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/960x640GettyImages-2155407465-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/960x640GettyImages-2155407465-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/960x640GettyImages-2155407465-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/960x640GettyImages-2155407465-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1273 <div class="list-post-card"> 1274 <a href="https://www.bostonmagazine.com/category/excerpt/" class="post-slug">Excerpt</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/07/29/blizzard-of-lies-karen-read-book-excerpt/"><p>Read an Excerpt of Dave Wedge’s “Blizzard of Lies”</p></a></h2> 1275 <div class="post-excerpt"> 1276 <p> 1277 <p>The first non-fiction book about the Karen Read case is out now.</p> 1278</p> 1279 </div> 1280 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/dave-wedge/" class="byline">Dave Wedge</a></span> </div> 1281</div> 1282<div class="list-post"> 1283 1284 <a href="https://www.bostonmagazine.com/news/2026/07/22/karen-read-texts-turtleboy-harassment-campaign/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_karenread_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_karenread_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_karenread_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_karenread_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_karenread_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1285 <div class="list-post-card"> 1286 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/07/22/karen-read-texts-turtleboy-harassment-campaign/"><p>Inside the Campaign To Acquit Karen Read</p></a></h2> 1287 <div class="post-excerpt"> 1288 <p> 1289 <p>For three years, the witnesses in the Karen Read murder trial were harassed at their jobs, their homes, their childrenâs sports games. It wasnât random. It wasnât a movement of true believers. It was a coordinated campaign against them. And now theyâre fighting back.</p> 1290</p> 1291 </div> 1292 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/gretchen-voss/" class="byline">Gretchen Voss</a></span> </div> 1293</div> 1294<div align="center" data-freestar-ad="__336x280 __605x271" id="bostonmagazine_native_river-2" class="gpt-ad native-river"> 1295
1295<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1296 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_native_river", slotId: "bostonmagazine_native_river-2" }); 1297 </script>
1297 1298 </div><div class="list-post"> 1299 1300 <a href="https://www.bostonmagazine.com/arts-entertainment/2026/07/16/bso-symphony-hall-crisis-hostetter-chad-smith-nelsons/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="" decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_BSO_web_leadcrop-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_BSO_web_leadcrop-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_BSO_web_leadcrop-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_BSO_web_leadcrop-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/07/Aug2026_feature_BSO_web_leadcrop-600x400.jpg 600w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1301 <div class="list-post-card"> 1302 <a href="https://www.bostonmagazine.com/category/longform/" class="post-slug">Longform</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/arts-entertainment/2026/07/16/bso-symphony-hall-crisis-hostetter-chad-smith-nelsons/"><p>The Bitter Fight for Symphony Hall</p></a></h2> 1303 <div class="post-excerpt"> 1304 <p> 1305 <p><span class="s1">The Boston Symphony Orchestra parted ways </span><span class="s2">with Andris Nelsons, its longtime maestro,</span> <span class="s2">and went to war with itself. Inside the struggle over who controls one of American musicâs crown jewelsâand whether it can survive being saved.</span></p> 1306</p> 1307 </div> 1308 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/tom-mcgrath/" class="byline">Tom McGrath</a></span> </div> 1309</div> 1310<div class="nativo-section-front-3"></div><div class="list-post"> 1311 1312 <a href="https://www.bostonmagazine.com/news/2026/07/08/locals-guide-to-boston-tall-ships/" class="post-image-link"><img width="115" height="77" class="attachment-post-thumbnail size-post-thumbnail lazyload" alt="A large sailing ship with multiple white and beige sails is on the water, viewed from behind two people wearing hats who are watching it. The ship has a dark hull and is named "Oosterschelde." The scene appears to be on a calm body of water with a bright, overcast sky." decoding="async" loading="lazy" data-src="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18-115x77.jpg" data-srcset="https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18-115x77.jpg 115w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18-605x403.jpg 605w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18-300x200.jpg 300w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18-600x400.jpg 600w, https://bomag.o0bc.com/wp-content/uploads/sites/2/2026/06/Metro_Images_TallSlider18.jpg 900w" data-sizes="auto, (max-width: 767px) calc( ( 100vw - 30px ) / 3 ), (max-width: 1023px) calc( ( 100vw - 30px ) / 3 ), 217px" /></a> 1313 <div class="list-post-card"> 1314 <a href="https://www.bostonmagazine.com/category/guides/" class="post-slug">Guides</a> <h2 class="post-title"><a href="https://www.bostonmagazine.com/news/2026/07/08/locals-guide-to-boston-tall-ships/"><p>A Locals-Only Guide to Boston’s Tall Ships</p></a></h2> 1315 <div class="post-excerpt"> 1316 <p> 1317 <p>The best viewing spots, the smartest times to board, and how to beat the crowds.</p> 1318</p> 1319 </div> 1320 <span class="byline-wrapper">By <a href="https://www.bostonmagazine.com/author/mckenna-johnson/" class="byline">McKenna Johnson</a></span> </div> 1321</div> 1322<span class="pagination"><span class="page-numbers current">1</span><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/2/"> 2 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/3/"> 3 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/4/"> 4 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/5/"> 5 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/6/"> 6 </a><a class="page-numbers" href="https://www.bostonmagazine.com/news/page/7/"> 7 </a><a href=https://www.bostonmagazine.com/news/page/2/ class="next page-numbers" > > </a><a href=https://www.bostonmagazine.com/news/page/15/ class="last page-numbers"> >> </a></span><div class="post-navigation"></div> </div> 1323 1324 <div class="advertisement-side"> 1325 <div class="sticky"><div align="center" data-freestar-ad="__336x280 __300x600" id="bostonmagazine_rail-3" class="gpt-ad freestar-sticky"> 1326
1326<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1327 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_rail", slotId: "bostonmagazine_rail-3" }); 1328 </script>
1328 1329 </div></div> </div> 1330 </div> 1331</div> 1332 1333 <div align="center" data-freestar-ad="__320x100 __970x250" id="bostonmagazine_banner-3" class="gpt-ad advertisement container"> 1334
1334<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1335 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_banner", slotId: "bostonmagazine_banner-3" }); 1336 </script>
1336 1337 </div> 1338 1339 1340<footer class="site-footer" role="contentinfo" id="js-footer"> 1341 <div class="footer-navigation"><ul id="menu-footer-menu" class="menu-footer-main container"><li id="menu-item-174641" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-174641"><a href="https://www.bostonmagazine.com/about/">About</a></li> 1342<li id="menu-item-203231" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-203231"><a href="https://www.bostonmagazine.com/contact/">Contact</a></li> 1343<li id="menu-item-461741" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-461741"><a href="https://www.bostonmagazine.com/masthead/">Masthead</a></li> 1344<li id="menu-item-174651" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174651"><a href="https://w1.buysub.com/pubs/BM/BOS/BOS_sub.jsp?cds_page_id=270289&cds_mag_code=BOS&id=1739901742813&lsid=50491202228084314&vid=1">Subscribe</a></li> 1345<li id="menu-item-174671" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174671"><a href="/boston-magazine-media-kit/">Advertise</a></li> 1346<li id="menu-item-174661" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174661"><a href="https://bostonglobemedia.cloud.buysub.com">Customer Service</a></li> 1347<li id="menu-item-2323712" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2323712"><a href="https://www.bostonmagazine.com/careers/">Careers and Internships at Boston Magazine</a></li> 1348<li id="menu-item-174681" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-174681"><a href="https://www.bostonglobe.com/about/help/privacy-policy/">Privacy Policy</a></li> 1349<li id="menu-item-2796278" class="ot-info-display menu-item menu-item-type-custom menu-item-object-custom menu-item-2796278"><a href="#">Your Privacy Choices</a></li> 1350</ul></div> <div class="site-footer-inner container"> 1351 <a href="https://www.bostonmagazine.com" class="footer-logo" aria-label="Boston Magazine"> 1352 <span><svg class="mc-icon bostonmagazine-logo" aria-hidden="true"><title>Boston Magazine</title><use xlink:href="/wp-content/themes/metrocorp/images/sprite.svg?ver=1790091448#mc-icon-bostonmagazine-logo"></svg></span> 1353 </a> 1354 <ul id="menu-social-2" class="menu-footer-social"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351226"><a target="_blank" href="https://www.facebook.com/bostonmagazine"><span class="screen-reader-text">Facebook</span></a></li> 1355<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351228"><a target="_blank" href="https://www.instagram.com/bostonmagazine/"><span class="screen-reader-text">Instagram</span></a></li> 1356<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2351231"><a target="_blank" href="https://www.twitter.com/bostonmagazine"><span class="screen-reader-text">Twitter</span></a></li> 1357</ul> <p class="footer-copyright">©2026 Boston Globe Media Partners, LLC</p> 1358 </div> 1359 </footer> 1360 1361<div class="container" id="gutter-container"></div> 1362
1363<script type="speculationrules"> 1364{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/2/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/metrocorp-bostonmagazine/*","/wp-content/themes/metrocorp/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1365</script>
1365 1366<button id="pmLink">Privacy Manager</button>
1366<script type="text/javascript" id="ot-manage-links"> 1367 const otDisplayClassEl = document.getElementsByClassName("ot-info-display"); 1368 for ( const otLinkEl of otDisplayClassEl ) { 1369 let otLinks = otLinkEl.getElementsByTagName("a"); 1370 for ( const otLinkEl of otLinks ) { 1371 let otLinkElAttr = otLinkEl.getAttribute("href") 1372 if( otLinkElAttr === "#" ) { 1373 otLinkEl.addEventListener( "click", function() { 1374 OneTrust.ToggleInfoDisplay(); 1375 event.preventDefault(); 1376 }); 1377 } 1378 } 1379 } 1380 </script>
1380 1381
1381<script id="mc-breaking-news-banner-script-js" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-breakingnewsbanner/assets/js/breaking-news-bar.js?ver=1"></script>
vendor: 1 bytes, line 1381
1381
1382<script id="metrocorp-js-extra"> 1383var mcGlobal = {"isSingle":"","directoryName":"Boston Magazine"}; 1384//# sourceURL=metrocorp-js-extra 1385</script>
vendor: 1 bytes, line 1385
1385
1386<script id="metrocorp-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp.min.js?ver=1790091448" defer></script>
vendor: 1 bytes, line 1386
1386
1387<script id="metrocorp-secondary-js" src="https://bomag.o0bc.com/wp-content/themes/metrocorp/dist/js/metrocorp-secondary.min.js?ver=1790091448" defer></script>
vendor: 1 bytes, line 1387
1387
1388<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-ads//dist/js/metrocorp-ads-secondary.js?ver=88982254c2d846b515d0" id="metrocorp-ads-secondary" class="optanon-category-C0004"></script>
1388<script type="text/plain" src="//js.hsforms.net/forms/v2.js?ver=1.0.0" id="mc-integrations-hubspot" class="optanon-category-C0004"></script>
1388<script id="mc-hubspot-subscription-form-js-extra"> 1389var mcHubSpot = {"portalId":"43837035","formId":"bfc3022c-8482-4600-8cb5-1f8e1b257cd2","isSingle":"false","title":"","vertical":""}; 1390//# sourceURL=mc-hubspot-subscription-form-js-extra 1391</script>
vendor: 1 bytes, line 1391
1391
1392<script type="text/plain" src="https://bomag.o0bc.com/wp-content/mu-plugins/metrocorp-hubspot/assets/js/metrocorp-hubspot-subscription-form.js?ver=1790091444" id="mc-hubspot-subscription-form" class="optanon-category-C0004"></script>
1392<script id="wp-emoji-settings" type="application/json"> 1393{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://cdn10.bostonmagazine.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}} 1394</script>
vendor: 1 bytes, line 1394
1394
1395<script type="module"> 1396/*! This file is auto-generated */ 1397var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 1398//# sourceURL=https://www.bostonmagazine.com/wp-includes/js/wp-emoji-loader.min.js 1399</script>
1399 1400<!-- Start of AdCellerant Embed Code -->
1401<script src="https://js.adsrvr.org/up_loader.1.1.0.js" type="text/plain" class="optanon-category-C0004"></script>
vendor: 1 bytes, line 1401
1401
1402<script type="text/plain" class="optanon-category-C0004"> 1403 function initAdCellerant() { 1404 if (typeof ttd_dom_ready === 'undefined') { 1405 setTimeout(initAdCellerant, 100); 1406 return; 1407 } 1408 1409 ttd_dom_ready(function() { 1410 if (typeof TTDUniversalPixelApi === 'function') { 1411 var universalPixelApi = new TTDUniversalPixelApi(); 1412 universalPixelApi.init("1qqfa0h", ["g7kke2y"], "https://insight.adsrvr.org/track/up"); 1413 } 1414 }); 1415 } 1416 initAdCellerant(); 1417</script>
1417 1418<!-- End of AdCellerant Embed Code --> 1419 1420 <div align="center" data-freestar-ad="" id="bostonmagazine_bottom-anchor" class="gpt-ad"> 1421
1421<script data-cfasync="false" type="text/plain" class="optanon-category-C0004"> 1422 freestar.config.enabled_slots.push({ placementName: "bostonmagazine_bottom-anchor", slotId: "bostonmagazine_bottom-anchor" }); 1423 </script>
1423 1424 </div>
1425<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"b9d80a2312","applicationID":"1078100099","transactionName":"ZFNbMkJTVxVYVRcMDV0ZehNDRlYLFmICHUIeFlQFHUZYHhRABhcWWlVYCg==","queueTime":0,"applicationTime":249,"atts":"SBRMRApJREobV0FfGU5L","errorBeacon":"bam.nr-data.net","agent":""}</script>
1425</body> 1426</html> 1427 1428<!-- plugin=object-cache-pro client=phpredis metric#hits=6678 metric#misses=196 metric#hit-ratio=97.2 metric#bytes=2678970 metric#prefetches=0 metric#store-reads=189 metric#store-writes=4 metric#store-hits=525 metric#store-misses=5 metric#sql-queries=2 metric#ms-total=303.60 metric#ms-cache=92.04 metric#ms-cache-avg=0.4794 metric#ms-cache-ratio=30.3 -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.