PageSourceSearch

https://www.pdxmonthly.com/eat-and-drink/2026/09/portland-grocery-stores-history-a-to-z

html pdxmonthly.com collected 2026-09-24 17:34:17 UTC 197,369 bytes, 1,457 lines download raw bytes

1<!DOCTYPE html>
2<html charset='UTF-8' class='ink--theme--light' data-controller='scroll' dir='ltr' encoding='UTF-8' itemtype='http://schema.org/WebPage' lang='en-US' language='English' ng-app='Ink' prefix='og: http://ogp.me/ns#'>
3<head>
4<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"NRJS-5df159e6622835f7639","applicationID":"572385084","transactionName":"cgxeQUcMWVUDQxpCXEIXQxpGC1pO","queueTime":0,"applicationTime":968,"agent":""}</script>
vendor: 1 bytes, line 4
4
5<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:"601462162",accountID:"2857861",trustKey:"2857861",xpid:"Vg4CVl5VCRAFU1NRDwQHXlA=",licenseKey:"NRJS-5df159e6622835f7639",applicationID:"572385084",browserID:"601462162"};;/*! For license information please see nr-loader-spa-1.322.0.min.js.LICENSE.txt */
6(()=>{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};
6e.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;
6const 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);
6if(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$:()=>
6o,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])}
6(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}
6;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)=>
6{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
6ine_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()=>
6{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)=>
6null==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
6dTimingMethod(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
6imeToRegister: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})})}
6return 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"
6!==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);
6if(!(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)}
6);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)})});
6class 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
6h(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>
6
7
8<title>Portland Grocery Stores, an A-to-Z Guide | Portland Monthly</title>
9<link rel="canonical" href="https://www.pdxmonthly.com/eat-and-drink/2026/09/portland-grocery-stores-history-a-to-z">
10
11<meta name="description" property="description" content="A look at where Portlanders buy their food, yesterday and today, Anzen to Zupan&#39;s, plus Fred Meyer, Piggly Wiggly, and other places in between.">
12<meta name="robots" property="robots" content="follow,index">
13<meta name="og:description" property="og:description" content="Did you know Portland used to have a Piggly Wiggly?">
14<meta name="og:image" property="og:image" content="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2575,w_3864,x_0,y_1300/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1200/rubinette-best-grocery-stores_ycjfkc.jpg">
15<meta name="og:site_name" property="og:site_name" content="Portland Monthly">
16<meta name="og:title" property="og:title" content="An A-Z Guide to Portland Grocery Stores, Yesterday and Today">
17<meta name="og:type" property="og:type" content="article">
18<meta name="og:url" property="og:url" content="https://www.pdxmonthly.com/eat-and-drink/2026/09/portland-grocery-stores-history-a-to-z">
19<meta name="og:updated_time" property="og:updated_time" content="2026-09-14 09:35:25 -0700">
20<meta name="twitter:card" property="twitter:card" content="summary_large_image">
21<meta name="twitter:description" property="twitter:description" content="Did you know Portland used to have a Piggly Wiggly?">
22<meta name="twitter:image" property="twitter:image" content="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2575,w_3864,x_0,y_1300/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1200/rubinette-best-grocery-stores_ycjfkc.jpg">
23<meta name="twitter:title" property="twitter:title" content="An A-Z Guide to Portland Grocery Stores, Yesterday and Today">
24<meta name="gpt:vertical" property="gpt:vertical" content="v_dining">
25<meta name="gpt:channel" property="gpt:channel" content="eat-and-drink,groceries-and-markets">
26<meta name="gpt:issue" property="gpt:issue" content="portland-monthly-fall-2026-issue">
27
28<meta name="gpt:networkCode" property="gpt:networkCode" content="1020224">
29<meta name="gpt:property" property="gpt:property" content="PortlandMonthly">
30<meta name="gpt:tags" property="gpt:tags" content="grocery-stores,shopping,shop-local,portland-business,history">
31<meta name="gpt:slug" property="gpt:slug" content="portland-grocery-stores-history-a-to-z">
32<meta name="gpt:uuid" property="gpt:uuid" content="f6d20afe-be03-48e2-92f8-5637f72bdab8">
33<meta name="disqus:shortname" property="disqus:shortname" content="portlandmonthlymag">
34<meta name="disqus:identifier" property="disqus:identifier" content="Article-24408">
35<meta name="cloud_name" property="cloud_name" content="sagacity">
36<meta name="cloud_key" property="cloud_key" content="883438718919269">
37<meta name="vimeo_access_token" property="vimeo_access_token" content="052dd68aa4393e5fbb83b0a1a64dd60f">
38<meta name="bounds" property="bounds" content="[45.628445, -122.860794, 45.420624, -122.410355]">
39<meta name="viewport" property="viewport" content="height=device-height,width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
40<meta name="format-detection" property="format-detection" content="telephone=no,date=no,address=no,email=no,url=no">
41<meta name="SKYPE_TOOLBAR" property="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE">
42<meta name="mssmarttagspreventparsing" property="mssmarttagspreventparsing" content="true">
43<meta http-equiv="imagetoolbar" content="no">
44<meta name="csrf-param" content="authenticity_token" />
45<meta name="csrf-token" content="yMv7JPgG4jX6BEf1dTuvkbmcPCxc4l20oPhzGoGQpMXTTL9mE9PcJExV3IIkaSBO5oXZOvwbDJsxC4qCLkrnSQ" />
46
47
48<link rel="stylesheet" media="all" href="//cloud.typography.com/6681174/719008/css/fonts.css" />
49<link rel="stylesheet" media="screen" href="/assets/application-f51339c6b6eeb6ca3ddabc9eb3e3e7d7308cd4a7304bade9a9049d17bf6f5461.css" />
50<link rel="shortcut icon" type="image/x-icon" href="/assets/portland_monthly/favicon-79484e0ba308bf575ac1e01143aef22f8fbce05e0d858c8febf6e92ebbb9bd6a.ico" />
51<link rel="apple-touch-icon" type="image/png" href="/assets/portland_monthly/apple-touch-icon-4f5fc136d2875319f0890da6815917196cd06dc0949cbbbb288dc04bc9af76b9.png" />
52<script src="https://app.termly.io/resource-blocker/b08bf188-0818-4262-9444-6a2b5430f19c"></script>
vendor: 1 bytes, line 52
52
53<script async src='https://securepubads.g.doubleclick.net/tag/js/gpt.js'></script>
vendor: 1 bytes, line 53
53
54<script>
55  var gptTargeting = {
56    'vertical':             'v_dining',
57    'channel':              'eat-and-drink,groceries-and-markets',
58    'tags':                 'grocery-stores,shopping,shop-local,portland-business,history',
59    'uuid':                 'f6d20afe-be03-48e2-92f8-5637f72bdab8',
60    'microsites':           '',
61  };
62  
63  window.dataLayer = window.dataLayer || [];
64  window.dataLayer.push({
65    'channels':             'eat-and-drink,groceries-and-markets',
66    'primary_channel':      'Groceries & Markets',
67    'primary_channel_root': 'Eat & Drink',
68    'microsites':           '',
69    'issue':                'portland-monthly-fall-2026-issue',
70    'authors':              'Margaret Seiler',
71    'sponsored':            'false',
72    'evergreen':            'false',
73    'ecommerce':            'false',
74    'uuid':                 'f6d20afe-be03-48e2-92f8-5637f72bdab8',
75    'publish_at':           '2026-09-11 11:45:00 -0700',
76    'updated_at':           '2026-09-14 09:35:25 -0700',
77    'tags':                 'grocery-stores,shopping,shop-local,portland-business,history'
78  });
79</script>
vendor: 1 bytes, line 79
79
80<script>
vendor: 332 bytes, lines 80-85
80
81  (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
82  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
83  j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
84  '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
85  })(window,document,'script','dataLayer','
85GTM-WMKJLRX
vendor: 4 bytes, line 85
85');
86</script>
86
87
88<script src="/assets/application-df671effc5c096943cc95340680de1ace68d379521708b42a5c136f04e6c202c.js"></script>
vendor: 1 bytes, line 88
88
89<script src="/packs/js/222-99305e48cab522de.js" defer="defer"></script>
vendor: 1 bytes, line 89
89
90<script src="/packs/js/584-c709c5dd19107e25.js" defer="defer"></script>
vendor: 1 bytes, line 90
90
91<script src="/packs/js/707-0f3193cf06a34d53.js" defer="defer"></script>
vendor: 1 bytes, line 91
91
92<script src="/packs/js/application-92c9532aaa986954.js" defer="defer"></script>
vendor: 1 bytes, line 92
92
93<script name='slideshow_1733' type='text/preloaded'>
94{"id":1733,"gid":"gid://ink/Slideshow/1733","class_name":"Slideshow","title":"Here’s Your Shopping List for the New Green Zebra Grocery ","slug":"here-s-your-shopping-list-for-the-new-green-zebra-grocery","kicker":"GOOD EATS","path":"/health-and-wellness/2016/04/here-s-your-shopping-list-for-the-new-green-zebra-grocery","is_sponsored":false,"sponsor_name":null,"cropping":{"square":{"x1":0,"x2":1000,"y1":0,"y2":1000,"width":1000,"height":1000},"rectangle":{"x1":0,"x2":1500,"y1":0,"y2":1000,"width":1500,"height":1000}},"rectangular_thumbnail":"https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1000,w_1500,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/greenzebra-2_c2eoah.jpg","square_thumbnail":"https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1000,w_1000,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/greenzebra-2_c2eoah.jpg","publish_at":"2016-04-20T10:21:04.000-07:00","updated_at":"2016-10-27T17:04:04.868-07:00","meta":{"meta_title":"","meta_description":"Green Zebra’s Lloyd District location is now open, complete with new snacks galore.  "},"tag_list":["Health","Food News"],"meta_title":null,"meta_description":"Green Zebra’s Lloyd District location is now open, complete with new snacks galore.  ","enable_comments":true,"content":"\u003cp\u003eAfter a couple of false starts in Southeast Portland, \u003ca target=\"_blank\" href=\"http://www.greenzebragrocery.com/\"\u003eGreen Zebra Grocery\u003c/a\u003e is finally ready to debut its second mini-grocery store. Tucked into the ground floor of Lloyd District luxury apartments Hassalo on Eighth, the new location boasts a crowler station (that\u0026rsquo;s a growler in a can!), a bar that pours exclusively Oregon beer, an expanded grab-and-go menu, and, of course, a slew of fabulous local products.\u0026nbsp;\u003c/p\u003e\r\n\u003cp\u003eThe market officially opens April 21 at 7 a.m. When you swing by this weekend to check out the new space, don\u0026rsquo;t miss these tasty and healthy snacks making their Green Zebra debut:\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eApples to Applesauce Granola\u003cbr /\u003e\u003c/strong\u003eCombat child hunger, reduce food waste, and munch on organic granola \u0026hellip; all in one easy step! \u003ca href=\"http://www.applestoapplesauce.org/\" target=\"_blank\"\u003eApples to Applesauce\u003c/a\u003e gleans fruit and nuts from farms and backyards around Portland for use in their small-batch granola, available in flavors like ginger-cranberry-apple and carob-almond-agave. And in case you needed extra incentive to try every variety, consider this: for every bag sold, Apples to Applesauce donates a bag to a local child in need. Win-win!\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eJaivika Naturals\u003cbr /\u003e\u003c/strong\u003eClackamas-based \u003ca href=\"http://jaivikanaturals.com/products/hazelnuts/\" target=\"_blank\"\u003eJaivika Naturals\u003c/a\u003e prides itself on distributing top-quality nuts, seeds, and gluten-free grains straight from sustainable growers to restaurants, bakeries, and, soon, Green Zebra Grocery shoppers. Nibble on roasted pistachios and raw hazelnuts, cook up a cup of organic wild rice, or mix chia seeds into a nutrient-packed pudding.\u0026nbsp;\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eJorinji Miso\u003cbr /\u003e\u003c/strong\u003eThink you know miso? Think again. Portland native Earnest Migaki of\u0026nbsp;\u003ca href=\"http://www.jorinjisoybeam.com\" target=\"_blank\"\u003eSoy Beam Jozo\u003c/a\u003e\u0026nbsp;uses traditional Japanese techniques passed down for more than 1,300 years to create a wide variety of richly flavored, preservative-free misos. Try creamy white miso or rare soy-free chickpea miso\u0026mdash;and check back in a few years for the umami-rich dark red miso, which ferments for three years before hitting the shelves.\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eOlyKraut\u0026nbsp;\u003cbr /\u003e\u003c/strong\u003eYou\u0026rsquo;ve probably seen these fermentation wizards around town before\u0026mdash;maybe you\u0026rsquo;
94ve even sampled their stuff at the Portland Farmers Market\u0026mdash;but \u003ca href=\"http://olykraut.com\" target=\"_blank\"\u003eOlyKraut\u003c/a\u003e deserves another shout-out for their probiotic-rich sauerkraut, made with organic regional produce and Jacobsen sea salt. If you\u0026rsquo;re tired of the same ol\u0026rsquo; cabbage, branch out with flavors like sea greens, spring nettle, or smoke and kale.\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003ePozole to the People\u003cbr /\u003e\u003c/strong\u003eChris Bailey grew up slurping traditional pork pozole at family suppers, topping off his bowls of soup with fresh cilantro, radish, and scallion from the garden. Today, Bailey\u0026rsquo;s \u003ca href=\"http://www.pozoletothepeople.com/\" target=\"_blank\"\u003ePozole to the People\u003c/a\u003e soup starter offers all the bold, hearty flavor of classic pozole, while also being shelf-stable and vegan-friendly. We recommend adding seitan and chunks of avocado for a filling, nutritious, and absurdly easy lunch.\u0026nbsp;\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eTru Flavors Grab \u0026amp; Go Hummus\u003cbr /\u003e\u003c/strong\u003eHummus is delicious \u003cem\u003eand \u003c/em\u003enutritious\u0026mdash;but not always easily portable. Luckily, \u003ca target=\"_blank\" href=\"http://www.truittfamilyfoods.com/\"\u003eTruitt Family Foods\u003c/a\u003e has you covered with their neatly packaged hummus snack packs, perfectly portioned and paired with olive and sea salt crackers. Keep an eye out for future flavors like black bean with roasted poblano and cheddar, as well as caramel apple and chocolate sunbutter \u0026ldquo;dippers.\u0026rdquo;\u003c/p\u003e\r\n\u003cp\u003e\u003cstrong\u003eAnd more\u0026hellip;\u003cbr /\u003e\u003c/strong\u003eLook, we\u0026rsquo;re a health blog, and we\u0026rsquo;re not sure how to construe products like cheese-based sausage, peanut butter puffs, or s\u0026rsquo;mores marshmallow fluff as abundantly healthful. But we\u0026rsquo;re about balance, after all\u0026mdash;so if you\u0026rsquo;re hyped to try something new and locally made, \u003ca href=\"http://cheesorizo.com/\" target=\"_blank\"\u003eCheesorizo\u003c/a\u003e, \u003ca href=\"http://puffworkssnacks.com/\" target=\"_blank\"\u003ePuffworks\u003c/a\u003e, and \u003ca href=\"http://www.kerflufflenutbutter.com/\" target=\"_blank\"\u003eKerfluffle\u003c/a\u003e are all making their debut, as well. Dig in, and\u0026nbsp;don't forget to check out our slideshow of the Green Zebra location at the top of the page!\u0026nbsp;\u003c/p\u003e\r\n\u003cp style=\"text-align: right;\"\u003e\u003ca target=\"_blank\" href=\"http://www.greenzebragrocery.com/\"\u003eGreen Zebra Grocery\u003c/a\u003e\u003cbr /\u003e\u003cspan class=\"directionsLink\"\u003e808 NE Multnomah\u003c/span\u003e\u003cbr /\u003e(971) 256-3330\u003cbr /\u003eOpen 7 a.m.\u0026ndash; 10 p.m. daily\u003c/p\u003e","subtitle":"Green Zebra’s Lloyd District location is now open, complete with new snacks galore.  ","channels":[{"id":58695,"contentable_id":21949,"contentable_type":"Post","channel_id":7,"is_primary":true,"created_at":"2016-04-20T10:03:10.552-07:00","updated_at":"2025-11-05T18:47:14.300-08:00"},{"id":58694,"contentable_id":21949,"contentable_type":"Post","channel_id":120,"is_primary":false,"created_at":"2016-05-11T17:23:33.644-07:00","updated_at":"2020-01-16T05:15:36.018-08:00"}],"image":{"id":53115,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171841/greenzebra-2_c2eoah.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171841/greenzebra-2_c2eoah.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]},"issue":null,"attributions":[{"id":97094,"kind":"Writer","position":1,"producer_token":"Tuck Woodstock","slug":"tuck-woodstock"}],"slideshow_images":[{"id":42091,"image_id":53110,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171837/greenzebra-1_lgx1nt.jpg","title":"The Lloyd District Green Zebra Grocery location opens April 21.","caption":"","position":1,"producers":[],"image":{"id":53110,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171837/greenzebra-1_lgx1nt.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171837/greenzebra-1_lgx1nt.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42094,"image_id":53113,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171839/greenzebra-5_fsmm8w.jpg","title":"","caption":"","position":2,"producers":[],"image":{"id":53113,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171839/greenzebra-5_fsmm8w.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171839/greenzebra-5_fsmm8w.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42092,"image_id":53115,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171841/greenzebra-2_c2eoah.jpg","title":"The new Green Zebra Grocery is located at 808 NE Multnomah.","caption":"All photos by Molly Woodstock","position":3,"producers":[],"image":{"id":53115,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171841/greenzebra-2_c2eoah.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171841/greenzebra-2_c2eoah.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42095,"image_id":53114,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171840/greenzebra-6_heqzwt.jpg","title":"","caption":"","position":4,"producers":[],"image":{"id":53114,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171840/greenzebra-6_heqzwt.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171840/greenzebra-6_heqzwt.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42097,"image_id":53117,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171842/greenzebra-8_n0kb7f.jpg","title":"","caption":"","position":5,"producers":[],"image":{"id":53117,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171842/greenzebra-8_n0kb7f.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171842/greenzebra-8_n0kb7f.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42098,"image_id":53118,"cropping":{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171843/greenzebra-9_qyxw20.jpg","title":"","caption":"","position":6,"producers":[],"image":{"id":53118,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171843/greenzebra-9_qyxw20.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171843/greenzebra-9_qyxw20.jpg"},"dimensions":"1500x1000","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42093,"image_id":53112,"cropping":{"x1":0,"y1":0,"x2":1000,"y2":1500,"width":1000,"height":1500},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171839/greenzebra-4_jfchxs.jpg","title":"The \"ZeBar\" boasts seating, crowler fills, and 100% Oregon brews.","caption":"","position":7,"producers":[],"image":{"id":53112,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171839/greenzebra-4_jfchxs.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171839/greenzebra-4_jfchxs.jpg"},"dimensions":"1000x1500","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}},{"id":42096,"image_id":53116,"cropping":{"x1":0,"y1":0,"x2":1000,"y2":1500,"width":1000,"height":1500},"url":"https://res.cloudinary.com/sagacity/image/upload/v1461171842/greenzebra-7_lr24oi.jpg","title":"","caption":"","position":8,"producers":[],"image":{"id":53116,"urls":{"original":"https://res.cloudinary.com/sagacity/image/upload/v1461171842/greenzebra-7_lr24oi.jpg","thumb":"https://res.cloudinary.com/sagacity/image/upload/c_fill,g_north,h_100,w_100/v1461171842/greenzebra-7_lr24oi.jpg"},"dimensions":"1000x1500","keywords":null,"tag_list":[],"class_name":"Image","metadata":{},"attributions":[]}}]}
95</script>
95
96
97
98
99<script type='application/ld+json'>
100  {
101    "@context": "https://schema.org",
102    "@type": "Article",
103    "mainEntityOfPage": {
104      "@type": "WebPage",
105      "@id": "https://www.pdxmonthly.com/eat-and-drink/2026/09/portland-grocery-stores-history-a-to-z"
106    },
107    "headline": "Portland Grocery Stores, an A-to-Z Guide",
108    "image": "https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2575,w_3864,x_0,y_1300/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1200/rubinette-best-grocery-stores_ycjfkc.jpg",
109    "datePublished": "2026-09-11 11:45:00 -0700",
110    "dateModified": "2026-09-14 09:35:25 -0700",
111    "publisher": {
112      "@type": "Organization",
113      "name": "Portland Monthly"
114    },
115    "description": "A look at where Portlanders buy their food, yesterday and today, Anzen to Zupan&#39;s, plus Fred Meyer, Piggly Wiggly, and other places in between."
116  }
117</script>
117
118
119
120</head>
121<body class='preload'>
122<noscript>
123<iframe height='0' src='//www.googletagmanager.com/ns.html?id=GTM-WMKJLRX' style='display: none; visiblity: hidden;' width='0'></iframe>
124</noscript>
125<div class='site'>
126<header class='site-header'>
127
128<div class='global-navbar navbar'>
129<a class='screen-reader-only' href='#main'>Skip to main content</a>
130<nav class='global-menu' data-action='modal:show-&gt;scroll#lock modal:hide-&gt;scroll#unlock' data-controller='modal'>
131<button aria-controls='site-menu-wrapper' aria-expanded='false' aria-haspopup='true' aria-label='open menu' class='navbar__action' data-action='modal#show' type='button'>
132<svg aria-hidden='true' class='icon icon-menu'>
133<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#menu'></use>
134</svg>
135
136</button>
137<div class='slideover' data-modal-target='element' id='site-menu-wrapper' role='menu'>
138<div class='global-menu__header'>
139<button aria-label='close menu' class='navbar__action' data-action='modal#hide' type='button'>
140<svg aria-hidden='true' class='icon icon-close'>
141<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#close'></use>
142</svg>
143
144</button>
145</div>
146<div class='global-menu__body' data-click-source-position='offscreen' data-click-source='navigation'>
147<section class='global-menu--primary'>
148<ul data-controller='toggle-group'>
149<li class='menu has-children' data-controller='toggle'>
150<div class='menu__label'>
151Eat &amp; Drink
152<button aria-controls='menu-1' aria-expanded='false' aria-label='toggle menu Eat &amp; Drink' class='menu__toggle' data-action='toggle#toggle'>
153<svg aria-hidden='true' class='icon icon-plus'>
154<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
155</svg>
156
157</button>
158</div>
159<ul class='menu__items' data-toggle-target='toggleable'>
160<li class='menu__item'>
161<a href="/eat-and-drink/portland-best-restaurants">Best Restaurants</a>
162</li>
163<li class='menu__item'>
164<a href="/tags/best-bars">Best Bars</a>
165</li>
166<li class='menu__item'>
167<a href="/eat-and-drink/best-cheap-eats-portland-budget-friendly-food">Cheap Eats</a>
168</li>
169<li class='menu__item'>
170<a href="/eat-and-drink/groceries-and-markets">Groceries &amp; Markets</a>
171</li>
172<li class='menu__item'>
173<a href="/eat-and-drink/food-news">Food News &amp; Events</a>
174</li>
175<li class='menu__item'>
176<a href="/eat-and-drink/wine-beer-cocktails-bars">Wine, Beer &amp; Cocktails</a>
177</li>
178<li class='menu__item'>
179<a href="/eat-and-drink">View all</a>
180</li>
181</ul>
182</li>
183<li class='menu has-children' data-controller='toggle'>
184<div class='menu__label'>
185Style &amp; Shopping
186<button aria-controls='menu-3' aria-expanded='false' aria-label='toggle menu Style &amp; Shopping' class='menu__toggle' data-action='toggle#toggle'>
187<svg aria-hidden='true' class='icon icon-plus'>
188<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
189</svg>
190
191</button>
192</div>
193<ul class='menu__items' data-toggle-target='toggleable'>
194<li class='menu__item'>
195<a href="/style-and-shopping/fashion-features">Fashion</a>
196</li>
197<li class='menu__item'>
198<a href="/style-and-shopping/beauty">Body &amp; Beauty</a>
199</li>
200<li class='menu__item'>
201<a href="/style-and-shopping/mens-fashion">Men&#39;s Fashion</a>
202</li>
203<li class='menu__item'>
204<a href="/style-and-shopping/womens-fashion">Women&#39;s Fashion</a>
205</li>
206<li class='menu__item'>
207<a href="/style-and-shopping">View all</a>
208</li>
209</ul>
210</li>
211<li class='menu has-children' data-controller='toggle'>
212<div class='menu__label'>
213Things to Do 
214<button aria-controls='menu-25' aria-expanded='false' aria-label='toggle menu Things to Do ' class='menu__toggle' data-action='toggle#toggle'>
215<svg aria-hidden='true' class='icon icon-plus'>
216<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
217</svg>
218
219</button>
220</div>
221<ul class='menu__items' data-toggle-target='toggleable'>
222<li class='menu__item'>
223<a href="/arts-and-culture/things-to-do-in-portland-this-week">Things to Do in Portland This Week</a>
224</li>
225<li class='menu__item'>
226<a href="/travel-and-outdoors/what-to-do-in-oregon-in-march">What to Do in Oregon This Month</a>
227</li>
228<li class='menu__item'>
229<a href="/news-and-city-life/what-to-do-in-portland">50 Things: A Portland Bucket List</a>
230</li>
231<li class='menu__item'>
232<a href="/travel-and-outdoors/oregon-adventures-2022">12 Trips: An Oregon Bucket List</a>
233</li>
234</ul>
235</li>
236<li class='menu has-children' data-controller='toggle'>
237<div class='menu__label'>
238Arts &amp; Culture
239<button aria-controls='menu-2' aria-expanded='false' aria-label='toggle menu Arts &amp; Culture' class='menu__toggle' data-action='toggle#toggle'>
240<svg aria-hidden='true' class='icon icon-plus'>
241<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
242</svg>
243
244</button>
245</div>
246<ul class='menu__items' data-toggle-target='toggleable'>
247<li class='menu__item'>
248<a href="/arts-and-culture">View all</a>
249</li>
250<li class='menu__item'>
251<a href="/arts-and-culture/things-to-do-in-portland-this-week">Things to Do</a>
252</li>
253<li class='menu__item'>
254<a href="/arts-and-entertainment/books-and-talks">Books &amp; Talks</a>
255</li>
256<li class='menu__item'>
257<a href="/arts-and-entertainment/film">Film &amp; Television</a>
258</li>
259<li class='menu__item'>
260<a href="/arts-and-entertainment/music">Music</a>
261</li>
262<li class='menu__item'>
263<a href="/arts-and-entertainment/art">Visual Art</a>
264</li>
265<li class='menu__item'>
266<a href="/arts-and-culture/performing-arts">Performing Arts</a>
267</li>
268</ul>
269</li>
270<li class='menu has-children' data-controller='toggle'>
271<div class='menu__label'>
272News &amp; City Life
273<button aria-controls='menu-5' aria-expanded='false' aria-label='toggle menu News &amp; City Life' class='menu__toggle' data-action='toggle#toggle'>
274<svg aria-hidden='true' class='icon icon-plus'>
275<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
276</svg>
277
278</button>
279</div>
280<ul class='menu__items' data-toggle-target='toggleable'>
281<li class='menu__item'>
282<a href="/news-and-city-life">View all</a>
283</li>
284<li class='menu__item'>
285<a href="/news-and-city-life/city-community">City &amp; Community</a>
286</li>
287<li class='menu__item'>
288<a href="/news-and-profiles/politics">Politics</a>
289</li>
290<li class='menu__item'>
291<a href="/news-and-profiles/education">Education</a>
292</li>
293<li class='menu__item'>
294<a href="/tags/history">History</a>
295</li>
296<li class='menu__item'>
297<a href="/tags/longreads">Longreads</a>
298</li>
299<li class='menu__item'>
300<a href="/news-and-profiles/science-and-technology">Science &amp; Technology</a>
301</li>
302<li class='menu__item'>
303<a href="/news-and-city-life/sports">Sports</a>
304</li>
305</ul>
306</li>
307<li class='menu has-children' data-controller='toggle'>
308<div class='menu__label'>
309Travel &amp; Outdoors
310<button aria-controls='menu-4' aria-expanded='false' aria-label='toggle menu Travel &amp; Outdoors' class='menu__toggle' data-action='toggle#toggle'>
311<svg aria-hidden='true' class='icon icon-plus'>
312<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
313</svg>
314
315</button>
316</div>
317<ul class='menu__items' data-toggle-target='toggleable'>
318<li class='menu__item'>
319<a href="/tags/coast">Oregon Coast</a>
320</li>
321<li class='menu__item'>
322<a href="/tags/mt-hood">Mount Hood</a>
323</li>
324<li class='menu__item'>
325<a href="/tags/hiking">Hiking</a>
326</li>
327<li class='menu__item'>
328<a href="/travel-and-outdoors/road-trips">Road Trips</a>
329</li>
330<li class='menu__item'>
331<a href="/travel-and-outdoors/weekend-getaways">Weekend Getaways</a>
332</li>
333<li class='menu__item'>
334<a href="/travel-and-outdoors">View all</a>
335</li>
336</ul>
337</li>
338<li class='menu has-children' data-controller='toggle'>
339<div class='menu__label'>
340Home &amp; Real Estate
341<button aria-controls='menu-8' aria-expanded='false' aria-label='toggle menu Home &amp; Real Estate' class='menu__toggle' data-action='toggle#toggle'>
342<svg aria-hidden='true' class='icon icon-plus'>
343<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
344</svg>
345
346</button>
347</div>
348<ul class='menu__items' data-toggle-target='toggleable'>
349<li class='menu__item'>
350<a href="/home-and-real-estate">View all</a>
351</li>
352<li class='menu__item'>
353<a href="/home-and-real-estate/architecture-and-design">Architecture &amp; Design</a>
354</li>
355<li class='menu__item'>
356<a href="/tags/home-design">Featured Homes</a>
357</li>
358<li class='menu__item'>
359<a href="/tags/home-and-garden">Gardening</a>
360</li>
361<li class='menu__item'>
362<a href="/home-and-real-estate/neighborhood-guides">Neighborhood Guides</a>
363</li>
364<li class='menu__item'>
365<a href="/home-and-real-estate/real-estate">Real Estate</a>
366</li>
367</ul>
368</li>
369<li class='menu has-children' data-controller='toggle'>
370<div class='menu__label'>
371Health &amp; Wellness
372<button aria-controls='menu-9' aria-expanded='false' aria-label='toggle menu Health &amp; Wellness' class='menu__toggle' data-action='toggle#toggle'>
373<svg aria-hidden='true' class='icon icon-plus'>
374<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
375</svg>
376
377</button>
378</div>
379<ul class='menu__items' data-toggle-target='toggleable'>
380<li class='menu__item'>
381<a href="/health-and-wellness">View all</a>
382</li>
383<li class='menu__item'>
384<a href="/doctors">Top Doctors</a>
385</li>
386<li class='menu__item'>
387<a href="/dentists">Top Dentists</a>
388</li>
389<li class='menu__item'>
390<a href="/news-and-city-life/cannabis">Cannabis</a>
391</li>
392<li class='menu__item'>
393<a href="/health-and-wellness/covid-19-portland">COVID-19</a>
394</li>
395<li class='menu__item'>
396<a href="/health-and-wellness/more-health-wellness-portland">More Health &amp; Wellness</a>
397</li>
398</ul>
399</li>
400<li class='menu'>
401<div class='menu__label'><a href="/subscribe">Subscribe</a></div>
402</li>
403
404</ul>
405</section>
406<section class='global-menu--secondary'>
407<ul data-controller='toggle-group'>
408<li class='menu has-children' data-controller='toggle'>
409<div class='menu__label'>
410Gift Guides
411<button aria-controls='menu-24' aria-expanded='false' aria-label='toggle menu Gift Guides' class='menu__toggle' data-action='toggle#toggle'>
412<svg aria-hidden='true' class='icon icon-plus'>
413<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
414</svg>
415
416</button>
417</div>
418<ul class='menu__items' data-toggle-target='toggleable'>
419<li class='menu__item'>
420<a href="/gift-guides">View all</a>
421</li>
422<li class='menu__item'>
423<a href="/style-and-shopping/2023/11/portland-holiday-gift-experiences">Experiences Gift Guide</a>
424</li>
425<li class='menu__item'>
426<a href="/style-and-shopping/holiday-gift-guide-ideas-2022">Holiday Gift Guide</a>
427</li>
428<li class='menu__item'>
429<a href="/gift-guides/local-portland-gifts">Great Gifts from Portland</a>
430</li>
431<li class='menu__item'>
432<a href="/gift-guides/gifts-by-price">Ideas for Gifts to Suit Any Budget</a>
433</li>
434<li class='menu__item'>
435<a href="/style-and-shopping/2023/02/valentine-gift-guide-last-minute-presents-portland-quadrant">Valentine&#39;s Day</a>
436</li>
437</ul>
438</li>
439<li class='menu has-children' data-controller='toggle'>
440<div class='menu__label'>
441Best of the City
442<button aria-controls='menu-11' aria-expanded='false' aria-label='toggle menu Best of the City' class='menu__toggle' data-action='toggle#toggle'>
443<svg aria-hidden='true' class='icon icon-plus'>
444<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
445</svg>
446
447</button>
448</div>
449<ul class='menu__items' data-toggle-target='toggleable'>
450<li class='menu__item'>
451<a href="/eat-and-drink/portland-best-restaurants">Restaurants</a>
452</li>
453<li class='menu__item'>
454<a href="/eat-and-drink/best-bars-portland">Bars</a>
455</li>
456<li class='menu__item'>
457<a href="/eat-and-drink/best-breakfast-portland">Breakfast &amp; Brunch</a>
458</li>
459<li class='menu__item'>
460<a href="/home-and-real-estate/neighborhood-guides">Neighborhood Guides</a>
461</li>
462<li class='menu__item'>
463<a href="https://www.pdxmonthly.com/doctors">Doctors</a>
464</li>
465<li class='menu__item'>
466<a href="/health-and-wellness/portland-top-doctors-nurses-medical-providers-2023">All Medical Providers</a>
467</li>
468<li class='menu__item'>
469<a href="/dentists">Dentists</a>
470</li>
471</ul>
472</li>
473<li class='menu has-children' data-controller='toggle'>
474<div class='menu__label'>
475The Magazine
476<button aria-controls='menu-13' aria-expanded='false' aria-label='toggle menu The Magazine' class='menu__toggle' data-action='toggle#toggle'>
477<svg aria-hidden='true' class='icon icon-plus'>
478<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#plus'></use>
479</svg>
480
481</button>
482</div>
483<ul class='menu__items' data-toggle-target='toggleable'>
484<li class='menu__item'>
485<a href="/subscribe">Subscribe</a>
486</li>
487<li class='menu__item'>
488<a href="/issues/current">Current Issue</a>
489</li>
490<li class='menu__item'>
491<a href="/issues">Past Issues</a>
492</li>
493<li class='menu__item'>
494<a href="https://www.pdxmonthly.com/sponsored?is_sponsored=true">Sponsored Content</a>
495</li>
496<li class='menu__item'>
497<a href="/pages/about">About Us</a>
498</li>
499<li class='menu__item'>
500<a href="/pages/contact">Contact Us</a>
501</li>
502<li class='menu__item'>
503<a href="/pages/advertise">Advertise/Media Kit</a>
504</li>
505</ul>
506</li>
507
508</ul>
509</section>
510<section class='global-menu--social'>
511<ul class='social-media-menu'>
512<li>
513<a href="https://www.facebook.com/portlandmonthly"><span class='visually-hidden'>Facebook</span>
514<svg aria-hidden='true' class='icon icon-facebook'>
515<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#facebook'></use>
516</svg>
517
518</a></li>
519<li>
520<a href="https://twitter.com/PoMoMagazine"><span class='visually-hidden'>Twitter</span>
521<svg aria-hidden='true' class='icon icon-twitter'>
522<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#twitter'></use>
523</svg>
524
525</a></li>
526<li>
527<a href="https://instagram.com/pomomagazine"><span class='visually-hidden'>Instagram</span>
528<svg aria-hidden='true' class='icon icon-instagram'>
529<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#instagram'></use>
530</svg>
531
532</a></li>
533<li>
534<a href="https://www.pinterest.com/portlandmonthly"><span class='visually-hidden'>Pinterest</span>
535<svg aria-hidden='true' class='icon icon-pinterest'>
536<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#pinterest'></use>
537</svg>
538
539</a></li>
540<li>
541<a href="https://www.linkedin.com/company/portland-monthly"><span class='visually-hidden'>LinkedIn</span>
542<svg aria-hidden='true' class='icon icon-linkedin'>
543<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#linkedin'></use>
544</svg>
545
546</a></li>
547</ul>
548
549</section>
550<section class='global-menu--footer'>
551<ul><li class='menu has-children'>
552<div class='menu__label'>Channels</div>
553<ul class='menu__items'>
554<li class='menu__item'>
555<a href="/eat-and-drink">Eat &amp; Drink</a>
556</li>
557<li class='menu__item'>
558<a href="/style-and-shopping">Style &amp; Shopping</a>
559</li>
560<li class='menu__item'>
561<a href="/arts-and-culture">Art &amp; Culture</a>
562</li>
563<li class='menu__item'>
564<a href="/news-and-city-life">News &amp; City Life</a>
565</li>
566<li class='menu__item'>
567<a href="/travel-and-outdoors">Travel &amp; Outdoors</a>
568</li>
569<li class='menu__item'>
570<a href="/home-and-real-estate">Home &amp; Real Estate</a>
571</li>
572<li class='menu__item'>
573<a href="/health-and-wellness">Health &amp; Wellness</a>
574</li>
575</ul>
576</li>
577<li class='menu has-children'>
578<div class='menu__label'>About Us</div>
579<ul class='menu__items'>
580<li class='menu__item'>
581<a href="/pages/about">Masthead</a>
582</li>
583<li class='menu__item'>
584<a href="https://about.pdxmonthly.com">Advertise</a>
585</li>
586<li class='menu__item'>
587<a href="/pages/jobs-at-portlandmonthly">Jobs</a>
588</li>
589<li class='menu__item'>
590<a href="/pages/privacy">Privacy Policy</a>
591</li>
592<li class='menu__item'>
593<a href="/pages/terms">Terms of Use</a>
594</li>
595<li class='menu__item'>
596<a href="/pages/sitemap">Site Map</a>
597</li>
598<li class='menu__item'>
599<a href="/pages/contact">Contact Us</a>
600</li>
601</ul>
602</li>
603<li class='menu has-children'>
604<div class='menu__label'>Subscriptions</div>
605<ul class='menu__items'>
606<li class='menu__item'>
607<a href="/subscribe">Subscribe</a>
608</li>
609<li class='menu__item'>
610<a href="/renew">Renew Subscription</a>
611</li>
612<li class='menu__item'>
613<a href="/pages/subscriber-faq">Change Address</a>
614</li>
615<li class='menu__item'>
616<a href="/pages/subscriber-faq">Subscriber FAQ</a>
617</li>
618<li class='menu__item'>
619<a href="/purchase-back-issues">Purchase Back Issues</a>
620</li>
621<li class='menu__item'>
622<a href="/newsletters">Newsletters</a>
623</li>
624</ul>
625</li>
626<li class='menu has-children'>
627<div class='menu__label'>Pacific Media Group</div>
628<ul class='menu__items'>
629<li class='menu__item'>
630<a href="https://www.seattlemet.com">Seattle Met</a>
631</li>
632<li class='menu__item'>
633<a href="https://www.houstoniamag.com">Houstonia</a>
634</li>
635<li class='menu__item'>
636<a href="https://www.aspensojo.com">Aspen Sojourner</a>
637</li>
638<li class='menu__item'>
639<a href="https://www.vailmag.com">Vail-Beaver Creek Magazine</a>
640</li>
641<li class='menu__item'>
642<a href="https://www.parkcitymag.com">Park City Magazine</a>
643</li>
644</ul>
645</li>
646</ul>
647</section>
648<section class='global-menu--address'>
649<p>
650<strong>Portland Monthly</strong>
651<br>
652329 NE Couch Street, Suite 200<br>Portland, OR 97232
653</p>
654</section>
655<section class='global-menu--boilerplate'>
656<span>&copy; 2026 Pacific Media Group</span>
657</section>
658</div>
659</div>
660<div class='scrim'></div>
661</nav>
662<h1 class='global-logo'>
663<a href="/"><span class='screen-reader-only'>Portland Monthly</span>
664<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="381px" height="80px" viewBox="0 0 381 80" enable-background="new 0 0 381 80" xml:space="preserve">
665<path id="primary" fill-rule="evenodd" clip-rule="evenodd" d="M181.4,78.6h28.8v-8.9c-4.9,0-7.1-1.5-7.1-5.7V0.9l-24,4.7v7.4  c4.4,0,9.3,1,9.3,5.9v45.4c0,5.1-2.5,5.6-5.2,5.6L181.4,78.6z M167.4,8v18.5H180v10.2h-12.6v23.9c0,7.6,2,9.5,8.2,9.5  c1.5,0,3.1-0.2,5.3-0.4l-1.8,8.8c-3,0.6-7.1,0.8-9.5,0.8c-11.1,0-16.7-3.1-16.7-15.2V36.8h-7.5l2.1-10.2h5.3V11.2L167.4,8z   M257.1,65.8V43.5c0-12.8-6.7-18.4-22.3-18.4c-7.5,0-13.9,1.1-19.5,2.9v13.6h8.6c0.6-4.9,3.3-5.9,9.1-5.9c7.2,0,9.4,3.2,9.4,7.8v1.1  c-19.9,0.4-30.7,7.7-30.7,20.5c0,8.9,5.9,14.4,15.5,14.4c7.1,0,13.1-3.2,16.2-8.6l-0.2,7.6h18.6l1.8-8.9  C259.5,69.8,257.1,68.9,257.1,65.8L257.1,65.8z M242.5,56.5c0,5.9-3.8,12.3-11.2,12.3c-3.6,0-5.9-1.9-5.9-5.1  c0-5.6,5.7-9.6,17.1-9.6V56.5z M293.6,78.6h-29.7l1.8-8.9c3,0,6.2-1.2,6.2-5.4V40.1c0-4.2-2.7-5.2-7.7-5.2v-8.8l21.3-0.3l-0.2,7.9  c3.4-4.9,9.7-8.6,17.3-8.6c10.6,0,16,6.1,16,16.9v22c0,4.6,2.8,5.7,6.8,5.7v8.9H304V44.3c0-4.3-1.7-7.4-6.3-7.4  c-6.2,0-11.1,6-11.1,13.4v13.9c0,4.6,4.2,5.6,7.1,5.6V78.6z M30.1,51.9c17.7,0,30-10.4,30-25.9C60,11,49.9,2.5,31.4,2.5  C23.5,2.5,20,2.9,0,2.9V12l10.5,1.5v50.2c0,3.8-2.6,5-6.1,5H2.3v10h35v-10h-3.7c-4,0-6.6-1.5-6.6-5.1V51.7  C28.4,51.9,28.9,51.9,30.1,51.9L30.1,51.9z M26.9,13.8h3.7C38.9,13.8,44,18,44,26.4c0,11.7-8.6,15.7-17.1,15V13.8z M144.7,26.5  l-2.1,10.4c-9.8-0.6-15.5,6.7-15.5,15.6v11.5c0,4.9,2.8,5.9,7.6,5.9v8.9h-28v-8.9c4.5,0,6.5-1.9,6.5-5.8V39.5c0-4-3.7-4.8-7.5-4.8  v-8.6l21-0.3l-0.3,8.8C129.8,27.5,135.5,25,144.7,26.5L144.7,26.5z M374.4,64.7V0l-23.3,4.5v7.2c4.4,0,8.7,1.3,8.7,5.8v8.4  c-1.9-0.3-3.8-0.5-5.9-0.5c-16.4,0-28.7,10.4-28.7,29.6c0,17.1,8.3,24.6,20.2,24.6c6.5,0,12.3-3,15.4-8.3l-0.2,7.4H381v-8.9  C377.1,69.8,374.4,69.3,374.4,64.7L374.4,64.7z M349.4,68c-5.1,0-9.4-4.3-9.4-13.3c0-12.1,5.9-17.1,14.2-17.1c1.8,0,3.7,0.2,5.6,0.6  v17.1C359.8,62.2,355.3,68,349.4,68L349.4,68z M107.5,52.3c0,16.1-10.4,27.3-25.2,27.3C67.9,79.6,57,68.4,57,52.3  c0-15.9,10.9-27.2,25.2-27.2C97.7,25.1,107.5,36.4,107.5,52.3L107.5,52.3z M92.5,52.4c0-10-4.4-15.8-10.3-15.8  c-5.9,0-10.4,5.9-10.4,15.8c0,10.1,4.5,15.9,10.4,15.9C88.1,68.4,92.5,62.5,92.5,52.4L92.5,52.4z M279.3,6h-2.8V3.7h8.6V6h-2.9v7.8  h-2.9V6z M215.1,13.8h2.6V7.6l2.5,6.2h1l2.5-6.2v6.2h2.9V3.7h-3.7l-1.9,5.3l-1.9-5.3h-3.7V13.8z M241.8,3.6c-3,0-5.3,2-5.3,5.1v0.1  c0,3,2,5.1,5.2,5.1c3.3,0,5.5-2.1,5.5-5.2V8.7C247.1,5.6,244.9,3.6,241.8,3.6L241.8,3.6z M244.1,8.9c0,1.7-1,2.9-2.4,2.9  c-1.4,0-2.4-1.1-2.4-2.9V8.8c0-1.8,1-2.9,2.4-2.9c1.4,0,2.4,1.1,2.4,2.9V8.9z M257.1,13.8h2.6V7.5l3.6,6.3h2.8V3.7h-2.5v5.7  l-3.3-5.7h-3.2V13.8z M316.2,3.7h2.9v7.8h4v2.2h-6.8V3.7z M334.2,13.8h3V9.5l3.1-5.8h-2.8l-1.7,3.4l-1.7-3.4H331l3.2,5.8V13.8z   M295.5,3.7h3v3.8h3.2V3.7h2.9v10.1h-2.9v-4h-3.2v4h-3V3.7z"></path>
666</svg>
667
668</a></h1>
669<form action='/search' class='global-search' data-action='modal:show-&gt;scroll#lock modal:hide-&gt;scroll#unlock' data-controller='modal' method='GET'>
670<button aria-controls='site-search' aria-expanded='false' aria-haspopup='true' aria-label='open search' class='navbar__action' data-action='modal#show' type='button'>
671<svg aria-hidden='true' class='icon icon-search'>
672<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#search'></use>
673</svg>
674
675</button>
676<div class='modal' data-modal-target='element' id='site-search'>
677<div class='navbar'>
678<button aria-label='close menu' class='navbar__action' data-action='modal#hide' type='button'>
679<svg aria-hidden='true' class='icon icon-close'>
680<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#close'></use>
681</svg>
682
683</button>
684</div>
685<div class='container'>
686<div class='global-search__fields'>
687<input name='query' placeholder='Search...' type='search'>
688<button aria-label='submit search' title='Submit search' type='submit'>
689<svg aria-hidden='true' class='icon icon-search'>
690<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#search'></use>
691</svg>
692
693</button>
694</div>
695</div>
696</div>
697</form>
698</div>
699<div class='global-quicklinks' data-click-source-position='primary' data-click-source='navigation'>
700<ul><li><a href="/eat-and-drink">Eat &amp; Drink</a></li>
701<li><a href="/style-and-shopping">Style &amp; Shopping</a></li>
702<li><a href="/arts-and-culture/things-to-do-in-portland-this-week">Things to Do </a></li>
703<li><a href="/arts-and-culture">Arts &amp; Culture</a></li>
704<li><a href="/news-and-city-life">News &amp; City Life</a></li>
705<li><a href="/travel-and-outdoors">Travel &amp; Outdoors</a></li>
706<li><a href="/home-and-real-estate">Home &amp; Real Estate</a></li>
707<li><a href="/health-and-wellness">Health &amp; Wellness</a></li>
708<li><a href="/subscribe">Subscribe</a></li>
709</ul>
710</div>
711
712
713</header>
714<main class='site-main'>
715<nav aria-label="Breadcrumb" class="breadcrumbs" data-controller="sticky"><ol><li><a href="/"><img src="/assets/portland_monthly/icon-f0ce2a7c2e4cadad34030b5abba56335c93f0ae2da3ad3d8a69db960d2d61cbe.png" /></a></li><li><a href="https://www.pdxmonthly.com/eat-and-drink">Eat & Drink</a></li><li><a href="https://www.pdxmonthly.com/eat-and-drink/groceries-and-markets">Groceries & Markets</a></li><li><a aria-current="page" href="https://www.pdxmonthly.com/eat-and-drink/2026/09/portland-grocery-stores-history-a-to-z">An A-to-Z Guide to Portland Grocery Stores</a></li></ol></nav>
716
717<article class='story layout--feature-article'>
718<div class='cover-image'>
719<div class='thumbnail aspect_ratio_rectangle' data-controller='image'>
720<img data-image-target="image" data-src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2575,w_3864,x_0,y_1300/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/rubinette-best-grocery-stores_ycjfkc.jpg" class="cld-responsive" />
721<noscript>
722<img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2575,w_3864,x_0,y_1300/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/rubinette-best-grocery-stores_ycjfkc.jpg" />
723</noscript>
724</div>
725
726</div>
727<header class='story-header'>
728<div class='v2-kicker'>Super Markets</div>
729<h1 class='v2-headline'>An A-to-Z Guide to Portland Grocery Stores</h1>
730<div class='v2-subhed'>Where we shop, yesterday and today.</div>
731<p class='inline-list page-header__meta'>
732<span class='inline-list__item'>
733By
734<a href="/producers/margaret-seiler">Margaret Seiler</a>
735</span>
736
737<span class='inline-list__item page-header__meta__date'>
738September 11, 2026
739</span>
740<span class='inline-list__item'>
741Published in the <a href="/issues/portland-monthly-fall-2026-issue">Fall 2026</a> issue of
742<em>Portland Monthly</em>
743</span>
744</p>
745</header>
746
747
748<section class='story-main ck-prose-container' ng-controller='ContentController'>
749<div class='c-body' data-click-source='content'>
750<p><span class="c-lead-in">Looking back</span> at more than a century of the grocery game in Portland, a lot has changed and a lot hasn't. Many stores today are in spaces that used to be different stores, mergers and consolidations are hardly a re
750cent trend, and every old or long-lost favorite was once a newcomer.</p>
751<p>For most every letter in this A-to-Z rundown, we could have just as easily featured a different store: the recently departed <a href="/articles/iconic-northwest-grocer-city-market-to-close-august-18" target="_self" data-entity-class="Article" data-entity-id="17795" data-entity-method="link" data-entity-type="content">City Market</a> or Strohecker's, the on-the-rise Market of Choice, Gresham's farm-focused Growers Outlet, Southeast standby People's Co-op, or the Portland-founded, now Korean-owned New Seasons. What follows is simply a sampling of where we shop, yesterday and today.</p><div class="ad-section ad-section--inline ad-section--inline--rich-media" data-controller="display-ad" data-display-ad-dimensions-desktop-value="[[3, 1]]" data-display-ad-dimensions-mobile-value="[[3, 1]]" data-display-ad-dimensions-tablet-value="[[3, 1]]"></div>
752
753<p><em>Above: Rubinette’s Josh Alsberg, at his produce stand inside Providore Fine Foods.</em></p>
754<hr>
755<section class="c-listicle-block" data-ink-block="list-item"><header>
756<h2>Anzen</h2>
757</header><main>
758<p>Founded in 1905 in <a href="/articles/old-town-history-nihonmachi-portland" target="_self" data-entity-class="Article" data-entity-id="23432" data-entity-method="link" data-entity-type="content">Nihonmachi</a>, or Japantown, the shop then known as Teikoku Company was shuttered and liquidated by the City of Portland after the Pearl Harbor attack. In 1946, after being separated and sent all over the US in various stages of incarceration, Umata and Fumi Matsushima restarted the shop with a new name. Anzen moved across the river in the 1960s and advertised itself as a way to “tour Japan” and “taste the Orient.” It closed in 2014 when Umata and Fumi’s son Hiroshi Matsushima, a toddler when he was sent to the Minidoka, retired. </p>
759</main></section>
760<section class="c-listicle-block" data-ink-block="list-item"><header>
761<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96282" data-entity-method="embed" data-image-align="center" data-image-caption="The meat counter at Barbur World Foods is stocked with Vietnamese skewers, beef kafta, and mint lamb kabobs." data-image-selection='{"x1":94,"y1":25,"x2":3750,"y2":2500,"width":3656,"height":2475}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2475,w_3656,x_94,y_25/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/barbur-world-foods-best-grocery_stores_mqh0rc.jpg">
762<figcaption>
763<div class="c-media__caption">The meat counter at Barbur World Foods is stocked with Vietnamese skewers, beef kafta, and mint lamb kabobs.</div>
764<div class="c-media__attributions">
765<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
766</div>
767</figcaption>
768</figure>
769<h2>
770<a href="https://www.worldfoodsportland.com" target="_blank" rel="noopener">Barbur World Foods</a> </h2>
771</header><main>
772<p>This Southwest store was once plain old Barbur Foods, a neighborhood staple that held occasional contests to get more people in the door, giving away dinner for eight at nearby Henry Ford’s or a weekend at the Shilo in Lincoln City. But its inventory was nothing special. Since John and Mirna Attar took it over in 2004, there have been some additions: house-packed makrut lime leaves, Ya Hala desserts (the Attars own the Montavilla restaurant off SE 82nd, too, and a relative runs the adjacent La Bouffe market—see 82nd Avenue entry under <em>E</em>, below), a stunning olive selection in the condiment aisle, and pain au lait sandwiches and Lebanese meat pies filling the deli case. A World Market in the Pearl and a Barbur Foods in Concourse E at PDX expand the reach, but this namesake is the mother ship.</p>
773</main></section><div class="v2-item ad--native is-spon" data-controller="native-ad"></div>
774<div class="auto-content"></div>
775
776<section class="c-listicle-block" data-ink-block="list-item"><header>
777<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96283" data-entity-method="embed" data-image-align="center" data-image-caption="Cherry Spout’s rooftop carrot peeks through the trees." data-image-selection='{"x1":0,"y1":403,"x2":2397,"y2":3216,"width":2397,"height":2813}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2813,w_2397,x_0,y_403/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/cherry-sprout-market-best-grocery_stores_wvply7.jpg">
778<figcaption>
779<div class="c-media__caption">Cherry Spout’s rooftop carrot peeks through the trees.</div>
780<div class="c-media__attributions">
781<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
782</div>
783</figcaption>
784</figure>
785<h2>
786<a href="https://www.instagram.com/cherrysprout/?hl=en" target="_blank" rel="noopener">Cherry Sprout</a> </h2>
787</header><main>
787
788<p>There’s a long story behind the rooftop root veggie on the former Big City Produce, involving a “free carrot” listing in Tacoma, a truck, and a few people in bunny costumes. The short story? “It was a gift,” says Nick O’Neill, who has owned Cherry Sprout in Humboldt for the past decade. With produce, pantry staples, beer, wine, and even Boom Boom Balloons piñatas, it’s the kind of store there used to be more of. People come in and say, “I wish this was in my neighborhood,” O’Neill reports, as he explains how a small market stocking essentials is “one of the most difficult businesses you could ever do. We’ve been really blessed with built-in customer support that has grown with us. I don’t spend any money on marketing. We’re as tight and bootstrapped as you can be.”</p>
789</main></section>
790<section class="c-listicle-block" data-ink-block="list-item"><header>
791<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96284" data-entity-method="embed" data-image-align="center" data-image-caption="Bryan M. Vance runs Stumptown Savings, which gathers weekly specials at more than 20 local stores." data-image-selection='{"x1":0,"y1":0,"x2":3750,"y2":2500,"width":3750,"height":2500}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2500,w_3750,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/stumptown-savings-best-grocery_stores_pxea6g.jpg">
792<figcaption>
793<div class="c-media__caption">Bryan M. Vance runs Stumptown Savings, which gathers weekly specials at more than 20 local stores.</div>
794<div class="c-media__attributions">
795<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
796</div>
797</figcaption>
798</figure>
799<h3>Deals! Discounts! Detours! </h3>
800</header><main>
801<p>Bryan M. Vance didn’t set out to become a grocery guru. He was just a little bit suspicious, having noticed that some items at the QFC he could walk to were different from what he saw at Fred Meyer, even though both were owned by Kroger. He was also hoping to stretch his dollar, as Portland—especially Sellwood, where he lived then—had a much higher cost of living than where he’d moved from. </p>
802<p>“I started a spreadsheet of everything that I regularly bought,” he says, and for a month he logged prices at stores including Fred Meyer, New Seasons, and WinCo. “That’s when I realized I could walk to QFC, but I was gonna pay like 20 percent more for literally the exact same thing,” Vance says. “It was a convenience tax.” Going a little bit out of your way or your regular routine, he learned, could pay off.</p>
803<p>That spreadsheet became <a href="https://stumptownsavings.com" target="_blank" rel="noopener">Stumptown Savings</a>, Vance’s website, news outlet, and online community where he gathers weekly specials at more than 20 local stores. He publishes a list every Thursday, pulling out the best deals of the week and the cheapest current place to get a dozen eggs, a gallon of milk, and other staples. Paid subscribers in his Savers Club can access even more details and be invited to members-only events. He also runs blind taste tests with local food writers for things like supermarket sushi (“One clearly won. One got spit out.”), store-brand seltzer, and rotisserie chicken. </p>
804<p>The chicken winner, WinCo (see <em>W</em>, below), is Vance’s go-to. For sheer price, he’s also a fan of closeout stores like <a href="https://eddgroceries.com" target="_blank" rel="noopener">Daily Deals</a>. “Just because it’s closeout doesn’t mean it’s old produce. It often means that a supplier had way too much, Fred Meyer and Albertsons wouldn’t take it all, so they’re able to buy it at a discount and sell it at a discount.” It’s hard to predict what a closeout store will have, he says, but “if you’re willing to go in there with an open mind and not really a set list, you can save a lot of money.”</p>
805</main></section>
806<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96301" data-entity-method="embed" data-image-align="center" data-image-caption="Villas Market resides in a former bowling alley on SE 82nd Avenue." data-image-selection='{"x1":0,"y1":0,"x2":2813,"y2":2738,"width":2813,"height":2738}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2738,w_2813,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/villas-marketest-grocery-stores_rbe5aa.jpg">
807<figcaption>
808<div class="c-media__caption">Villas Market resides in a former bowling alley on SE 82nd Avenue.</div>
809<div class="c-media__attributions">
810<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
811</div>
812</figcaption>
813</figure>
814<section class="c-listicle-block" data-ink-block="list-item"><header>
815<h2>82nd Avenue </h2>
816</header><main>
816
817<p><a href="https://www.fubonn.com/" target="_blank" rel="noopener">Fubonn</a> wasn’t the first Asian market on SE 82nd Avenue when it opened in 2006, but its sheer size and role as the anchor of a shopping center catering to Portland’s Asian communities marked a noticeable shift in the city’s geography. In the 20 years since, downtown’s Chinatown has seen more longtime businesses close, while the Jade District (so named in 2012) along 82nd continues to welcome markets offering many groups, not just Asian immigrants and their descendants, a taste of home. Here are just a few of them, from north to south.</p>
818<p><strong>Hồng Phát </strong>(101 SE 82nd Ave) Opened in 2013 in a former Safeway, this utilitarian Vietnamese grocery has a killer grab-and-go banh mi lunch special.</p>
819<p><strong>La Bouffe</strong> (8015 SE Stark St) This gourmet market is lined with tinned fish, tubs of labne, frozen pierogi, French cookies, and a small but impressive bulk section, with a table of olive oils to sample. </p>
820<figure class="c-media c-media--image c-align--center c-align--left" data-entity-class="image" data-entity-id="96603" data-entity-method="embed" data-image-align="center" data-image-caption="La Bouffe in Montavilla." data-image-selection='{"x1":138,"y1":250,"x2":3750,"y2":5000,"width":3612,"height":4750}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_4750,w_3612,x_138,y_250/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/82nd-ave-supermarkets-la-bouffe_onfia7.jpg">
821<figcaption>
822<div class="c-media__caption">La Bouffe in Montavilla.</div>
823<div class="c-media__attributions">
824<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
825</div>
826</figcaption>
827</figure>
828<p><a href="https://www.instagram.com/boohanmarketpdx/?hl=en" target="_blank" rel="noopener"><strong>BooHan</strong></a> (1313 SE 82nd Ave) Cute and curated, this long-running “Oriental Market,” as its sign announces, boasts an impressive range of miso, garden seeds, and frozen Korean street snacks.</p>
829<p><strong><a href="https://chinafoodsinc.com" target="_blank" rel="noopener">China Foods</a> </strong>(1414 SE 82nd Ave) Largely a restaurant supply, this dimly lit warehouse is stacked with giant rice sacks, paint cans of sesame paste, and five-gallon buckets of soy sauce.</p>
830<p><strong>Chang Fa &amp; Tin Seng </strong>(8310 &amp; 8350 SE Division St) These side-by-side stores on Division just off 82nd sport seafood tanks, prepacked fresh meat, and a behind-the-counter array of Chinese herbs.</p>
831<p><strong>Fubonn</strong> (2850 SE 82nd Ave) This giant supermarket with an impressive kitchenware selection sits at the end of an arcade of dress shops, K-beauty counters, massage chairs, and giant claw machines.</p>
832<p><strong>Good Neighbor Market</strong> (4107 SE 82nd Ave) Find Eastern European chocolates and bags of salami-flavored, Pringles-shaped Ukrainian melba toasts, plus a butter selection to rival any high-end gourmet grocer. </p>
833<figure class="c-media c-media--image c-align--center c-align--right" data-entity-class="image" data-entity-id="96602" data-entity-method="embed" data-image-align="center" data-image-caption="SF Supermarket is in an old Fred Meyer." data-image-selection='{"x1":0,"y1":318,"x2":3264,"y2":4663,"width":3264,"height":4345}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_4345,w_3264,x_0,y_318/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/shun-fat-asian-market-82nd_xuve45.jpg">
834<figcaption>
835<div class="c-media__caption">SF Supermarket is in an old Fred Meyer.</div>
836<div class="c-media__attributions">
837<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
838</div>
839</figcaption>
840</figure>
841<p><a href="https://hongphatsupercenter.com" target="_blank" rel="noopener"><strong>Hồng Phát Supercenter</strong></a> (4200 SE 82nd Ave) This giant grocery attempts to fill the square footage of an old Walmart with a Chaos Shop in back selling electronics, toys, and home decor, plus the widest aisles in town.</p>
842<p><a href="https://shunfatsupermarket.com" target="_blank" rel="noopener"><strong>SF Supermarket</strong></a> (5253 SE 82nd Ave) A huge meat counter and tanks of live shrimp and tilapia line the back wall of an old Fred Meyer. The frozen dessert aisle is a serious destination. </p>
843<p><strong><a href="https://www.instagram.com/villas_market/?hl=en" target="_blank" rel="noopener">Villas Market</a> </strong>(9515 SE 82nd) An old bowling alley houses a market, a hot lunch counter, and a panadería selling telera rolls and mini mantecadas.</p>
844<p><strong><a href="https://eddgroceries.com/happy-valley" target="_blank" rel="noopener">Daily Deals</a>
844 </strong>(9907 SE 82nd Ave) On any given day, the shelves of this closeout store might be full of Greek crackers, grape soda, Romanesco, watermelon, or some very random personal care products. </p>
845</main></section><div class="v2-item ad--native is-spon" data-controller="native-ad"></div>
846<div class="auto-content"></div>
847
848<section class="c-listicle-block" data-ink-block="list-item"><header>
849<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96287" data-entity-method="embed" data-image-align="center" data-image-caption="The Hollywood location off NE 28th Avenue is one of the largest Fred Meyer stores in Oregon." data-image-selection='{"x1":0,"y1":0,"x2":3750,"y2":2500,"width":3750,"height":2500}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2500,w_3750,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/fred-meyer-best-grocery_stores_nxcntq.jpg">
850<figcaption>
851<div class="c-media__caption">The Hollywood location off NE 28th Avenue is one of the largest Fred Meyer stores in Oregon.</div>
852<div class="c-media__attributions">
853<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
854</div>
855</figcaption>
856</figure>
857<h2>
858<a href="https://www.fredmeyer.com" target="_blank" rel="noopener">Fred Meyer</a> </h2>
859</header><main>
860<p>Born Fred Grubmeyer in 1886 and shortening his name amid the anti-German attitudes around World War I (would locals talk about shopping at Grubby’s as eagerly as we do about Freddy’s?), Portland’s undisputed grocery titan got his start with a horse-pulled coffee cart. Meyer expanded to commercial real estate and launched into the grocery world in 1922, with a store downtown at SW Fifth and Yamhill. In the next decade, he opened what’s sometimes called the world’s first self-service drugstore, set up portable canneries to help supply his stores, and established Portland’s first “suburban” shopping center in the Hollywood neighborhood, across the street from the then-new movie house. The “one-stop shop,” with lots of nonfood departments and a rooftop parking lot, became a model not just for other Fred Meyer stores but for supermarkets as we know them today. Eventually expanding to Washington, Idaho, and Alaska, the company was bought by Kroger in 1998 but maintained its local name. Meyer himself died in 1978, at age 92.</p>
861</main></section>
862<section class="c-listicle-block" data-ink-block="list-item"><header>
863<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96285" data-entity-method="embed" data-image-align="center" data-image-caption="Green Zebra’s Lloyd District location catered to office lunchers and convention goers." data-image-selection='{"x1":0,"y1":0,"x2":1500,"y2":1000,"width":1500,"height":1000}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1000,w_1500,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/green-zebra-best-grocery_stores_xpsq4l.jpg">
864<figcaption>
865<div class="c-media__caption">Green Zebra’s Lloyd District location catered to office lunchers and convention goers.</div>
866<div class="c-media__attributions">
867<p>Image: <a href="/producers/tuck-woodstock">Tuck Woodstock</a></p>
868</div>
869</figcaption>
870</figure>
871<h2>Green Zebra</h2>
872</header><main>
873<p>Looking back on the decade run of her microchain of healthy convenience stores, Lisa Sedlar has “nothing but gratitude in my heart.” The team that opened the <a href="/articles/lisa-sedlar-brings-green-zebra-to-market-october-2013" target="_self" data-entity-class="Article" data-entity-id="8271" data-entity-method="link" data-entity-type="content">first Green Zebra</a>, in Kenton, is still a tight friend group. Later stores in the <a href="/slideshows/here-s-your-shopping-list-for-the-new-green-zebra-grocery" target="_self" data-entity-class="Slideshow" data-entity-id="1733" data-entity-method="link" data-entity-type="content">Lloyd District</a> and near Portland State catered to people grabbing something on their lunch hour or between classes. The fourth, complete with a nacho bar, opened on a busy Southeast corner in February 2020. Pandemic shutdowns, remote work, and online classes soon took a toll, while rising costs for labor and just about everything else led to the chain’s closure in 2023. (The Kenton building is now a McDonald’s.) “We were seeking to redefine what it means to be a convenience store in America,” she says today. “Is that concept still relevant? Absolutely.”</p>
874</main></section>
875<section class="c-listicle-block" data-ink-block="list-item"><header>
876<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96286" data-entity-method="embed" data-image-align="center" data-image-caption="H Mart’s SE Belmont location has a smaller footprint than its suburban stores." data-image-selection='{"x1":0,"y1":69,"x2":3431,"y2":2394,"width":3431,"height":2325}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2325,w_3431,x_0,y_69/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/hmart-best-grocery_stores_tvfxwr.jpg">
877<figcaption>
878<div class="c-media__caption">H Mart’s SE Belmont location has a smaller footprint than its suburban stores.</div>
879<div class="c-media__attributions">
880<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
881</div>
882</figcaption>
883</figure>
884<h2><a href="https://www.hmart.com" target="_blank" rel="noopener">H Mart</a></h2>
885</header><main>
885
886<p>Started by a Korean immigrant on a corner in Queens in the 1980s as Han Ah Reum (translated as “an armful”), H Mart started spreading to the West Coast in the 2000s, including a Tigard location that opened in 2008 and dazzled an <em>Oregonian</em> writer with its “wall o’ kimchi.” Center-city dwellers were thrilled when H Mart announced in 2017 it would open another location in the old Zupan’s in the Belmont Dairy. But they were less thrilled with the nearly two-year wait for the store to finally open.</p>
887</main></section><div class="ad-section ad-section--inline" data-controller="display-ad" data-display-ad-dimensions-desktop-value="[[3, 1], [16, 9], [970, 250], [970, 90], [728, 90]]" data-display-ad-dimensions-mobile-value="[[3, 1], [16, 9], [320, 50], [320, 100], [300, 250]]" data-display-ad-dimensions-tablet-value="[[3, 1], [16, 9], [728, 90], [728, 250], [700, 400]]"></div>
888
889<section class="c-listicle-block" data-ink-block="list-item"><header>
890<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96288" data-entity-method="embed" data-image-align="center" data-image-caption="Corno’s had one of the most photographed signs in town." data-image-selection='{"x1":0,"y1":0,"x2":1800,"y2":1129,"width":1800,"height":1129}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1129,w_1800,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/corno_s-italian-markets-best-grocery_stores_oqzxaq.jpg">
891<figcaption>
892<div class="c-media__caption">Corno’s had one of the most photographed signs in town.</div>
893<div class="c-media__attributions">
894<p>Image: <a href="/producers/courtesy-portland-city-archives">Courtesy Portland City Archives</a></p>
895</div>
896</figcaption>
897</figure>
898<h2>Italian Produce Merchants </h2>
899</header><main>
900<p>When the local-food-focused, Eugene-based chain <a href="https://marketofchoice.com" target="_blank" rel="noopener">Market of Choice</a> opened at SE 10th and Belmont in 2017, it was something of a return to form. The site was long the HQ of an Italian farmers and growers co-op, though in recent years it became known (somewhat annoyingly, to local Italians) as the <a href="/articles/the-dirt-on-southeast-portlands-new-goat-blocks-june-2015" target="_self" data-entity-class="Article" data-entity-id="12458" data-entity-method="link" data-entity-type="content">Goat Blocks</a> thanks to a brief residency of some brush-clearing ungulates. Grocers and restaurateurs would come there and to businesses along nearby Produce Row to buy farm-fresh items, often trucked in before dawn. One of Produce Row’s most recognizable businesses, Corno’s (pictured above), closed in the 1990s; one of its longest-running, Sheridan Fruit Market, closed this year.</p>
901</main></section>
902<section class="c-listicle-block" data-ink-block="list-item"><header>
903<h3>Johnson Street Grocery</h3>
904</header><main>
905<p>After a few years of farming in Sherwood, Shuichi and Yae Goto Murakami, originally from Japan, moved to the city in the 1920s and opened a small grocery at the NW 23rd and Johnson. (The corner was later home to a series of taverns and a Music Millennium; it’s now the Fireside.) Their kids worked at the shop, too, running errands and waiting on customers when they weren’t at school or the pool or the baseball diamond. In 1942, when the government sent people of Japanese descent to concentration camps, most of the family landed at Minidoka before being hired out to work at a cannery in Utah, where they stayed after the war. Only one son came back to Portland. </p>
906</main></section>
907<section class="c-listicle-block" data-ink-block="list-item"><header>
908<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96289" data-entity-method="embed" data-image-align="center" data-image-caption="A Kienow’s once sat next to the Hollywood Theatre on NE Sandy. (The 1188 address seen here became 4100 after the Great Renumbering of 1931.)" data-image-selection='{"x1":207,"y1":158,"x2":4805,"y2":3515,"width":4598,"height":3357}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3357,w_4598,x_207,y_158/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/kienow_s-market-best-grocery_stores_xecrwn.jpg">
909<figcaption>
910<div class="c-media__caption">A Kienow’s once sat next to the Hollywood Theatre on NE Sandy. (The 1188 address seen here became 4100 after the Great Renumbering of 1931.)</div>
911<div class="c-media__attributions">
912<p>Image: <a href="/producers/from-the-oregonian-1931-the-oregonian-all-rights-reserved-used-under-license">From The Oregonian. © [1931] The Oregonian. All rights reserved. Used under license.</a></p>
913</div>
914</figcaption>
915</figure>
916<h2>Kienow’s</h2>
917</header><main>
917
918<p>Minnesota-born Daniel Kienow, whose family moved to Portland when he was a kid, was more than a decade ahead of Fred Meyer when he opened his first store in inner Southeast in the early 1900s. Like Fred Meyer, it turned into a booming enterprise for much of the twentieth century before a sale in the 1990s. Unlike Fred Meyer, the new owner leased out most of its stores to other chains, and the last Kienow’s, in King City, closed in 2000. (The Walgreens on N Lombard and the Zupan’s on W Burnside are in old Kienow’s spaces.) Its dozen locations, advertised as “the friendliest stores in town”—sound familiar?—loom large in the memories of older Portlanders, who rhapsodize about treats from the in-house Bohemian Bakery. </p>
919</main></section><div class="v2-item ad--native is-spon" data-controller="native-ad"></div>
920<div class="auto-content"></div>
921
922<section class="c-listicle-block" data-ink-block="list-item"><header>
923<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96290" data-entity-method="embed" data-image-align="center" data-image-caption="Lily Market’s hot food counter hides in the north end of the Gateway-area shop." data-image-selection='{"x1":0,"y1":267,"x2":3750,"y2":2813,"width":3750,"height":2546}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2546,w_3750,x_0,y_267/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/lily-market-best-grocery-stores_rans5i.jpg">
924<figcaption>
925<div class="c-media__caption">Lily Market’s hot food counter hides in the north end of the Gateway-area shop.</div>
926<div class="c-media__attributions">
927<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
928</div>
929</figcaption>
930</figure>
931<h2>
932<a href="https://www.lily-market.com" target="_blank" rel="noopener">Lily Market</a> </h2>
933</header><main>
934<p>“Coconut milk, we sell a ton. Fish sauce, all the staples,” says Saysana Jeung, the youngest of 11 siblings, most of whom have put in time helping out at the family-run Gateway grocery that used to be one of the only places in town to find such things. Now in its fifth decade, Lily leans Thai, with huge bags of pad Thai noodles in the cooler and jars of dried fish snacks on the shelves, plus a popular lunch counter selling house-packed nam prik chile paste, and grab-and-go chicken larb. But it also stocks Ukrainian sodas, Korean frozen desserts, Filipino snack mixes, and Italian ladyfingers, along with an entertainment section that includes audiocassettes and VHS tapes. </p>
935</main></section>
936<section class="c-listicle-block" data-ink-block="list-item"><header>
937<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96291" data-entity-method="embed" data-image-align="center" data-image-caption="MacMarr eventually became part of Safeway." data-image-selection='{"x1":28,"y1":48,"x2":2364,"y2":1563,"width":2336,"height":1515}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1515,w_2336,x_28,y_48/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/macmarr-market-best-grocery-stores_xy28ss.jpg">
938<figcaption>
939<div class="c-media__caption">MacMarr eventually became part of Safeway.</div>
940<div class="c-media__attributions">
941<p>Image: <a href="/producers/courtesy-portland-city-archives">Courtesy Portland City Archives</a></p>
942</div>
943</figcaption>
944</figure>
945<h2>MacMarr </h2>
946</header><main>
947<p>This Spokane-founded chain arrived in Portland via a merger with Twentieth Century, whose owner, Ross McIntyre, <a href="https://www.nytimes.com/1928/12/16/archives/chain-store-heads-predict-good-year-nine-of-them-unanimous-all.html" target="_blank" rel="noopener">told <em>The New York Times</em> in late 1928</a> that the next year was <a href="https://www.fdrlibrary.org/great-depression-facts" target="_blank" rel="noopener">sure to be a great one for national prosperity</a>. MacMarr was eventually absorbed by Charles Merrill and the growing Safeway group but kept its own name for a while due to some beef Marr and McIntyre had with the owner of another chain in the group. Its locations included what’s now Pets on Broadway and (above) Community Warehouse on MLK. </p>
948</main></section>
949<section class="c-listicle-block" data-ink-block="list-item"><header>
950<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96292" data-entity-method="embed" data-image-align="center" data-image-caption="The California-founded 99 Ranch has two Portland-area locations." data-image-selection='{"x1":0,"y1":56,"x2":2500,"y2":3413,"width":2500,"height":3357}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3357,w_2500,x_0,y_56/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/99-ranch-best-grocery-stores_skoaig.jpg">
951<figcaption>
952<div class="c-media__caption">The California-founded 99 Ranch has two Portland-area locations.</div>
953<div class="c-media__attributions">
954<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
955</div>
956</figcaption>
957</figure>
958<h2><a href="https://www.99ranch.com" target="_blank" rel="noopener">99 Ranch</a></h2>
959</header><main>
959
960<p>While it might sound like a westernwear outfitter, 99 Ranch calls itself “your favorite pan-Asian grocery.” Founded four decades ago in California by a Taiwanese immigrant, it opened a Beaverton location in 2017, with a Northeast Portland store following last summer, just east of Mall 205. With well-labeled aisles and bright lights, walking around the store can feel like you’re in a Fred Meyer—except a lot of the vegetables are wrapped in plastic, lychee and durian are given pride of place among the fruits, the doughnut cases are full of moon cakes, more fish heads and whole fish are displayed in the meat cooler, even more claw machines line the entryway, and you’re likely to spot Hello Kitty on the toilet paper.</p>
961</main></section><div class="ad-section ad-section--inline" data-controller="display-ad" data-display-ad-dimensions-desktop-value="[[3, 1], [16, 9], [970, 250], [970, 90], [728, 90]]" data-display-ad-dimensions-mobile-value="[[3, 1], [16, 9], [320, 50], [320, 100], [300, 250]]" data-display-ad-dimensions-tablet-value="[[3, 1], [16, 9], [728, 90], [728, 250], [700, 400]]"></div>
962
963<section class="c-listicle-block" data-ink-block="list-item"><header>
964<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96293" data-entity-method="embed" data-image-align="center" data-image-caption="Oregon Groceteria served busy Vanport during World War II." data-image-selection='{"x1":210,"y1":228,"x2":4600,"y2":3434,"width":4390,"height":3206}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3206,w_4390,x_210,y_228/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/oregon-groceteria-best-grocery-stores_t4tjrt.jpg">
965<figcaption>
966<div class="c-media__caption">Oregon Groceteria served busy Vanport during World War II.</div>
967<div class="c-media__attributions">
968<p>Image: <a href="/producers/by-al-monner-from-the-oregonian-1945-the-oregonian-all-rights-reserved-used-under-license">by al monner, From The Oregonian. © [1945] The Oregonian. All rights reserved. Used under license</a></p>
969</div>
970</figcaption>
971</figure>
972<h2>Oregon Groceteria</h2>
973</header><main>
974<p>Today, most every market is a “groceteria,” where customers grab items themselves, cafeteria style, as opposed to placing an order at the counter. But in the early twentieth century the concept, which requires less staffing and can lead to lower prices, was still novel enough to be noted in a store’s name. Started in 1919, this chain of groceterias run by the Eriksen family had more than a dozen locations around town by the 1940s. Four of them were in Vanport City, the bustling workforce housing insta-town in North Portland that was Oregon’s second-most-populous city for a time, though it was never officially incorporated. When the C
974olumbia River broke through a railroad embankment on May 30, 1948, Oregon Groceteria was the business to suffer the most losses. It sought relief in federal court for the destruction of its business in the Vanport Flood, but it never recovered. </p>
975</main></section>
976<section class="c-listicle-block" data-ink-block="list-item"><header>
977<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96294" data-entity-method="embed" data-image-align="center" data-image-caption="Music Millennium on E Burnside Street was once a Piggly Wiggly." data-image-selection='{"x1":9,"y1":0,"x2":2400,"y2":1640,"width":2391,"height":1640}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1640,w_2391,x_9,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/piggly-wigglyby_al_monner__From_The_Oregonian.____1945__The_Oregonian._All_rights_reserved._Used_under_license_dogjli.jpg">
978<figcaption>
979<div class="c-media__caption">Music Millennium on E Burnside Street was once a Piggly Wiggly.</div>
980<div class="c-media__attributions">
981<p>Image: <a href="/producers/courtesy-portland-city-archives">Courtesy Portland City Archives</a></p>
982</div>
983</figcaption>
984</figure>
985<h2>Piggly Wiggly</h2>
986</header><main>
987<p>The name may be associated with the South and <em>Driving Miss Daisy</em>, but there were Piggly Wigglies here, too. Before a wave of groceterias copied the model, what’s considered the country’s first such self-service store opened in 1916 in Memphis, with a funny name. It was quickly franchised across the US and proved a hit with housewives, according to <em>Time</em> magazine. “Instead of dealing with salespersons, the customer tours the store with a large basket, makes her own selections from neatly-stocked shelves,” the 1929 article explained. Its success came “partly because of its novelty, partly because neat packages and large advertising appropriations have made retail grocery selling almost an automatic procedure.” One group of Oregon Piggly Wigglies was run by Henry Meyer, Fred’s brother; some merged with the Charles Merrill group that became Safeway. Music Millennium (above), RingSide, OK Omens, Nob Hill Pharmacy, and Fang! Pet &amp; Garden Supply were among the many local Piggly Wiggly spaces.</p>
988</main></section>
989<section class="c-listicle-block" data-ink-block="list-item"><header>
990<h2>Quickie Mart</h2>
991</header><main>
992<p>Was the name given to the first 7-Eleven franchises that started popping up around town in the mid-1960s, when <em>Simpsons</em> creator Matt Groening was in grade school in Southwest Portland, an inspiration for Springfield’s Kwik-E Mart? Plenty of locals bought up franchises, with the promise of “handsome new stores” and a chance to “be your own boss.” Running a convenience store wasn’t all fun and blueberry Squishees, though: The location at N Killingsworth and Greeley w
992as once robbed twice in one day.</p>
993</main></section><div class="v2-item ad--native is-spon" data-controller="native-ad"></div>
994<div class="auto-content"></div>
995
996<section class="c-listicle-block" data-ink-block="list-item"><header>
997<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96279" data-entity-method="embed" data-image-align="center" data-image-caption="Rubinette’s rainbow produce displays look as good as they taste." data-image-selection='{"x1":0,"y1":0,"x2":5000,"y2":3750,"width":5000,"height":3750}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3750,w_5000,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/rubinette-grocery-stores_u7zzv9.jpg">
998<figcaption>
999<div class="c-media__caption">Rubinette’s rainbow produce displays look as good as they taste.</div>
1000<div class="c-media__attributions">
1001<p>Image: <a href="/producers/jason-hill">Jason Hill</a></p>
1002</div>
1003</figcaption>
1004</figure>
1005<h2><a href="https://www.rubinetteproduce.com" target="_blank" rel="noopener">Rubinette</a></h2>
1006</header><main>
1007<p>Located in <a href="https://providorefinefoods.com" target="_blank" rel="noopener">Providore Fine Foods</a>, alongside Revel Meat Co. and fishmonger Two X Sea, produce market Rubinette is not a place you go to see if it has what’s on your list. You go just to see what it has, to let its rainbow wash over you. At one point in July, Rubinette had about 16 different berry varieties: raspberries, strawberries, blackberries, gooseberries, currants, blueberries…. “People would walk by, and you could see their eyes popping out of their heads, like, ‘Wow, I’ve never seen this kind of array before,’” says Josh Alsberg, who started Rubinette in 2016. He says he sources directly from more small farms than any other produce market in the region “to get the highest-quality produce at the peak of ripeness.” He aims to balance what’s available with what the shop can move, he notes, “making sure we’re paying a fair price to the farms so they can stay solvent.” </p>
1008</main></section>
1009<section class="c-listicle-block" data-ink-block="list-item"><header>
1010<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96295" data-entity-method="embed" data-image-align="center" data-image-caption="Home decor mixes with the produce section at Supermercado." data-image-selection='{"x1":0,"y1":272,"x2":2500,"y2":3178,"width":2500,"height":2906}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2906,w_2500,x_0,y_272/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/supermercado-market-best-grocery-stores_tflyxf.jpg">
1011<figcaption>
1012<div class="c-media__caption">Home decor mixes with the produce section at Supermercado.</div>
1013<div class="c-media__attributions">
1014<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
1015</div>
1016</figcaption>
1017</figure>
1018<h2><a href="https://www.supermercadoinc.com" target="_blank" rel="noopener">Supermercado</a></h2>
1019</header><main>
1020<p>With stocked drink coolers, bags of Mexican mesquite charcoal lined up in front of the extensive meat cases, piñatas hanging from the ceiling, and frosted cakes ready to be written on Supermercado can outfit any party or backyard cookout. Or you can just swing by and eat there, with its hot food counter, taqueria, bakery cases full of pan fino, conchas, and bolillo rolls, and frutas stand slinging mango chamoyadas. </p>
1021</main></section>
1022<section class="c-listicle-block" data-ink-block="list-item"><header>
1023<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96296" data-entity-method="embed" data-image-align="center" data-image-caption="Tamales, tacos, and toys are often on offer outside of La Tapatia, which has locations in Rockwood, downtown Gresham, and Salem." data-image-selection='{"x1":0,"y1":288,"x2":3750,"y2":3738,"width":3750,"height":3450}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3450,w_3750,x_0,y_288/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/la-tapatia-best-grocery-stores_e9ycwy.jpg">
1024<figcaption>
1025<div class="c-media__caption">
1025Tamales, tacos, and toys are often on offer outside of La Tapatia, which has locations in Rockwood, downtown Gresham, and Salem.</div>
1026<div class="c-media__attributions">
1027<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
1028</div>
1029</figcaption>
1030</figure>
1031<h2><a href="https://www.latapatiasupermarket.com" target="_blank" rel="noopener">La Tapatia</a></h2>
1032</header><main>
1033<p>A sign in the parking lot of this Rockwood institution announces that no auto sales are permitted in the parking lot, but a shopper might be able to pick up some tamales, tacos, or elote between their car and the main door. In addition to grocery aisles, inside there are cremería and tortillería stations, a Crayola-colored seating area next to smoothie and hot food counters, outdoor cooking supplies, and statues of parrots, pigs, pugs, and more. </p>
1034</main></section><div class="ad-section ad-section--inline" data-controller="display-ad" data-display-ad-dimensions-desktop-value="[[3, 1], [16, 9], [970, 250], [970, 90], [728, 90]]" data-display-ad-dimensions-mobile-value="[[3, 1], [16, 9], [320, 50], [320, 100], [300, 250]]" data-display-ad-dimensions-tablet-value="[[3, 1], [16, 9], [728, 90], [728, 250], [700, 400]]"></div>
1035
1036<section class="c-listicle-block" data-ink-block="list-item"><header>
1037<h2><a href="https://www.uwajimaya.com" target="_blank" rel="noopener">Uwajimaya</a></h2>
1038</header><main>
1039<p>Started out of the back of a truck in Tacoma by Fujimatsu and Sadako Moriguchi, Uwajimaya reopened in Seattle after the family was released from World War II–era incarceration camp Tule Lake. In 1998, the still-family-owned Japanese supermarket expanded to Beaverton, its first location outside the Seattle metro area. While it was a taste of home for the west side’s fast-growing Asian communities, the 30,000-square-foot market and attached bookstore felt like a grand adventure to many Portlanders who weren’t from Asian households. Even something as simple as rice or soy sauce was offered in more versions than a lot of early customers knew existed, while the preserved foods and snack aisles, meat variety, fish selection, produce, and cooking implements for sale prompted many home cooks to try something totally new to them. </p>
1040</main></section>
1041<section class="c-listicle-block" data-ink-block="list-item"><header>
1042<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96298" data-entity-method="embed" data-image-align="center" data-image-caption="Food Fight! shares its building on NE Halsey with vegan café Jet Black Coffee Company." data-image-selection='{"x1":0,"y1":103,"x2":2500,"y2":3384,"width":2500,"height":3281}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_3281,w_2500,x_0,y_103/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/food-fight-best-grocery-stores_ahv9ov.jpg">
1043<figcaption>
1044<div class="c-media__caption">Food Fight! shares its building on NE Halsey with vegan café Jet Black Coffee Company.</div>
1045<div class="c-media__attributions">
1046<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
1047</div>
1048</figcaption>
1049</figure>
1050<h2>Vegan HQ</h2>
1051</header><main>
1052<p>Portland was already an easier place than most of the US to be vegan, but things got a lot more fun with the opening in 2003 of snack-forward <a href="https://foodfightgrocery.com" target="_blank" rel="noopener">Food Fight!</a>, its exclamation point a fitting indicator of the vegan convenience store’s general vibe. While it no longer anchors a vegan mini mall at SE Stark and 12th (though the vegan <a href="https://sweetpeabaking.com" target="_blank" rel="noopener">Sweetpea Baking</a> is still there), Food Fight!'s Gateway location helps keep Portland’s vegan cred high.</p>
1053</main></section>
1054<section class="c-listicle-block" data-ink-block="list-item"><header>
1055<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96299" data-entity-method="embed" data-image-align="center" data-image-caption="Bryan T. Vance’s Stumptown Savings often directs Portlanders to WinCo’s weekly deals." data-image-selection='{"x1":0,"y1":853,"x2":2500,"y2":3750,"width":2500,"height":2897}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2897,w_2500,x_0,y_853/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/winco-market-best-grocery-stores_nkub8c.jpg">
1056<figcaption>
1057<div class="c-media__caption">Bryan T. Vance’s Stumptown Savings often directs Portlanders to WinCo’s weekly deals.</div>
1058<div class="c-media__attributions">
1059<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
1060</div>
1061</figcaption>
1062</figure>
1063<h2>
1064<a href="https://www.wincofoods.com" target="_blank" rel="noopener">WinCo</a>
1064 </h2>
1065</header><main>
1066<p>“WinCo is weird. But it’s cool!” says Bryan M. Vance of Stumptown Savings. Vance’s weekly roundup of Portland-area grocery deals has sent a lot of locals on their first trip to the Idaho-founded, employee-owned chain, short for Winning Company. That weirdness includes not accepting credit cards at checkout, not really advertising, and not exactly staffing stores for the optimum customer experience (we’ve waited in some long lines). The cool parts? That all helps keep prices down, and most are open 24 hours. Vance says the bulk section is “the best place to get spices, but also grains, pastas, cereals…and their baked goods are really frickin’ good.” </p>
1067</main></section><div class="v2-item ad--native is-spon" data-controller="native-ad"></div>
1068<div class="auto-content"></div>
1069
1070<section class="c-listicle-block" data-ink-block="list-item"><header>
1071<h2>X-Cel Food Store</h2>
1072</header><main>
1073<p>Not to be confused with X-L, a longtime doughnut factory on SE 82nd, X-Cel was one of several businesses over the years in a space on N Minnesota Avenue before the construction of Interstate 5 (this stretch was at one point known as the Minnesota Freeway) led to the demolition of hundreds of homes and businesses and the displacement of thousands of Albina residents. </p>
1074</main></section>
1075<section class="c-listicle-block" data-ink-block="list-item"><header>
1076<h2>Young’s Cash Grocery</h2>
1077</header><main>
1078<p>While claiming a business is “cashless” is considered the peak of modernity in the 2020s, a century ago the word “cash” in a store name meant it was keeping up with the times, taking payment at the time of purchase. The old way—noting charges in a grocer’s ledger and having customers pay at the end of the month or whenever they were able—might have been handy for someone waiting for a paycheck or a parent sending a kid to fetch groceries to charge to the family account. But it wasn’t a sustainable business model as grocery stores grew larger and more competitive. SE Division’s Young’s Cash Grocery eventually dropped “Cash” from its name, but in the 1930s it was worth warning Depression-era customers they couldn’t just put items on their tab and settle up later.</p>
1079</main></section>
1080<section class="c-listicle-block" data-ink-block="list-item"><header>
1081<figure class="c-media c-media--image c-align--center" data-entity-class="image" data-entity-id="96300" data-entity-method="embed" data-image-align="center" data-image-caption="Zupan’s pretty presentations even extend to its fish case." data-image-selection='{"x1":113,"y1":44,"x2":3725,"y2":2438,"width":3612,"height":2394}'><img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2394,w_3612,x_113,y_44/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_1080/zupans-best-grocery-stores_v0mahn.jpg">
1082<figcaption>
1083<div class="c-media__caption">Zupan’s pretty presentations even extend to its fish case.</div>
1084<div class="c-media__attributions">
1085<p>Image: <a href="/producers/michael-novak">Michael Novak</a></p>
1086</div>
1087</figcaption>
1088</figure>
1089<h2><a href="https://www.zupans.com" target="_blank" rel="noopener">Zupan’s</a></h2>
1090</header><main>
1091<p>With local Durant olive oil, Papa Haydn lemon curd tarts and carrot cake granola, Bui salad rolls, boxed sets of Sebastiano’s marmalade, bottles of Nong’s Khao Man Gai sauce, and collaboration beers with the likes of Little Beast and Ferment, Zupan’s can feel like a food version of a Made in Oregon gift shop. It can also feel like a reminder that there are people in this city making a whole lot more money and who might just pop in for $9.99 tubs of the store’s preserved-lemon hummus (which is delicious), $100 tubes of Iberico ham, and bottles of Veuve Clicquot. John Zupan worked at Sheridan and as a produce manager at Fred Meyer before cofounding the store in 1975 (son Mike Zupan is at the helm today), so it’s no surprise that extra attention is paid to the produce department, where a good pairing gouda or jar of almond butter might be sitting in the same case as honeycrisp apples, all ready to grab for a picnic. </p>
1092</main></section></div>
1093<div class='c-after'>
1094<div class='attributes'>
1095<div class='attribute'>
1096<div class='attribute__header'>Filed under</div>
1097<div class='attribute__body'><a href="/tags/grocery-stores">Grocery Stores</a>, <a href="/tags/shopping">Shopping</a>, <a href="/tags/shop-local">Shop Local</a>, <a href="/tags/portland-business">Portland Business</a>, <a href="/tags/history">History</a></div>
1098</div>
1099<div class='attribute'>
1100<div class='attribute__header'>Share</div>
1101<div class='attribute__body'><div class='share-buttons'>
1102<button class='share-button' data-controller='share-button' data-sharer='facebook'>
1103<span class='visually-hidden'>Share on Facebook</span>
1104<svg aria-hidden='true' class='icon icon-facebook'>
1105<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#facebook'></use>
1106</svg>
1107
1108</button>
1109<button class='share-button' data-controller='share-button' data-sharer='twitter'>
1110<span class='visually-hidden'>Share on Twitter</span>
1111<svg aria-hidden='true' class='icon icon-twitter'>
1112<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#twitter'></use>
1113</svg>
1114
1115</button>
1116<button class='share-button' data-controller='share-button' data-sharer='linkedin'>
1117<span class='visually-hidden'>Share on LinkedIn</span>
1118<svg aria-hidden='true' class='icon icon-linkedin'>
1119<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#linkedin'></use>
1120</svg>
1121
1122</button>
1123<button class='share-button' data-controller='share-button' data-sharer='pinterest'>
1124<span class='visually-hidden'>Share on Pinterest</span>
1125<svg aria-hidden='true' class='icon icon-pinterest'>
1126<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#pinterest'></use>
1127</svg>
1128
1129</button>
1130<button class='share-button' data-controller='share-button' data-sharer='email'>
1131<span class='visually-hidden'>Share via Email</span>
1132<svg aria-hidden='true' class='icon icon-mail'>
1133<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#mail'></use>
1134</svg>
1135
1136</button>
1137<button class='share-button' data-controller='share-button' data-sharer='reddit'>
1138<span class='visually-hidden'>Share on Reddit</span>
1139<svg aria-hidden='true' class='icon icon-reddit'>
1140<use xlink:href='/assets/icon-sprite-b93936962cffdfc64f8ad8e7b22b7c5aafd15b91b179c51b1b248fd2f01a00e0.svg#reddit'></use>
1141</svg>
1142
1143</button>
1144</div>
1145</div>
1146</div>
1147<div class='attribute attribute--stacked'>
1148<div class='attribute__header show-comments'>Show Comments</div>
1149<div id='disqus_thread'></div>
1150</div>
1151</div>
1152
1153
1154</div>
1155</section>
1156<div class='end-of-article'>
1157<div class='container' style='margin-top: 1.5rem'>
1158<div id='layout-section--1'>
1159<div class='widget widget--content-row' data-click-source-type='content' data-click-source='widget' data-widget-type='content_related_row' id='widget-614'>
1160<div class='widget__header'>
1161<h1 class='widget__title'>Related Content</h1>
1162</div>
1163<div class='widget__body'>
1164<div class='item-row'>
1165<div class='item'>
1166<a href="/eat-and-drink/2019/06/iconic-northwest-grocer-city-market-to-close-august-18"><div class='item__thumb'>
1167<div class='thumbnail aspect_ratio_rectangle' data-controller='image'>
1168<img data-image-target="image" data-src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2675,w_4013,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/IMG_4708_gnnyxl.jpg" class="cld-responsive" />
1169<noscript>
1170<img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_2675,w_4013,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/IMG_4708_gnnyxl.jpg" />
1171</noscript>
1172</div>
1173
1174</div>
1175</a><div class='item__content'>
1176<p class='item__kicker'>Breaking News</p>
1177<h1 class='item__title'><a href="/eat-and-drink/2019/06/iconic-northwest-grocer-city-market-to-close-august-18">Iconic Northwest Grocer City Market to Close August 18 </a></h1>
1178<p class='item__meta'>
1179<span class='inline-list__item'>
117906/18/2019</span>
1180<span class='inline-list__item'>
1181By
1182<a href="/producers/karen-brooks">Karen Brooks</a>
1183</span>
1184
1185</p>
1186</div>
1187</div>
1188
1189<div class='item'>
1190<a href="/news-and-city-life/2025/04/old-town-history-nihonmachi-portland"><div class='item__thumb'>
1191<div class='thumbnail aspect_ratio_rectangle' data-controller='image'>
1192<img data-image-target="image" data-src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1645,w_2466,x_0,y_398/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/old-town-chinatown-hung-far-low_latbiw.jpg" class="cld-responsive" />
1193<noscript>
1194<img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1645,w_2466,x_0,y_398/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/old-town-chinatown-hung-far-low_latbiw.jpg" />
1195</noscript>
1196</div>
1197
1198</div>
1199</a><div class='item__content'>
1200<p class='item__kicker'>History</p>
1201<h1 class='item__title'><a href="/news-and-city-life/2025/04/old-town-history-nihonmachi-portland">To Know Old Town's Past Is to Hope for Its Future</a></h1>
1202<p class='item__meta'>
1203<span class='inline-list__item'>04/07/2025</span>
1204<span class='inline-list__item'>
1205By
1206<a href="/producers/lauren-yoshiko-afe5762a-ec08-40a1-a0b3-e2e66367b7ef">Lauren Yoshiko</a>
1207</span>
1208
1209</p>
1210</div>
1211</div>
1212
1213<div class='item'>
1214<a href="/style-and-shopping/2013/10/lisa-sedlar-brings-green-zebra-to-market-october-2013"><div class='item__thumb'>
1215<div class='thumbnail aspect_ratio_rectangle' data-controller='image'>
1216<img data-image-target="image" data-src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_533,w_800,x_0,y_74/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/1013-green-zebra-lisa_scuhal.gif" class="cld-responsive" />
1217<noscript>
1218<img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_533,w_800,x_0,y_74/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/1013-green-zebra-lisa_scuhal.gif" />
1219</noscript>
1220</div>
1221
1222</div>
1223</a><div class='item__content'>
1224<p class='item__kicker'>BUSINESS</p>
1225<h1 class='item__title'><a href="/style-and-shopping/2013/10/lisa-sedlar-brings-green-zebra-to-market-october-2013">Lisa Sedlar Brings Green Zebra to Market</a></h1>
1226<p class='item__meta'>
1227<span class='inline-list__item'>10/01/2013</span>
1228<span class='inline-list__item'>
1229By
1230<a href="/producers/will-lambeth">Will Lambeth</a>
1231</span>
1232
1233</p>
1234</div>
1235</div>
1236
1237<div class='item'>
1238<a href="/health-and-wellness/2016/04/here-s-your-shopping-list-for-the-new-green-zebra-grocery"><div class='item__thumb'>
1239<div class='thumbnail aspect_ratio_rectangle' data-controller='image'>
1240<img data-image-target="image" data-src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1000,w_1500,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/greenzebra-2_c2eoah.jpg" class="cld-responsive" />
1241<noscript>
1242<img src="https://res.cloudinary.com/sagacity/image/upload/c_crop,h_1000,w_1500,x_0,y_0/c_limit,dpr_auto,f_auto,fl_lossy,q_80,w_auto/greenzebra-2_c2eoah.jpg" />
1243</noscript>
1244</div>
1245
1246</div>
1247</a><div class='item__content'>
1248<p class='item__kicker'>GOOD EATS</p>
1249<h1 class='item__title'><a href="/health-and-wellness/2016/04/here-s-your-shopping-list-for-the-new-green-zebra-grocery">Here’s Your Shopping List for the New Green Zebra Grocery </a></h1>
1250<p class='item__meta'>
1251<span class='inline-list__item'>04/20/2016</span>
1252<span class='inline-list__item'>
1253By
1254<a href="/producers/tuck-woodstock">Tuck Woodstock</a>
1255</span>
1256
1257</p>
1258</div>
1259</div>
1260
1261
1262</div>
1263</div>
1264
1265</div>
1266<div class='widget widget--ad' data-click-source-type='ad' data-click-source='widget' data-widget-type='ad' id='widget-483'>
1267<div class='ad-section' data-controller='display-ad' data-display-ad-dimensions-desktop-value='[[970, 250], [970, 90]]' data-display-ad-dimensions-mobile-value='[[300, 250]]' data-display-ad-dimensions-tablet-value='[[728, 90]]'></div>
1268</div>
1269
1270</div>
1271</div>
1272</div>
1273
1274</article>
1275
1276
1277</main>
1278<div class='site-footer g-footer'>
1279<div class='l-section'>
1280<div class='l-container'>
1281<div class='g-footer__section'>
1282<div class='level'>
1283<div class='level-left'>
1284<div class='level-item g-footer__logo'><!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="381px" height="80px" viewBox="0 0 381 80" enable-background="new 0 0 381 80" xml:space="preserve">
1285<path id="primary" fill-rule="evenodd" clip-rule="evenodd" d="M181.4,78.6h28.8v-8.9c-4.9,0-7.1-1.5-7.1-5.7V0.9l-24,4.7v7.4  c4.4,0,9.3,1,9.3,5.9v45.4c0,5.1-2.5,5.6-
12855.2,5.6L181.4,78.6z M167.4,8v18.5H180v10.2h-12.6v23.9c0,7.6,2,9.5,8.2,9.5  c1.5,0,3.1-0.2,5.3-0.4l-1.8,8.8c-3,0.6-7.1,0.8-9.5,0.8c-11.1,0-16.7-3.1-16.7-15.2V36.8h-7.5l2.1-10.2h5.3V11.2L167.4,8z   M257.1,65.8V43.5c0-12.8-6.7-18.4-22.3-18.4c-7.5,0-13.9,1.1-19.5,2.9v13.6h8.6c0.6-4.9,3.3-5.9,9.1-5.9c7.2,0,9.4,3.2,9.4,7.8v1.1  c-19.9,0.4-30.7,7.7-30.7,20.5c0,8.9,5.9,14.4,15.5,14.4c7.1,0,13.1-3.2,16.2-8.6l-0.2,7.6h18.6l1.8-8.9  C259.5,69.8,257.1,68.9,257.1,65.8L257.1,65.8z M242.5,56.5c0,5.9-3.8,12.3-11.2,12.3c-3.6,0-5.9-1.9-5.9-5.1  c0-5.6,5.7-9.6,17.1-9.6V56.5z M293.6,78.6h-29.7l1.8-8.9c3,0,6.2-1.2,6.2-5.4V40.1c0-4.2-2.7-5.2-7.7-5.2v-8.8l21.3-0.3l-0.2,7.9  c3.4-4.9,9.7-8.6,17.3-8.6c10.6,0,16,6.1,16,16.9v22c0,4.6,2.8,5.7,6.8,5.7v8.9H304V44.3c0-4.3-1.7-7.4-6.3-7.4  c-6.2,0-11.1,6-11.1,13.4v13.9c0,4.6,4.2,5.6,7.1,5.6V78.6z M30.1,51.9c17.7,0,30-10.4,30-25.9C60,11,49.9,2.5,31.4,2.5  C23.5,2.5,20,2.9,0,2.9V12l10.5,1.5v50.2c0,3.8-2.6,5-6.1,5H2.3v10h35v-10h-3.7c-4,0-6.6-1.5-6.6-5.1V51.7  C28.4,51.9,28.9,51.9,30.1,51.9L30.1,51.9z M26.9,13.8h3.7C38.9,13.8,44,18,44,26.4c0,11.7-8.6,15.7-17.1,15V13.8z M144.7,26.5  l-2.1,10.4c-9.8-0.6-15.5,6.7-15.5,15.6v11.5c0,4.9,2.8,5.9,7.6,5.9v8.9h-28v-8.9c4.5,0,6.5-1.9,6.5-5.8V39.5c0-4-3.7-4.8-7.5-4.8  v-8.6l21-0.3l-0.3,8.8C129.8,27.5,135.5,25,144.7,26.5L144.7,26.5z M374.4,64.7V0l-23.3,4.5v7.2c4.4,0,8.7,1.3,8.7,5.8v8.4  c-1.9-0.3-3.8-0.5-5.9-0.5c-16.4,0-28.7,10.4-28.7,29.6c0,17.1,8.3,24.6,20.2,24.6c6.5,0,12.3-3,15.4-8.3l-0.2,7.4H381v-8.9  C377.1,69.8,374.4,69.3,374.4,64.7L374.4,64.7z M349.4,68c-5.1,0-9.4-4.3-9.4-13.3c0-12.1,5.9-17.1,14.2-17.1c1.8,0,3.7,0.2,5.6,0.6  v17.1C359.8,62.2,355.3,68,349.4,68L349.4,68z M107.5,52.3c0,16.1-10.4,27.3-25.2,27.3C67.9,79.6,57,68.4,57,52.3  c0-15.9,10.9-27.2,25.2-27.2C97.7,25.1,107.5,36.4,107.5,52.3L107.5,52.3z M92.5,52.4c0-10-4.4-15.8-10.3-15.8  c-5.9,0-10.4,5.9-10.4,15.8c0,10.1,4.5,15.9,10.4,15.9C88.1,68.4,92.5,62.5,92.5,52.4L92.5,52.4z M279.3,6h-2.8V3.7h8.6V6h-2.9v7.8  h-2.9V6z M215.1,13.8h2.6V7.6l2.5,6.2h1l2.5-6.2v6.2h2.9V3.7h-3.7l-1.9,5.3l-1.9-5.3h-3.7V13.8z M241.8,3.6c-3,0-5.3,2-5.3,5.1v0.1  c0,3,2,5.1,5.2,5.1c3.3,0,5.5-2.1,5.5-5.2V8.7C247.1,5.6,244.9,3.6,241.8,3.6L241.8,3.6z M244.1,8.9c0,1.7-1,2.9-2.4,2.9  c-1.4,0-2.4-1.1-2.4-2.9V8.8c0-1.8,1-2.9,2.4-2.9c1.4,0,2.4,1.1,2.4,2.9V8.9z M257.1,13.8h2.6V7.5l3.6,6.3h2.8V3.7h-2.5v5.7  l-3.3-5.7h-3.2V13.8z M316.2,3.7h2.9v7.8h4v2.2h-6.8V3.7z M334.2,13.8h3V9.5l3.1-5.8h-2.8l-1.7,3.4l-1.7-3.4H331l3.2,5.8V13.8z   M295.5,3.7h3v3.8h3.2V3.7h2.9v10.1h-2.9v-4h-3.2v4h-3V3.7z"></path>
1286</svg>
1287</div>
1288<div class='level-item g-footer__contact'>
1289329 NE Couch Street, Suite 200<br>Portland, OR 97232
1290<br>
1291Phone: 248-691-1800
1292</div>
1293</div>
1294<div class='level-right'>
1295<div class='level-item'>
1296<ul class='g-footer__social'>
1297<li>
1298<a title="Facebook" href="https://www.facebook.com/portlandmonthly"><svg xmlns="http://www.w3.org/2000/svg" id="Logo" width="32px" height="32px" viewBox="0 0 32 32">
1299  <defs>
1300    <style>
1301      .cls-1 {
1302        fill: none;
1303      }
1304
1305      .cls-1, .cls-2 {
1306        stroke-width: 0px;
1307      }
1308
1309      .cls-2 {
1310        fill: currentColor;
1311      }
1312    </style>
1313  </defs>
1314  <g id="Logo-2" data-name="Logo">
1315    <path id="Initiator" class="cls-2" d="m32,16C32,7.16,24.84,0,16,0S0,7.16,0,16c0,7.5,5.17,13.8,12.13,15.53v-10.64h-3.3v-4.89h3.3v-2.11c0-5.45,2.46-7.97,7.81-7.97,1.01,0,2.76.2,3.48.4v4.43c-.38-.04-1.03-.06-1.85-.06-2.62,0-3.64.99-3.64,3.58v1.73h5.23l-.9,4.89h-4.33v10.99c7.92-.96,14.06-7.7,14.06-15.88Z"></path>
1316    <path id="F" class="cls-1" d="m22.27,20.89l.9-4.89h-5.23v-1.73c0-2.58,1.01-3.58,3.64-3.58.81,0,1.47.02,1.85.06v-4.43c-.72-.2-2.46-.4-3.48-.4-5.35,0-7.81,2.52-7.81,7.97v2.11h-3.3v4.89h3.3v10.64c1.24.31,2.53.47,3.87.47.66,0,1.3-.04,1.94-.12v-10.99h4.33Z"></path>
1317  </g>
1318</svg>
1319
1320</a></li>
1321<li>
1322<a title="Instagram" href="https://instagram.com/pomomagazine"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
1323<g id="surface1">
1324<path style="stroke:none;fill-rule:nonzero;fill:currentColor;fill-opacity:1;" d="M 9.375 0.113281 C 7.671875 0.191406 6.507812 0.464844 5.492188 0.863281 C 4.441406 1.273438 3.546875 1.824219 2.660156 2.714844 C 1.773438 3.605469 1.226562 4.496094 0.820312 5.550781 C 0.425781 6.566406 0.160156 7.730469 0.0859375 9.433594 C 0.0117188 11.136719 -0.0078125 11.6875 0 16.03125 C 0.0117188 20.375 0.03125 20.921875 0.113281 22.628906 C 0.191406 24.328125 0.464844 25.492188 0.863281 26.507812 C 1.273438 27.558594 1.824219 28.453125 2.714844 29.339844 C 3.605469 30.226562 4.496094 30.769531 5.550781 31.179688 C 6.570312 31.570312 7.734375 31.839844 9.4375 31.914062 C 11.140625 31.988281 11.6875 32.007812 16.03125 32 C 20.375 31.988281 20.921875 31.9687
13245 22.628906 31.890625 C 24.335938 31.808594 25.492188 31.535156 26.507812 31.136719 C 27.558594 30.726562 28.453125 30.179688 29.339844 29.289062 C 30.226562 28.398438 30.769531 27.503906 31.179688 26.449219 C 31.570312 25.433594 31.839844 24.269531 31.914062 22.566406 C 31.988281 20.859375 32.007812 20.3125 31.996094 15.96875 C 31.988281 11.625 31.96875 11.082031 31.890625 9.375 C 31.808594 7.667969 31.535156 6.507812 31.136719 5.492188 C 30.726562 4.441406 30.179688 3.550781 29.289062 2.660156 C 28.398438 1.773438 27.503906 1.226562 26.449219 0.820312 C 25.433594 0.429688 24.269531 0.160156 22.566406 0.0859375 C 20.863281 0.0117188 20.316406 -0.0078125 15.96875 0 C 11.625 0.0117188 11.078125 0.0273438 9.375 0.113281 M 9.558594 29.035156 C 8 28.96875 7.152344 28.710938 6.589844 28.492188 C 5.839844 28.203125 5.308594 27.855469 4.746094 27.300781 C 4.183594 26.742188 3.839844 26.207031 3.546875 25.460938 C 3.328125 24.898438 3.0625 24.050781 2.988281 22.492188 C 2.910156 20.804688 2.894531 20.296875 2.886719 16.027344 C 2.875 11.753906 2.890625 11.25 2.964844 9.5625 C 3.03125 8.003906 3.292969 7.15625 3.507812 6.59375 C 3.796875 5.84375 4.144531 5.3125 4.703125 4.75 C 5.261719 4.1875 5.792969 3.839844 6.539062 3.550781 C 7.105469 3.328125 7.949219 3.066406 9.511719 2.992188 C 11.199219 2.914062 11.703125 2.898438 15.972656 2.886719 C 20.246094 2.878906 20.753906 2.894531 22.441406 2.96875 C 24 3.035156 24.847656 3.296875 25.410156 3.511719 C 26.160156 3.800781 26.691406 4.148438 27.253906 4.707031 C 27.816406 5.265625 28.160156 5.796875 28.453125 6.542969 C 28.675781 7.105469 28.9375 7.953125 29.007812 9.511719 C 29.089844 11.199219 29.109375 11.707031 29.117188 15.976562 C 29.125 20.246094 29.109375 20.753906 29.035156 22.441406 C 28.964844 24 28.707031 24.847656 28.492188 25.414062 C 28.203125 26.160156 27.855469 26.695312 27.296875 27.253906 C 26.738281 27.816406 26.207031 28.164062 25.457031 28.457031 C 24.894531 28.675781 24.046875 28.9375 22.492188 29.011719 C 20.804688 29.089844 20.296875 29.109375 16.023438 29.117188 C 11.753906 29.125 11.246094 29.109375 9.5625 29.035156 M 22.605469 7.449219 C 22.605469 8.507812 23.464844 9.367188 24.527344 9.367188 C 25.585938 9.363281 26.445312 8.503906 26.445312 7.441406 C 26.441406 6.382812 25.582031 5.523438 24.519531 5.527344 C 23.460938 5.527344 22.601562 6.386719 22.605469 7.449219 M 7.785156 16.015625 C 7.792969 20.554688 11.480469 24.222656 16.015625 24.214844 C 20.550781 24.207031 24.226562 20.523438 24.214844 15.984375 C 24.207031 11.445312 20.519531 7.773438 15.984375 7.785156 C 11.445312 7.792969 7.777344 11.480469 7.785156 16.015625 M 10.667969 16.011719 C 10.660156 13.066406 13.042969 10.671875 15.988281 10.667969 C 18.933594 10.660156 21.328125 13.042969 21.332031 15.988281 C 21.339844 18.933594 18.957031 21.328125 16.011719 21.332031 C 13.066406 21.339844 10.671875 18.957031 10.667969 16.011719 "></path>
1325</g>
1326</svg>
1327
1328</a></li>
1329<li>
1330<a title="X" href="https://twitter.com/PoMoMagazine"><svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" width="32" height="32" viewBox="0 0 32 32">
1331  <g id="surface1">
1332    <path style="stroke:none;fill:currentColor;fill-opacity:1;" d="m18.67,13.85L29.09,1.99h-2.47l-9.05,10.29L10.33,1.99H1.99l10.94,15.57L1.99,29.99h2.47l9.56-10.87,7.64,10.87h8.34l-11.34-16.14Zm-3.39,3.85l-1.11-1.55L5.35,3.81h3.8l7.11,9.95,1.11,1.55,9.25,12.94h-3.8l-7.55-10.56Z"></path>
1333  </g>
1334</svg>
1335
1336</a></li>
1337<li>
1338<a title="Pinterest" href="https://www.pinterest.com/portlandmonthly"><svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" width="32px" height="32px" viewBox="0 0 32 32">
1339  <path style="fill:currentColor;stroke-width:0;fill-opacity:1" d="m15.99,0C7.15,0,0,7.16,0,15.99c0,6.78,4.21,12.57,10.16,14.9-.14-1.26-.26-3.21.05-4.59.29-1.25,1.87-7.95,1.87-7.95,0,0-.47-.96-.47-2.37,0-2.22,1.29-3.88,2.9-3.88,1.37,0,2.03,1.03,2.03,2.25,0,1.37-.87,3.42-1.33,5.33-.38,1.59.8,2.9,2.37,2.9,2.84,0,5.03-3,5.03-7.32,0-3.83-2.75-6.5-6.69-6.5-4.55,0-7.23,3.41-7.23,6.94,0,1.37.53,2.84,1.18,3.65.13.16.14.3.11.46-.12.5-.39,1.59-.45,1.82-.07.29-.24.36-.54.21-1.97-.95-3.21-3.87-3.21-6.21,0-5.04,3.66-9.68,10.57-9.68,5.54,0,9.86,3.95,9.86,9.24s-3.48,9.95-8.29,9.95c-1.62,0-3.15-.84-3.66-1.84,0,0-.8,3.05-1,3.8-.36,1.4-1.33,3.13-1.99,4.2,1.5.46,3.08.71,4.74.71,8.83,0,15.99-7.16,15.99-15.99-.01-8.85-7.17-16.01-16.01-16.01Z"></path>
1340</svg>
1341
1342</a></li>
1343<li>
1344<a title="LinkedIn" href="https://www.linkedin.com/company/portland-monthly"><svg xmlns="http://www.w3.org/2000/svg" id="svg3070" width="32px" height="32px" viewBox="0 0 32 32">
1345  <path style="fill:currentColor;stroke-width:0;fill-opacity:1" d="m29.64,0H2.36C1.06,0,0,1.03,0,2.29v27.42c0,1.27,1.06,2.29,2.36,2.29h27.27c1.31,0,2.36-1.03,2.36-2.29V2.29c0-1.27-1.06-2.29-2.36-2.29ZM9.7,26.79h-4.83v-14.45h4.83v14.45Zm-2.42-16.42h-.03c-1.62,0-2.67-1.11-2.67-2.5s1.08-2.5,2.73-2.5,2.67,1.08,2.7,2.5c0,1.39-1.05,2.5-2.73,2.5Zm19.84,16.42h-4.83v-7.73c0-1.94-.7-3.27-2.45-3.27-1.34,0-2.13.89-2.48,1.76-.13.31-.16.74-.16,1.17v8.07h-4.83s.06-13.09,0-14.45h4.83v2.05c.64-.98,1.79-2.39,4.36-2.39,3.18,0,5.56,2.07,5.56,6.5v8.29Z"></path>
1346</svg>
1347
1348</a></li>
1349</ul>
1350</div>
1351</div>
1352</div>
1353</div>
1354<div class='g-footer__section'>
1355<nav class='g-footer__nav' data-click-source-position='footer' data-click-source='navigation'>
1356<ul class='g-footer__menu'>
1357<h3 class='g-footer__menu__header'>Channels</h3>
1358<li>
1359<a href="/eat-and-drink">Eat & Drink</a>
1360</li>
1361<li>
1362<a href="/style-and-shopping">Style & Shopping</a>
1363</li>
1364<li>
1365<a href="/arts-and-culture">Art & Culture</a>
1366</li>
1367<li>
1368<a href="/news-and-city-life">News & City Life</a>
1369</li>
1370<li>
1371<a href="/travel-and-outdoors">Travel & Outdoors</a>
1372</li>
1373<li>
1374<a href="/home-and-real-estate">Home & Real Estate</a>
1375</li>
1376<li>
1377<a href="/health-and-wellness">Health & Wellness</a>
1378</li>
1379</ul>
1380<ul class='g-footer__menu'>
1381<h3 class='g-footer__menu__header'>About Us</h3>
1382<li>
1383<a href="/pages/about">Masthead</a>
1384</li>
1385<li>
1386<a href="https://about.pdxmonthly.com">Advertise</a>
1387</li>
1388<li>
1389<a href="/pages/jobs-at-portlandmonthly">Jobs</a>
1390</li>
1391<li>
1392<a href="/pages/privacy">Privacy Policy</a>
1393</li>
1394<li>
1395<a href="/pages/terms">Terms of Use</a>
1396</li>
1397<li>
1398<a href="/pages/sitemap">Site Map</a>
1399</li>
1400<li>
1401<a href="/pages/contact">Contact Us</a>
1402</li>
1403</ul>
1404<ul class='g-footer__menu'>
1405<h3 class='g-footer__menu__header'>Subscriptions</h3>
1406<li>
1407<a href="/subscribe">Subscribe</a>
1408</li>
1409<li>
1410<a href="/renew">Renew Subscription</a>
1411</li>
1412<li>
1413<a href="/pages/subscriber-faq">Change Address</a>
1414</li>
1415<li>
1416<a href="/pages/subscriber-faq">Subscriber FAQ</a>
1417</li>
1418<li>
1419<a href="/purchase-back-issues">Purchase Back Issues</a>
1420</li>
1421<li>
1422<a href="/newsletters">Newsletters</a>
1423</li>
1424</ul>
1425<ul class='g-footer__menu'>
1426<h3 class='g-footer__menu__header'>Pacific Media Group</h3>
1427<li>
1428<a href="https://www.seattlemet.com">Seattle Met</a>
1429</li>
1430<li>
1431<a href="https://www.houstoniamag.com">Houstonia</a>
1432</li>
1433<li>
1434<a href="https://www.aspensojo.com">Aspen Sojourner</a>
1435</li>
1436<li>
1437<a href="https://www.vailmag.com">Vail-Beaver Creek Magazine</a>
1438</li>
1439<li>
1440<a href="https://www.parkcitymag.com">Park City Magazine</a>
1441</li>
1442</ul>
1443</nav>
1444</div>
1445<div class='g-footer__section'>
1446&copy; 2026 Pacific Media Group
1447</div>
1448</div>
1449</div>
1450</div>
1451
1452</div>
1453
1454
1455<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a40389f4c9cf6197',t:'MTc5MDI3MTI1NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1455<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"04dd516ef7ad4e1aa750a93c404ae485","r":1,"spa":2}' crossorigin="anonymous"></script>
1455
1456</body>
1457</html>

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.